Commit a0a814c6 authored by Vasyl Bodnaruk's avatar Vasyl Bodnaruk

Refactor service for interact with scrapyd

parent 29abd37e
...@@ -3,6 +3,10 @@ from urllib.request import urlopen ...@@ -3,6 +3,10 @@ from urllib.request import urlopen
from scrapyd_api import ScrapydAPI from scrapyd_api import ScrapydAPI
from .models import Job from .models import Job
PROJECT = 'exa'
SCRAPYD_HOST = 'http://127.0.0.1:6800'
LOG_PATH = '/logs/' + PROJECT
class Service: class Service:
...@@ -11,11 +15,11 @@ class Service: ...@@ -11,11 +15,11 @@ class Service:
def update_jobs_status(self): def update_jobs_status(self):
try: try:
jobs = self.api.list_jobs('exa') jobs = self.api.list_jobs(PROJECT)
finished = jobs.get('finished') finished = jobs.get('finished')
if finished: if finished:
for i in finished: for i in finished:
Job.objects.filter(job_uuid=i['id'], status='RUN').update(status='FIN', end_time=i['end_time']) Job.objects.filter(job_uuid=i['id'], status=Job.RUNNING).update(status=Job.FINISHED, end_time=i['end_time'])
except: except:
pass pass
...@@ -23,21 +27,21 @@ class Service: ...@@ -23,21 +27,21 @@ class Service:
job = Job.objects.get(pk=job) job = Job.objects.get(pk=job)
job.job_uuid = self._run(job) job.job_uuid = self._run(job)
job.start_time = datetime.now() job.start_time = datetime.now()
job.status = 'RUN' job.status = Job.RUNNING
job.save() job.save()
return job.json() return job.json()
def cancel_job(self, job): def cancel_job(self, job):
job = Job.objects.get(pk=job) job = Job.objects.get(pk=job)
self.api.cancel('exa', job.job_uuid) self.api.cancel(PROJECT, job.job_uuid)
job.end_time = datetime.now() job.end_time = datetime.now()
job.status = 'FIN' job.status = Job.FINISHED
job.save() job.save()
return job.json() return job.json()
def delete_job(self, job): def delete_job(self, job):
job = Job.objects.get(pk=job) job = Job.objects.get(pk=job)
job.status = 'DEL' job.status = Job.DELETE
job.save() job.save()
return job.json() return job.json()
...@@ -45,7 +49,7 @@ class Service: ...@@ -45,7 +49,7 @@ class Service:
job = Job.objects.get(pk=job) job = Job.objects.get(pk=job)
job.start_time = None job.start_time = None
job.end_time = None job.end_time = None
job.status = 'PEN' job.status = Job.PENDING
job.save() job.save()
return job.json() return job.json()
...@@ -54,16 +58,16 @@ class Service: ...@@ -54,16 +58,16 @@ class Service:
job.job_uuid = self._run(job) job.job_uuid = self._run(job)
job.start_time = datetime.now() job.start_time = datetime.now()
job.end_time = None job.end_time = None
job.status = 'RUN' job.status = Job.RUNNING
job.save() job.save()
return job.json() return job.json()
def get_log(self, job): def get_log(self, job):
job = Job.objects.get(pk=job) job = Job.objects.get(pk=job)
url = 'http://127.0.0.1:6800/logs/exa/{}/{}.log'.format(job.spider.sp_name, job.job_uuid) url = SCRAPYD_HOST + LOG_PATH + '/{}/{}.log'.format(job.spider.sp_name, job.job_uuid)
response = urlopen(url) response = urlopen(url)
return response.read() return response.read()
def _run(self, job): def _run(self, job):
return self.api.schedule('exa', job.spider.sp_name, query=job.query) return self.api.schedule(PROJECT, job.spider.sp_name, query=job.query)
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