tasks.py
78 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
|
r196 | from __future__ import absolute_import | ||
r311 | from radarsys.celery import app | |||
|
r196 | from celery import task | ||
|
r253 | from datetime import timedelta, datetime | ||
|
r196 | |||
from .models import Experiment | ||||
|
r343 | from celery import Celery | ||
from celery.utils.log import get_task_logger | ||||
from django.utils import timezone | ||||
logger = get_task_logger(__name__) | ||||
|
r196 | |||
@task | ||||
def task_start(id_exp): | ||||
|
r343 | exp = Experiment.objects.get(pk=id_exp) | ||
r311 | status = exp.status | |||
if exp.status == 2: | ||||
print('Experiment {} already running start task not executed'.format(exp)) | ||||
return 2 | ||||
if status == 3: | ||||
|
r343 | now = datetime.now() | ||
r311 | start = datetime.combine(now.date(), exp.start_time) | |||
|
r343 | end = datetime.combine(now.date(), exp.end_time) | ||
print(now) | ||||
print(start) | ||||
print(end) | ||||
r311 | if end < start: | |||
end += timedelta(1) | ||||
try: | ||||
print('Starting exp:{}'.format(exp)) | ||||
exp.status = exp.start() | ||||
except: | ||||
print('Error') | ||||
exp.status = 0 | ||||
if exp.status == 2: | ||||
|
r343 | task = task_stop.apply_async((id_exp,),eta=end) #Antiguo eta=end+timedelta(hours=5)) | ||
r311 | exp.task = task.id | |||
exp.save() | ||||
return exp.status | ||||
|
r253 | |||
|
r196 | @task | ||
def task_stop(id_exp): | ||||
exp = Experiment.objects.get(pk=id_exp) | ||||
r311 | if exp.status == 2: | |||
try: | ||||
print('Stopping exp:{}'.format(exp)) | ||||
exp.status = exp.stop() | ||||
except: | ||||
print('Error') | ||||
exp.status = 0 | ||||
|
r253 | |||
|
r343 | now = datetime.now() | ||
start = datetime.combine(now.date()+timedelta(1), exp.start_time) | ||||
task = task_start.apply_async((id_exp, ), eta=start) #Antiguo eta=start+timedelta(hours=5)) | ||||
exp.task = task.id | ||||
r311 | exp.status = 3 | |||
exp.save() | ||||
return exp.status | ||||
|
r253 | |||
#Task to get status | ||||
@task | ||||
def task_status(id_exp): | ||||
|
r343 | print ("task status"+str(id_exp)) | ||
|
r253 | exp = Experiment.objects.get(pk=id_exp) | ||
if exp.status==2: | ||||
run_every = timedelta(minutes=1) | ||||
|
r343 | now = datetime.utcnow() | ||
date = now + run_every | ||||
|
r253 | task_status.apply_async((id_exp,), eta=date) | ||
r335 | print ("Monitoring...") | |||
|
r253 | exp.get_status() | ||
return exp.status | ||||
else: | ||||
return exp.status | ||||