Blame view

src/majordome/tasks.py 2.42 KB
5b5566ab   haribo   added celery
1
2
3
from __future__ import absolute_import

from celery.task import Task
77816f10   haribo   Workflow implemen...
4
from observation_manager.tasks import execute_plan
7a79e25b   haribo   Date: 19/05/2016
5
from pyrosapp.models import *
5b5566ab   haribo   added celery
6
7
8

import time

77816f10   haribo   Workflow implemen...
9
10
DEFAULT_PLAN_NUMBER = 2
DEFAULT_COUNTDOWN = 1
5b5566ab   haribo   added celery
11

7a79e25b   haribo   Date: 19/05/2016
12

77816f10   haribo   Workflow implemen...
13
class execute_sequence(Task):
5b5566ab   haribo   added celery
14

7a79e25b   haribo   Date: 19/05/2016
15
    def run(self, shs_pk):
bb45cd4a   haribo   Date: 25/05/2016
16
        print("ex seq : ", self.request.id)
7a79e25b   haribo   Date: 19/05/2016
17
18
19
20
        # 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
bb45cd4a   haribo   Date: 25/05/2016
21
22

        TaskId.objects.filter(task_id=self.request.id).delete()
7a79e25b   haribo   Date: 19/05/2016
23
        message = 'Start sequence ' + str(sequence.pk) + ' execution'
77816f10   haribo   Workflow implemen...
24
        Log.objects.create(agent='Majordome', message=message)
7a79e25b   haribo   Date: 19/05/2016
25
26
27
        print("execute_sequence : ", sequence.pk)
        countdown = DEFAULT_COUNTDOWN  # déterminer le vrai ...

77816f10   haribo   Workflow implemen...
28
        # je devrais peut-être faire un groupe à la place de plusieurs taches
7a79e25b   haribo   Date: 19/05/2016
29

77816f10   haribo   Workflow implemen...
30
        # le .get() du résultat d'un group est bloquant :)
7a79e25b   haribo   Date: 19/05/2016
31
32

        plan_id = 1  # simple valeur de test, il faudra envoyer le vrai ID
77816f10   haribo   Workflow implemen...
33
34
        plans_results = []
        for i in range(DEFAULT_PLAN_NUMBER):
bb45cd4a   haribo   Date: 25/05/2016
35
36
37
            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)
77816f10   haribo   Workflow implemen...
38
            plan_id += 1
7a79e25b   haribo   Date: 19/05/2016
39

77816f10   haribo   Workflow implemen...
40
        for plan_result in plans_results:
7a79e25b   haribo   Date: 19/05/2016
41
42
            # attention, un revoke n'annule pas le countdown du get() (à
            # réfléchir)
bb45cd4a   haribo   Date: 25/05/2016
43
44
45
46
            try:
                plan_result.get()
            except Exception:
                pass
7a79e25b   haribo   Date: 19/05/2016
47
48
49
50
51
        # 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'
77816f10   haribo   Workflow implemen...
52
        Log.objects.create(agent='Majordome', message=message)
5b5566ab   haribo   added celery
53

7a79e25b   haribo   Date: 19/05/2016
54

5b5566ab   haribo   added celery
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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")