tasks.py
2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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")