from __future__ import absolute_import from radarsys.celery import app from celery import Task from datetime import timedelta, datetime from .models import Experiment from celery import Celery from celery.utils.log import get_task_logger from django.utils import timezone logger = get_task_logger(__name__) @Task def task_start(id_exp): print("exp.id", id_exp) exp = Experiment.objects.get(pk=id_exp) status = exp.status if status == 2: print('Experiment {} already running start task not executed'.format(exp)) return 2 if status == 3: now = datetime.now() start = datetime.combine(now.date(), exp.start_time) end = datetime.combine(now.date(), exp.end_time) print(now) print(start) print(end) 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: #task = task_stop.apply_async((id_exp,),eta=end) #Antiguo eta=end+timedelta(hours=5)) task = task_stop.apply_async((id_exp,),eta=end+timedelta(hours=5)) #Antiguo eta=end+timedelta(hours=5)) exp.task = task.id #------------ new ---------------------- if status == 4 or status == 1: now = datetime.now() start = datetime.combine(now.date(), exp.start_time) end = datetime.combine(now.date(), exp.end_time) print(now) print(start) print(end) if now >= start: print('Starting exp:{}'.format(exp)) exp.status = exp.start() #--------------------------------------- exp.save() return exp.status @Task def task_stop(id_exp): exp = Experiment.objects.get(pk=id_exp) if exp.status == 2: try: print('Stopping exp:{}'.format(exp)) exp.status = exp.stop() except: print('Error') exp.status = 0 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 exp.status = 3 exp.save() return exp.status #Task to get status @Task def task_status(id_exp): print ("task status"+str(id_exp)) exp = Experiment.objects.get(pk=id_exp) if exp.status==2: run_every = timedelta(minutes=1) now = datetime.utcnow() date = now + run_every task_status.apply_async((id_exp,), eta=date) print ("Monitoring...") exp.get_status() return exp.status else: return exp.status @Task def task_test(id_exp): print("mm",id_exp) exp = Experiment.objects.get(pk=id_exp) exp.status = exp.start() return exp.status