Commit 3dd19195 authored by Vasyl Bodnaruk's avatar Vasyl Bodnaruk

Add functional for run Job

parent 0326e582
...@@ -59,7 +59,7 @@ class Job(models.Model): ...@@ -59,7 +59,7 @@ class Job(models.Model):
) )
name = models.CharField(max_length=50, default=None, null=True) name = models.CharField(max_length=50, default=None, null=True)
job_id = models.CharField(max_length=50, default=None, null=True) job_uuid = models.CharField(max_length=50, default=None, null=True)
create_time = models.DateTimeField(default=datetime.now) create_time = models.DateTimeField(default=datetime.now)
start_time = models.DateTimeField(default=None, null=True) start_time = models.DateTimeField(default=None, null=True)
end_time = models.DateTimeField(default=None, null=True) end_time = models.DateTimeField(default=None, null=True)
......
from datetime import datetime
from scrapyd_api import ScrapydAPI
from .models import Spider, Job from .models import Spider, Job
class Service: class Service:
def update_jobs_status(self, jobs): def __init__(self):
self.api = ScrapydAPI()
def update_jobs_status(self):
try: try:
jobs = self.api.list_jobs('exa')
finished = jobs.get('finished') finished = jobs.get('finished')
if finished: if finished:
for i in finished: for i in finished:
Job.objects.get(job_id=i['id']).update(status='FIN', end_time=i['end_time']) Job.objects.get(job_uuid=i['id']).update(status='FIN', end_time=i['end_time'])
running = jobs.get('running') running = jobs.get('running')
if running: if running:
for i in running: for i in running:
Job.objects.get(job_id=i['id']).update(status='RUN') Job.objects.get(job_uuid=i['id']).update(status='RUN')
except: except:
pass pass
def run_job(self, job): def run_job(self, job):
job = Job.objects.get(pk=job)
print(job.spider.sp_name)
uuid = self.api.schedule('exa', job.spider.sp_name)
job.job_uuid = uuid
job.start_time = datetime.now()
job.status = 'RUN'
job.save()
print("job is running") print("job is running")
from django.shortcuts import render, HttpResponseRedirect, reverse, HttpResponse from django.shortcuts import render, HttpResponseRedirect, reverse, HttpResponse
from django.views.generic import ListView, CreateView from django.views.generic import ListView, CreateView
from scrapyd_api import ScrapydAPI
from .models import Spider, Job from .models import Spider, Job
from .service import Service from .service import Service
...@@ -11,7 +10,6 @@ class JobListView(ListView): ...@@ -11,7 +10,6 @@ class JobListView(ListView):
model = Job model = Job
def __init__(self): def __init__(self):
self.client = ScrapydAPI()
self.service = Service() self.service = Service()
super(JobListView, self).__init__() super(JobListView, self).__init__()
...@@ -28,13 +26,11 @@ class JobListView(ListView): ...@@ -28,13 +26,11 @@ class JobListView(ListView):
action = request.POST.get('action') action = request.POST.get('action')
job_id = request.POST.get('job_id') job_id = request.POST.get('job_id')
if action == 'run': if action == 'run':
print(job_id) self.service.run_job(job_id)
# job = Job.objects.get(pk=job_id)
if action == 'cancel': if action == 'cancel':
pass pass
if action == 'update': if action == 'update':
jobs = self.client.list_jobs('exa') self.service.update_jobs_status()
self.service.update_jobs_status(jobs)
if action == 'new': if action == 'new':
return HttpResponseRedirect(reverse('new_job')) return HttpResponseRedirect(reverse('new_job'))
...@@ -44,10 +40,6 @@ class JobListView(ListView): ...@@ -44,10 +40,6 @@ class JobListView(ListView):
class NewJobCreateView(CreateView): class NewJobCreateView(CreateView):
template_name = 'new_job.html' template_name = 'new_job.html'
def __init__(self):
self.client = ScrapydAPI()
super(NewJobCreateView, self).__init__()
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
spiders = Spider.objects.all() spiders = Spider.objects.all()
return render(request, self.template_name, {'spiders': spiders}) return render(request, self.template_name, {'spiders': spiders})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment