tasks.py 2.42 KB
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")