from __future__ import absolute_import from celery.task import Task from observation_manager.tasks import execute_plan from pyrosapp.models import * import time DEFAULT_PLAN_NUMBER = 2 DEFAULT_COUNTDOWN = 1 class execute_sequence(Task): def run(self, shs_pk): print("ex seq : ", self.request.id) # ici, je fais les actions de début de séquence (slewing, intruments # configuration, etc) shs = ScheduleHasSequences.objects.get(pk=shs_pk) sequence = shs.sequence TaskId.objects.filter(task_id=self.request.id).delete() message = 'Start sequence ' + str(sequence.pk) + ' execution' Log.objects.create(agent='Majordome', message=message) print("execute_sequence : ", sequence.pk) countdown = DEFAULT_COUNTDOWN # déterminer le vrai ... # je devrais peut-être faire un groupe à la place de plusieurs taches # le .get() du résultat d'un group est bloquant :) plan_id = 1 # simple valeur de test, il faudra envoyer le vrai ID plans_results = [] for i in range(DEFAULT_PLAN_NUMBER): res = execute_plan.apply_async((str(sequence.pk) + ' - ' + str(plan_id),), countdown=countdown) TaskId.objects.create(task_id=res.id, task="execute_plan") plans_results.append(res) plan_id += 1 for plan_result in plans_results: # attention, un revoke n'annule pas le countdown du get() (à # réfléchir) try: plan_result.get() except Exception: pass # en cas d'alerte reçue, on va aussi supprimer la séquence en cours d'exécution ; ça permettra de virer ce problème du countdown. # de toute façon, c'est le execute_plan qui se charge d'envoyer les images à l'analyse, donc osef que ça coupe ici # l'unique but de ne pas couper ici dès la création des plans est # d'attendre la fin d'une séquence avant d'en lancer une autre. message = 'Finished sequence ' + str(sequence.pk) + ' execution' Log.objects.create(agent='Majordome', message=message) class system_pause(Task): def run(self): time.sleep(5) print("system_pause") class system_restart(Task): def run(self): time.sleep(5) print("system_restart") class change_obs_conditions(Task): def run(self): time.sleep(5) print("change_obs_conditions")