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 = (
'admin',
'auth',
......@@ -27,4 +27,31 @@ class EsiDatabaseRouter:
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.default_apps:
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
\ No newline at end of file
......@@ -94,7 +94,7 @@ DATABASES = {
}
}
DATABASE_ROUTERS = ['webapp.router.WebappDatabaseRouter', 'esi.router.EsiDatabaseRouter']
DATABASE_ROUTERS = ['esi.router.DefaultDatabaseRouter', 'esi.router.EsiDatabaseRouter']
# Password validation
......
......@@ -6,6 +6,10 @@ from django.db import models
class Spider(models.Model):
name = models.CharField(max_length=50, default=None, null=True)
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):
......@@ -18,8 +22,8 @@ class JobQuerySet(models.QuerySet):
def finished(self):
return self.filter(status='FIN')
def not_status(self):
return self.filter(status='NOT')
def pending(self):
return self.filter(status='PEN')
class JobManager(models.Manager):
......@@ -35,28 +39,28 @@ class JobManager(models.Manager):
def finished(self):
return self.get_queryset().finished()
def not_status(self):
return self.get_queryset().not_status()
def pending(self):
return self.get_queryset().pending()
class Job(models.Model):
DELETE = 'DEL'
FINISHED = 'FIN'
RUNNING = 'RUN'
STOP = 'STP'
NOTOP = 'NOT'
PENDING = 'PEN'
STATUS = (
(DELETE, 'delete'),
(FINISHED, 'finished'),
(RUNNING, 'running'),
(NOTOP, 'not_status')
(PENDING, 'pending')
)
name = 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()
finish_time = models.DateTimeField()
status = models.CharField(max_length=3, choices=STATUS, default=NOTOP)
end_time = models.DateTimeField()
status = models.CharField(max_length=3, choices=STATUS, default=PENDING)
spider = models.ForeignKey(Spider, default=None, null=True)
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
from scrapyd_api import ScrapydAPI
from .models import Spider, Job
from .service import Service
class JobListView(ListView):
......@@ -12,16 +13,21 @@ class JobListView(ListView):
def __init__(self):
self.client = ScrapydAPI()
self.service = Service()
super(JobListView, self).__init__()
def get(self, request, *args, **kwargs):
jobs = self.client.list_jobs('exa')
print(jobs)
self.service.update_jobs_status(jobs)
jobs = {
'deleted': Job.objects.deleted(),
'running': Job.objects.running(),
'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):
action = request.POST.get('action')
......
......@@ -22,9 +22,8 @@
<a class="navbar-brand" href="#">ESI</a>
</div>
<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 'job_list' %}">Scraper</a></li>
<li><a href="{% url 'job_list' %}">Run&Settings</a></li>
<li><a href="#">Stat</a></li>
</ul>
......
{% extends 'base.html' %}
\ No newline at end of file
{% extends 'base.html' %}
{% 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