Commit e6410551 authored by Vasyl Bodnaruk's avatar Vasyl Bodnaruk

Make function for update status work and other:

change DB routers, models
parent 292a6fb5
class EsiDatabaseRouter: class DefaultDatabaseRouter:
default_apps = ( default_apps = (
'admin', 'admin',
'auth', 'auth',
...@@ -27,4 +27,31 @@ class EsiDatabaseRouter: ...@@ -27,4 +27,31 @@ class EsiDatabaseRouter:
def allow_migrate(self, db, app_label, model_name=None, **hints): def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.default_apps: if app_label in self.default_apps:
return db == 'default' return db == 'default'
return None
class EsiDatabaseRouter:
esi_apps = (
'webapp',
'scraper',
)
def db_for_read(self, model, **hints):
if model._meta.app_label in self.esi_apps:
return 'esi'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.esi_apps:
return 'esi'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label in self.esi_apps or obj2._meta.app_label in self.esi_apps:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.esi_apps:
return db == 'esi'
return None return None
\ No newline at end of file
...@@ -94,7 +94,7 @@ DATABASES = { ...@@ -94,7 +94,7 @@ DATABASES = {
} }
} }
DATABASE_ROUTERS = ['webapp.router.WebappDatabaseRouter', 'esi.router.EsiDatabaseRouter'] DATABASE_ROUTERS = ['esi.router.DefaultDatabaseRouter', 'esi.router.EsiDatabaseRouter']
# Password validation # Password validation
......
...@@ -6,6 +6,10 @@ from django.db import models ...@@ -6,6 +6,10 @@ from django.db import models
class Spider(models.Model): class Spider(models.Model):
name = models.CharField(max_length=50, default=None, null=True) name = models.CharField(max_length=50, default=None, null=True)
sp_name = models.CharField(max_length=20, default=None) sp_name = models.CharField(max_length=20, default=None)
media = models.IntegerField(default=None, null=True)
def __str__(self):
return self.name
class JobQuerySet(models.QuerySet): class JobQuerySet(models.QuerySet):
...@@ -18,8 +22,8 @@ class JobQuerySet(models.QuerySet): ...@@ -18,8 +22,8 @@ class JobQuerySet(models.QuerySet):
def finished(self): def finished(self):
return self.filter(status='FIN') return self.filter(status='FIN')
def not_status(self): def pending(self):
return self.filter(status='NOT') return self.filter(status='PEN')
class JobManager(models.Manager): class JobManager(models.Manager):
...@@ -35,28 +39,28 @@ class JobManager(models.Manager): ...@@ -35,28 +39,28 @@ class JobManager(models.Manager):
def finished(self): def finished(self):
return self.get_queryset().finished() return self.get_queryset().finished()
def not_status(self): def pending(self):
return self.get_queryset().not_status() return self.get_queryset().pending()
class Job(models.Model): class Job(models.Model):
DELETE = 'DEL' DELETE = 'DEL'
FINISHED = 'FIN' FINISHED = 'FIN'
RUNNING = 'RUN' RUNNING = 'RUN'
STOP = 'STP' PENDING = 'PEN'
NOTOP = 'NOT'
STATUS = ( STATUS = (
(DELETE, 'delete'), (DELETE, 'delete'),
(FINISHED, 'finished'), (FINISHED, 'finished'),
(RUNNING, 'running'), (RUNNING, 'running'),
(NOTOP, 'not_status') (PENDING, 'pending')
) )
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_id = models.CharField(max_length=50, default=None, null=True)
create_time = models.DateTimeField(default=None, null=True)
start_time = models.DateTimeField() start_time = models.DateTimeField()
finish_time = models.DateTimeField() end_time = models.DateTimeField()
status = models.CharField(max_length=3, choices=STATUS, default=NOTOP) status = models.CharField(max_length=3, choices=STATUS, default=PENDING)
spider = models.ForeignKey(Spider, default=None, null=True) spider = models.ForeignKey(Spider, default=None, null=True)
objects = JobManager() objects = JobManager()
......
from .models import Spider, Job
class Service:
def update_jobs_status(self, jobs):
finished = jobs.get('finished')
if finished:
for i in finished:
Job.objects.get(job_id=i['id']).update(status='FIN', end_time=i['end_time'])
running = jobs.get('running')
if running:
for i in running:
Job.objects.get(job_id=i['id']).update(status='RUN')
...@@ -4,6 +4,7 @@ from django.views.generic import ListView ...@@ -4,6 +4,7 @@ from django.views.generic import ListView
from scrapyd_api import ScrapydAPI from scrapyd_api import ScrapydAPI
from .models import Spider, Job from .models import Spider, Job
from .service import Service
class JobListView(ListView): class JobListView(ListView):
...@@ -12,16 +13,21 @@ class JobListView(ListView): ...@@ -12,16 +13,21 @@ class JobListView(ListView):
def __init__(self): def __init__(self):
self.client = ScrapydAPI() self.client = ScrapydAPI()
self.service = Service()
super(JobListView, self).__init__() super(JobListView, self).__init__()
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
jobs = self.client.list_jobs('exa')
print(jobs)
self.service.update_jobs_status(jobs)
jobs = { jobs = {
'deleted': Job.objects.deleted(), 'deleted': Job.objects.deleted(),
'running': Job.objects.running(), 'running': Job.objects.running(),
'finished': Job.objects.finished(), 'finished': Job.objects.finished(),
'not_status': Job.objects.not_status() 'pending': Job.objects.pending()
} }
return render(request, self.template_name) return render(request, self.template_name, {'jobs': jobs})
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
action = request.POST.get('action') action = request.POST.get('action')
......
...@@ -22,9 +22,8 @@ ...@@ -22,9 +22,8 @@
<a class="navbar-brand" href="#">ESI</a> <a class="navbar-brand" href="#">ESI</a>
</div> </div>
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="active"><a href="/">Home</a></li>
<li><a href="{% url 'list_news' %}">News</a></li> <li><a href="{% url 'list_news' %}">News</a></li>
<li><a href="{% url 'job_list' %}">Scraper</a></li> <li><a href="{% url 'job_list' %}">Run&Settings</a></li>
<li><a href="#">Stat</a></li> <li><a href="#">Stat</a></li>
</ul> </ul>
......
{% extends 'base.html' %} {% extends 'base.html' %}
\ No newline at end of file
{% block content %}
{{ jobs }}
{% endblock %}
\ No newline at end of file
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