TODO

Version 113 (Etienne Pallier, 10/13/2017 11:40 am)

1 1 Paul Carensac
h1. TODO
2 1 Paul Carensac
3 51 Etienne Pallier
4 1 Paul Carensac
{{>toc}}
5 51 Etienne Pallier
6 1 Paul Carensac
7 1 Paul Carensac
---
8 1 Paul Carensac
9 111 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}IMPORTANT LINKS%
10 111 Etienne Pallier
11 111 Etienne Pallier
* Agenda : https://docs.google.com/spreadsheets/d/1nkxVgc3d_kqMTe5n2fW1MNLJMQSy6BbHFw_-AqpvHqA/edit#gid=0
12 111 Etienne Pallier
13 111 Etienne Pallier
* Simulateurs : https://docs.google.com/spreadsheets/d/18Kt0eKjQfvNPrNIu0Ns5Vsk7GwccHJ6kCbPzFG5oQZ0/edit#gid=0
14 111 Etienne Pallier
15 111 Etienne Pallier
* Doc générale : https://docs.google.com/document/d/1PkzF8mWwI21XqfqdOci-75SLOVmODLjYNYvZs8IqE-c/edit#heading=h.n8xyd0gz3khw
16 111 Etienne Pallier
17 111 Etienne Pallier
18 111 Etienne Pallier
19 88 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}Questions%
20 1 Paul Carensac
21 102 Etienne Pallier
* Est-ce qu'on tient compte des Ephemerids lors de la création d'une requete Alerte ou pas ?
22 88 Etienne Pallier
* What is the 'flag' attribute ? (@AK)
23 111 Etienne Pallier
24 90 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}DIVERS TODOs%
25 1 Paul Carensac
26 1 Paul Carensac
27 1 Paul Carensac
* A étudier, et éventuellement adopter :
28 112 Etienne Pallier
29 113 Etienne Pallier
 * Django REST : http://www.django-rest-framework.org
30 113 Etienne Pallier
31 112 Etienne Pallier
 * Pyros Reactions to Events : https://docs.google.com/document/d/1PkzF8mWwI21XqfqdOci-75SLOVmODLjYNYvZs8IqE-c/edit#heading=h.e6e3l94wgjut
32 112 Etienne Pallier
33 112 Etienne Pallier
 * TEST PLAN : 
34 109 Etienne Pallier
35 109 Etienne Pallier
 * Django vraiment polymorphique : https://django-polymorphic.readthedocs.io/en/stable/quickstart.html#making-your-models-polymorphic
36 109 Etienne Pallier
 * Projet Pyro (en remplacement de Celery ?) : https://pypi.python.org/pypi/Pyro4
37 108 Etienne Pallier
38 106 Etienne Pallier
* *Installation script* : l'écrire entièrement en Python (à la place du Bash)
39 105 Etienne Pallier
40 98 Etienne Pallier
* UPDATES :
41 98 Etienne Pallier
42 106 Etienne Pallier
 * *Celery* => passer à la v4 (apparemment, il faut d'abord upgrader vers la v3.1.25 - cf http://docs.celeryproject.org/en/latest/whatsnew-4.0.html#whatsnew-4-0)
43 98 Etienne Pallier
 * Django 1.11 (later)
44 107 Etienne Pallier
 * Python 3.6 (later)
45 98 Etienne Pallier
46 100 Etienne Pallier
* Introduire le composant Ephemerids (donne position lune, soleil, planètes pour la nuit...)
47 101 Etienne Pallier
* (?) Réintroduire la notion de RequestBuilder puisqu'il doit récupérer l'information donnée par Ephemerids, aussi bien pour construire une Routine que pour une Alerte
48 100 Etienne Pallier
49 98 Etienne Pallier
* Compléter la grammaire de commandes PYROS à destination des telescopes et cameras (en essayant de faire des mises en commun)
50 104 Etienne Pallier
* *Mieux gérer l'héritage dans les modèles* : pyros_user => user, telescope => device, detector => device, etc... ; l'héritage doit être "transparent", ex: pyros_user.name = pyros_user.user.name, telescope.name = telescope.device.name, etc...
51 103 Etienne Pallier
=> lire la partie " Les modèles parents classiques" de la section "L'héritage des modèles" de cet article : https://openclassrooms.com/courses/developpez-votre-site-web-avec-le-framework-django/techniques-avancees-dans-les-modeles
52 97 Etienne Pallier
* Ajouter le développement des simulateurs (en cours) dans la roadmap
53 96 Etienne Pallier
* Faire apparaitre une classe Factory à laquelle le Simulator fait appel pour créer ses instances du modèle ; c'est une classe utilitaire, à mettre à part, et utilisable par d'autres parties du code
54 94 Etienne Pallier
* Upgrade Django => 1.10
55 88 Etienne Pallier
* Roue à filtre : doit pouvoir être associée à Camera ou bien à Tele (c’est prévu dans la BD ou pas ?)
56 1 Paul Carensac
* Il faut un système de LOG utilisé par tous les modules (Django en a un par défaut ?)
57 89 Etienne Pallier
* table filter_wheel : ajouter un champ "position" (numérique, c'est pas forcément un angle)
58 92 Etienne Pallier
* table filter : ajouter un champ "epaisseur équivalente" (donne le recul nécessaire à faire pour ajuster la focalisation) : un filtre a une épaisseur (a priori la même pour tous les filtres mais pas forcément) et on doit donc refocaliser pour en tenir compte
59 91 Etienne Pallier
* ajouter un NODE dans lequel on met le telescope (comme CADOR qui est un noeud regroupant plusieurs telescopes Tarot) : on peut par exemple imaginer que le GFT sera plus tard associé au telescope Butes du SPM ou au telescope chinois géré par le CSC (60cm), ou au GWAC du Chili
60 90 Etienne Pallier
* Créer un super agent SystemWatcher qui surveille tous les "agents" et les relance en cas de problème => ainsi, on n'a qu'un seul cron à exécuter pour relancer SystemWatcher s'il crashe (et c'est lui qui se charge de relancer les autres)
61 1 Paul Carensac
* Weather : plusieurs sources à traiter en parallèle, et en faire la synthèse ; plusieurs avantages:
62 91 Etienne Pallier
63 90 Etienne Pallier
 * redondance : si une source crashe, on a les autres
64 90 Etienne Pallier
 * validité des données : on est davantage sûr d'un phénomène s'il est confirmé par plusieurs sources
65 90 Etienne Pallier
 * identification de panne : si 1 seule source annonce la pluie et 2 autres non (ou l'inverse), on peut penser que cette source est défaillante
66 1 Paul Carensac
 * complémentarité : les différentes sources n'apportent pas exactement la même information, elles peuvent se compléter (ex: cloud sensor et rain detector)
67 98 Etienne Pallier
68 98 Etienne Pallier
* Ajouter la possibilité de planifier les séquences de la liste "to be planned" de CADOR: http://cador.obs-hp.fr/ros/scenes_cador.php
69 98 Etienne Pallier
70 98 Etienne Pallier
* Ajouter des boutons de navigation sur le planning, permettant de passer au planning précédent (historique), ou suivant, ou de revenir à celui du jour : <PREC> <NOW> <SUCC>
71 1 Paul Carensac
72 52 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}General tasks (notes Etienne Pallier)%
73 1 Paul Carensac
74 85 Jeremy Barneron
* -Analysis (and calibration) module:-
75 85 Jeremy Barneron
-Pour l'instant, il est considéré qu'un plan forme une seule image. Lors de la fin de l'exécution d'un plan, la tâche execute_plan crée une tâche analysis à laquelle il envoie l'id du plan qui vient d'être exécuté. La tâche d'analysis- -récupère le plan en question, et récupère son nom. Pour le moment, les images crées ont le nom du plan correspondant. Il y a une ligne de TODO dans la tâche d'analysis qui dit de vérifier si le plan provient bien d'une alerte avant--de faire les analyses. Dans tous les cas, les calibrations sont appliquées.-
76 85 Jeremy Barneron
-=> Pour faire évoluer ce système d'image (puisqu'un plan crée plusieurs images), il faudra être capable de dire dans le execute_plan : une image vient d'être terminée par la caméra. Auquel cas on créera une tâche analysis à chaque-image crée, en lui donnant l'id du plan et le nom de l'image.-
77 83 Etienne Pallier
78 85 Jeremy Barneron
* -Dashboard: s'inspirer du tableau de bord de l'ancien logiciel ROS-
79 85 Jeremy Barneron
-http://cador.obs-hp.fr/ros/manual/cador_actions.html-
80 85 Jeremy Barneron
-(cliquer par exemple sur Gardien)-
81 81 Etienne Pallier
82 85 Jeremy Barneron
* -Données simulées : faire l'inventaire des données dont on a besoin (action en cours), données qui entrent (inputs) et qui sortent (output) de notre système-
83 81 Etienne Pallier
84 85 Jeremy Barneron
* -Scheduler:-
85 84 Etienne Pallier
86 85 Jeremy Barneron
 * -Améliorer l'affichage du planning: ajouter une colonne "Observatory status" dans laquelle on affichera pour chaque séquence des icônes donnant le status en cours du ciel (cloudy, ...), le status des instruments (ex: icone d'un matériel en panne pour dire qu'on a un soucis sur le matériel)... ; en cliquant sur ces icones, on aurait plus de détails sur ce qui se passe-
87 85 Jeremy Barneron
 * -Heure TU (UTC)-
88 85 Jeremy Barneron
 * -N'afficher que la fenêtre de temps actuelle (mais on doit pouvoir scroller)-
89 85 Jeremy Barneron
 * -Remplacer EXECUTED par COMPLETED, EXECUTED (partial) par INTERRUPTED, PENDING par EXPECTED-
90 85 Jeremy Barneron
 * -Il faudrait une page qui montre toutes les séquences rejetées et exécutées (à préciser)-
91 80 Etienne Pallier
92 85 Jeremy Barneron
* -Interface with GIC:-
93 77 Etienne Pallier
94 85 Jeremy Barneron
 * -Produire les données à envoyer au GIC dans un repertoire GIC/TO/ (pour que le GIC vienne les y chercher)-
95 85 Jeremy Barneron
 * -Récupérer les données envoyées par le GIC depuis un autre repertoire GIC/FROM/-
96 77 Etienne Pallier
97 85 Jeremy Barneron
* -Interface with FSC:-
98 77 Etienne Pallier
99 85 Jeremy Barneron
 * -Copier (ou linker) les données à envoyer au FSC dans un repertoire FSC/TO/ (ou autre solution ?)-
100 77 Etienne Pallier
101 77 Etienne Pallier
102 85 Jeremy Barneron
* -Tests unitaires (pyrosrun.sh unittest): les tests unitaires ne devraient pas faire appel à Celery (rabbitmq), or 2 tests ne passent pas si rabbitmq n'est pas lancé:-
103 73 Etienne Pallier
104 85 Jeremy Barneron
 * -test_full_creation (common.tests.RequestBuilderTests)-
105 85 Jeremy Barneron
 * -test_change_all_working (alert_manager.tests.TestStrategyChange)-
106 85 Jeremy Barneron
 * -=> il faut donc enlever le lien avec Celery dans ces tests (ou alors sortir ces tests des tests unitaires)-
107 85 Jeremy Barneron
-(Paul Carensac: La configuration de celery étant dans le settings.py, elle est exécutée dans tous les cas, et on associe celery à amqp dans ce fichier (ça fait peut-être quelque chose, même si je trouve ça bizarre))-
108 73 Etienne Pallier
109 73 Etienne Pallier
110 85 Jeremy Barneron
* -Observer:-
111 70 Etienne Pallier
112 85 Jeremy Barneron
 * -Refactoriser tasks.execute_plan{vis,nir}-
113 85 Jeremy Barneron
 * -Gérer le Dithering : au début, c'est la camera NIR qui devait le gérer, mais ça risque d'être le Telescope !!! => va compliquer énormément les séquences d'observation.-
114 85 Jeremy Barneron
 * -Organisation physique des données sur le disque-
115 76 Etienne Pallier
116 85 Jeremy Barneron
  * -Estimer le nombre de fichiers (et volume total)
117 85 Jeremy Barneron
  * -3 espaces sur le disque (ou 3 disques ?):-
118 85 Jeremy Barneron
-(1) Un espace disque dédié aux images créées au fur et à mesure, nommé PRODUCED_DATA/-
119 85 Jeremy Barneron
-(2) Un espace disque dédié aux entités externes (GIC, FSC), nommé EXTERNAL_ENTITIES/-
120 85 Jeremy Barneron
-(3) Un espace disque dédié au téléchargement par les utilisateurs, nommé DOWNLOAD/-
121 76 Etienne Pallier
122 85 Jeremy Barneron
   * -Sur l’espace (1):-
123 85 Jeremy Barneron
-1 repertoire par nuit => pas très adapté car les AR et RR peuvent être exécutées sur plusieurs nuits.-
124 85 Jeremy Barneron
-=> préférer un repertoire par requete, que ce soit une alerte (AR), ou une routine (RR)-
125 85 Jeremy Barneron
-=> on peut même ajouter un sous-repertoire par sequence, ce qui aurait du sens puisque la sequence est l’unité de la planification.-
126 85 Jeremy Barneron
-=> il n’est sans doute pas nécessaire de descendre en dessous du niveau de la sequence (1 sous-repertoire par album c’est à dire par détecteur, puis 1 sous-repertoire par plan, quoi que...)-
127 85 Jeremy Barneron
-- Nom des dossiers : dès le début, un suffixe “_active” pour dire que c’est en cours de construction, puis supprimer ce suffixe quand la requête est terminée. Ex: alerte_1234_active/ => alerte_1234/-
128 85 Jeremy Barneron
-- Nom des images (même principe) : au début, un suffixe “.tmp”, qu’on supprime ensuite quand l’image est écrite entièrement.-
129 76 Etienne Pallier
130 85 Jeremy Barneron
   * -Sur l’espace (2):-
131 85 Jeremy Barneron
-1 repertoire FSC/-
132 85 Jeremy Barneron
-1 repertoire GIC/-
133 85 Jeremy Barneron
-Ces répertoires contiennent 2 sous-repertoire TO/ (ce qui doit être récupéré par l’entité) et FROM/ (ce que l’entité nous envoie).-
134 85 Jeremy Barneron
-A priori le répertoire FSC/ n’a besoin que d’un sous-répertoire TO/, et ce sous-rep pourrait soit contenir une COPIE des fichiers, soit des LIENS vers les fichiers originaux (solution préférable).-
135 76 Etienne Pallier
136 85 Jeremy Barneron
 * -Récupération des données d’une Request par son propriétaire (où tout autre user du même SP ?)-
137 85 Jeremy Barneron
-Ca risque d’être lourd à télécharger via du http, donc peut-on imaginer de donner un accès FTP direct sur le disque dur, dans un repertoire dédié à la récupération des données (dans lequel on aura recopié seulement les données demandées par l’utilisateur) => espace (3)-
138 76 Etienne Pallier
139 1 Paul Carensac
 
140 76 Etienne Pallier
141 76 Etienne Pallier
142 70 Etienne Pallier
143 85 Jeremy Barneron
* -Sequence:-
144 65 Etienne Pallier
145 85 Jeremy Barneron
 * -Priority:-
146 85 Jeremy Barneron
-Une request est créée par un User qui appartient à un SP (Scientific Program).-
147 85 Jeremy Barneron
-La priorité de la Request est celle du SP.-
148 85 Jeremy Barneron
-Par contre, au sein de la Request, on pourra moduler la priorité de chaque séquence (cf /Sequence), afin de prioriser certaines sequences par rapport aux autres. Par défaut, cette variation de priorité sera nulle (0) pour chaque Sequence.-
149 85 Jeremy Barneron
-Par exemple, on pourra faire varier la priorité d’une Sequence de +ou- 5 par rapport à la priorité de la Request.-
150 69 Etienne Pallier
151 85 Jeremy Barneron
 * -Quota:-
152 85 Jeremy Barneron
-Les quotas sont attribués par le TAC (Time Allocation Committee) tous les 6 mois, pour chaque thème ou programme scientifique.-
153 85 Jeremy Barneron
-Le TAC attribue une lettre A (prioritaire), B (si il reste de la place), C (rejeté).-
154 85 Jeremy Barneron
-Au niveau du GFT, on traduit ces lettres en “grande priorité”, “priorité moyenne”, et “petite priorité” (le C n’est pas rejeté).-
155 85 Jeremy Barneron
-On estime alors le temps nécessaire pour le SP, et on le traduit en pourcentage.-
156 85 Jeremy Barneron
-On pourra donc attribuer un quota (en %) à chaque SP.-
157 85 Jeremy Barneron
-=> Le temps total de toutes les Requests (toutes leurs séquences) de tous les Users d’un même SP ne devra pas dépasser le quota du SP.-
158 69 Etienne Pallier
159 67 Jeremy Barneron
 * -Date: on doit pouvoir la donner sous 2 formes:-
160 65 Etienne Pallier
161 67 Jeremy Barneron
  * -“Tonight” => nuit en cours ou bien nuit qui arrive-
162 67 Jeremy Barneron
  * -Date précise JJ/MM/AAAA (maximum à now + 7 nuits)-
163 65 Etienne Pallier
164 65 Etienne Pallier
 * Execution strategies:
165 65 Etienne Pallier
166 67 Jeremy Barneron
  * -Request level:-
167 67 Jeremy Barneron
-(default) "Best effort, do as much sequences as you can"-
168 67 Jeremy Barneron
-=> option: "All or nothing": if ANY sequence fails, request fails-
169 65 Etienne Pallier
170 67 Jeremy Barneron
  * -Sequence level-
171 67 Jeremy Barneron
-(default) “Optional sequence”-
172 67 Jeremy Barneron
-=> option “Mandatory sequence”: if THIS sequence fails, request fails-
173 67 Jeremy Barneron
-(default) “This night only”-
174 67 Jeremy Barneron
-=> option, “Reportable à la nuit suivante” (jusqu’à 7 nuits maxi)-
175 65 Etienne Pallier
176 67 Jeremy Barneron
 * -Période de visibilité JD1-JD2:-
177 65 Etienne Pallier
178 68 Jeremy Barneron
  * -Donnée par le logiciel ETC/IS-
179 67 Jeremy Barneron
  * -c’est pour UNE NUIT (celle en cours, la prochaine, ou bien une date ultérieure pas trop loin pour que les users ne planifient pas trop en avance). Si la séquence n’a pas pu être exécutée pour cette nuit, il faut essayer de la -reprogrammer pour la nuit suivante (si le user a coché cette option) => il faudra donc recalculer le JD1-JD2 qui sera un peu différent pour chaque nuit, et ainsi de suite, jusqu’à ce qu’on arrive à une période de visibilité VIDE car- -le target n’est alors plus visible du tout-
180 67 Jeremy Barneron
  * -D’autre part, il peut y en avoir plusieurs dans la nuit, et il faudra que l’ETC/IS les donne TOUTES:-
181 65 Etienne Pallier
182 67 Jeremy Barneron
   * -2 pour un target naturel (par exemple, il se couche en début de nuit, et se lève en fin de nuit, donc 2 périodes)-
183 67 Jeremy Barneron
   * -Jusqu’à 12 pour l’ISS-
184 67 Jeremy Barneron
   * -=> prévoir donc N périodes (au moins 2)-
185 67 Jeremy Barneron
   * -=> obliger l’astronome à en CHOISIR une seule (s’il le souhaite, il pourra de toutes façons faire une autre séquence avec la 2ème période de visibilité…):-
186 65 Etienne Pallier
187 65 Etienne Pallier
188 64 Jeremy Barneron
* -Workflow du "démarrage du système" à documenter (tout se qui se déclenche quand on lance le logiciel pour la toute première fois...) : lancement du monitoring, qui à son tour lance un scheduling, …-
189 62 Etienne Pallier
190 64 Jeremy Barneron
* -public/ : faut-il garder ce dossier qui ne contient qu’un seul dossier static/ ? (ce dossier static/ est-il utile à qqch ?)-
191 62 Etienne Pallier
192 64 Jeremy Barneron
* -Démarrage: Ce n’est pas Monitoring mais Majordome qui doit lancer le 1er scheduling en début de nuit-
193 62 Etienne Pallier
194 64 Jeremy Barneron
* -Fin de nuit: Majordome fait un system.pause(), ensuite une task de calibration est lancée qui doit vérifier que tout est ok avant de faire START (dome fermé, Tele fermé, …)-
195 62 Etienne Pallier
196 64 Jeremy Barneron
* -Créer un mode DEV : jouer avec la variable DEBUG (ou autre ?) dans src/pyros/settings.py pour mettre à TRUE en mode DEV afin d’éviter d’avoir à commenter certaines lignes lors du lancement du workflow (sinon, c’est trop long)-
197 62 Etienne Pallier
198 64 Jeremy Barneron
* -User : faire une view pour le profil-
199 62 Etienne Pallier
200 64 Jeremy Barneron
* -RoutineManager : Faire un TEST import/export d’une requete-
201 62 Etienne Pallier
202 64 Jeremy Barneron
* -Roue à filtre : doit pouvoir être associée à Camera ou bien à Tele (c’est prévu dans la BD ou pas ?)-
203 62 Etienne Pallier
204 56 Jeremy Barneron
* -Observation_manager/Tasks : créer une classe mère héritant de Task, dont les classes filles (plan_vis et plan_ir) vont hériter-
205 3 Etienne Pallier
206 56 Jeremy Barneron
* -Architecture projet (organisation dossiers):-
207 39 Etienne Pallier
208 56 Jeremy Barneron
 * -src/ : laisser seulement les applications, et mettre tous les autres dossiers (fixtures/, images/, ...) dans un dossier MISC/)-
209 39 Etienne Pallier
210 44 Etienne Pallier
* RUN :
211 44 Etienne Pallier
212 56 Jeremy Barneron
 * -S'assurer que tous les prérequis sont présents et démarrés avant de lancer Pyros (sinon, générer un message d'erreur expliquant le problème):-
213 44 Etienne Pallier
 
214 56 Jeremy Barneron
  * -RabbitMQ-
215 56 Jeremy Barneron
  * -Mysql (sauf si on a choisi sqlite)-
216 44 Etienne Pallier
217 44 Etienne Pallier
218 44 Etienne Pallier
219 45 Etienne Pallier
* TESTS (intégration continue):
220 1 Paul Carensac
221 56 Jeremy Barneron
 * -Même remarque que pour le "RUN" ci-dessous concernant le check des prérequis-
222 56 Jeremy Barneron
 * -Inclure "trial comet" dans les tests pour s'assurer que Comet est bien installé (+ "rm -r _trial_temp/" ensuite pour faire le ménage après le test)-
223 56 Jeremy Barneron
 * -Mettre en place une exécution systématique des tests à chaque commit (unitaires + fonctionnels)-
224 56 Jeremy Barneron
-(pour faire plus simple, on peut imaginer que le serveur de test linux fasse un "git pull" toutes les 30mn, puis une exécution des tests, et l'envoi d'un email en cas de problème)-
225 36 Etienne Pallier
226 35 Etienne Pallier
227 35 Etienne Pallier
* Installation script:
228 35 Etienne Pallier
229 56 Jeremy Barneron
 * -Si l'environnement virtuel existe déjà, demander s'il doit être recréé (par défaut "Non")-
230 56 Jeremy Barneron
 * -(NEW) Renommer le script install_requirements.sh en install.sh-
231 56 Jeremy Barneron
 * -(NEW) Faciliter l'installation du logiciel complet avec CONDA, qui gère toutes les dépendances du logiciel, même les dépendances non Python (mysql, rabbitmq, ...), et c'est du multi-plateforme : (cf -https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions)-
232 35 Etienne Pallier
233 25 Etienne Pallier
* Pyros : 
234 1 Paul Carensac
235 56 Jeremy Barneron
 * -Doit pouvoir être démarré indifféremment AVANT (par défaut) les devices, ou APRES (actuellement, le AVANT est TODO)-
236 56 Jeremy Barneron
 * -De manière générale, doit être le plus possible "tolérant aux pannes"-
237 56 Jeremy Barneron
 * -Doit être le plus générique et donc paramétrable possible-
238 1 Paul Carensac
239 25 Etienne Pallier
240 23 Etienne Pallier
* Django : 
241 12 Etienne Pallier
242 56 Jeremy Barneron
 * -Upgrade to Django 1.10-
243 56 Jeremy Barneron
 * -Remplacer le serveur web de "dev" (manage runserver, sur port 8000) par un vrai serveur web pour la "prod" (Apache pour les fichiers statiques sur port 80 + serveur d'application Python pour le code Python, par exemple gunicorn)-
244 56 Jeremy Barneron
-(cf https://projects.irap.omp.eu/projects/pyros/wiki/Project_Development#Serveur-Web)-
245 23 Etienne Pallier
246 56 Jeremy Barneron
* -Comet installation : Include in the install_requirements.sh script (by using stable official version for Python 3 (when available) on Linux (and Mac) and Windows 10-
247 1 Paul Carensac
248 56 Jeremy Barneron
* -git : Create a "dev" branch (do not write anymore on the "master" branch)-
249 1 Paul Carensac
250 25 Etienne Pallier
* Simulators : 
251 1 Paul Carensac
252 61 Jeremy Barneron
 * -on doit se rendre compte qu'ils sont "vivants" (ils seront progressivement remplacés par les vrais devices, mais resteront toujours utilisables à leur place)-
253 25 Etienne Pallier
254 61 Jeremy Barneron
  * -Le Monitoring doit les interroger régulièrement sur leur statut (check_status, DONE)-
255 61 Jeremy Barneron
  * -Il doit stocker les statuts dans la BD (TODO)-
256 61 Jeremy Barneron
  * -Ces statuts doivent être affichés au fur et à mesure sur la page web du "device" correspondant (Devices, Site, Weather) (TODO)-
257 25 Etienne Pallier
258 61 Jeremy Barneron
 * -quels sont les devices bloquants et non bloquants ?-
259 25 Etienne Pallier
260 60 Jeremy Barneron
  * -Bloquants: si indisponibles (en panne ou pas démarrés), Pyros met en pause le sous-système d'observation-
261 60 Jeremy Barneron
-Seules 3 fonctions restent toujours actives: alertes, monitoring, et serveur web (pour les routines et la surveillance)-
262 25 Etienne Pallier
263 60 Jeremy Barneron
   * -Telescope-
264 60 Jeremy Barneron
   * -Camera VIS (???)-
265 60 Jeremy Barneron
   * -PLC (weather + observation conditions + site)-
266 25 Etienne Pallier
267 60 Jeremy Barneron
  * -Non bloquants: si indisponibles (en panne ou pas démarrés), Pyros se contente d'en prendre note, et continue son fonctionnement normal tout en restant dans l'attente de leur redémarrage pour les réintégrer-
268 25 Etienne Pallier
269 60 Jeremy Barneron
   * -Camera VIS (???)-
270 60 Jeremy Barneron
   * -Camera NIR-
271 25 Etienne Pallier
272 23 Etienne Pallier
273 56 Jeremy Barneron
* -Users: gérer les 3 profils (admin, expert, user)-
274 23 Etienne Pallier
275 50 Etienne Pallier
* Scheduler : 
276 52 Etienne Pallier
   
277 56 Jeremy Barneron
  * -Eviter que la vue du Scheduler s'affiche avec une erreur (IndexError) quand il n'y a aucun schedule dans la BD (http://127.0.0.1:8000/scheduler/) => idem pour toutes les autres vues de tous les modules-
278 56 Jeremy Barneron
  * -Affichage d'un schedule : pour chaque ligne (séquence), ajouter une colonne à gauche qui donne le nom (short name) de la Request dont la séquence fait partie (quand on clique sur ce nom, on va vers une vue de la Request qui sera- -soit une AlertRequest soit une RoutineRequest)-
279 56 Jeremy Barneron
  * -(non prioritaire, c'est juste un souhait) le rendre complètement autonome, indépendant du projet, afin qu'on puisse facilement le sortir du projet, et le proposer comme un composant générique utilisable dans n'importe quel autre- -logiciel ; il devra donc gérer ces communications avec les autres modules via des interfaces-
280 52 Etienne Pallier
281 50 Etienne Pallier
282 49 Etienne Pallier
283 14 Etienne Pallier
* Doc :
284 17 Etienne Pallier
285 14 Etienne Pallier
 * TEST:
286 14 Etienne Pallier
  
287 56 Jeremy Barneron
  * -Unit tests : test of each module-
288 56 Jeremy Barneron
  * -Functional tests (with Celery and simulators): complete workflow-
289 14 Etienne Pallier
290 14 Etienne Pallier
 * LAUNCH:
291 14 Etienne Pallier
292 56 Jeremy Barneron
  * -Start simulators-
293 56 Jeremy Barneron
  * -Start Celery-
294 56 Jeremy Barneron
  * -Start pyros-
295 14 Etienne Pallier
296 14 Etienne Pallier
 * USE:
297 14 Etienne Pallier
298 56 Jeremy Barneron
  * -Administration of the database: http://localhost:8000/admin-
299 56 Jeremy Barneron
  * -Interacting with Pyros: http://localhost:8000-
300 15 Etienne Pallier
  
301 56 Jeremy Barneron
   * -Watch the environment: Devices, Site, Weather-
302 56 Jeremy Barneron
   * -Watch the schedule: Schedule-
303 56 Jeremy Barneron
   * -Watch the data processing (workflow): System (Dashboard)-
304 56 Jeremy Barneron
   * -Submit a Routine Request (and get results): Routines-
305 56 Jeremy Barneron
   * -Watch alerts: Alerts-
306 56 Jeremy Barneron
   * -Simulate an Alert: Alerts (TODO: Un user "admin" doit pouvoir déclencher une alerte type depuis la page web Alerts)-
307 56 Jeremy Barneron
   * -Manual operations on the Telescope : Devices/Telescope (TODO)-
308 58 Jeremy Barneron
   * -Manage users : Users-
309 22 Etienne Pallier
310 14 Etienne Pallier
311 1 Paul Carensac
312 1 Paul Carensac
---
313 1 Paul Carensac
314 53 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}Applications tasks (notes Paul Carensac)%
315 2 Paul Carensac
316 2 Paul Carensac
h3. Dashboard
317 2 Paul Carensac
318 59 Jeremy Barneron
 * -Create the backoffice views as the modules are integrated in pyros-
319 59 Jeremy Barneron
 * -Think about a system of permissions-
320 2 Paul Carensac
321 2 Paul Carensac
h3. Scheduler
322 2 Paul Carensac
323 2 Paul Carensac
 * views
324 2 Paul Carensac
325 59 Jeremy Barneron
  * -Link the main page to the current schedule instead of the simulation page-
326 59 Jeremy Barneron
  * -Show user sequences in the schedules (with links)-
327 59 Jeremy Barneron
  * -Give accces to old schedules (day / days before / all end-night plannings / all plannings)-
328 59 Jeremy Barneron
  * -Give access to the refused sequences of a schedule, and the reasons of rejects-
329 2 Paul Carensac
330 2 Paul Carensac
 * scheduler
331 2 Paul Carensac
332 59 Jeremy Barneron
  * -Verification when there are not fields in the scheduler tables (index out of range)-
333 59 Jeremy Barneron
  * -Change the system to determine night start/end (they must be given in parameter, only if first_schedule is True)-
334 59 Jeremy Barneron
  * -Store the reasons of rejects (create a new attribute, in shs ?)-
335 59 Jeremy Barneron
  * -What is the 'flag' attribute ? (@AK)-
336 59 Jeremy Barneron
  * -Do not create the execute_sequence tasks if it's not the night (- 120 seconds)-
337 59 Jeremy Barneron
  * -Priority and quota computing-
338 59 Jeremy Barneron
  * -Quotas evolution-
339 59 Jeremy Barneron
  * -Blank space filling-
340 59 Jeremy Barneron
  * -At the end of a scheduling send, it to the IC ?-
341 2 Paul Carensac
342 2 Paul Carensac
h3. Alert Manager
343 2 Paul Carensac
344 2 Paul Carensac
 * Web :
345 2 Paul Carensac
346 59 Jeremy Barneron
  * -Print if there is an alert in progress in the main page-
347 59 Jeremy Barneron
  * -Link the alerts to their status and results-
348 2 Paul Carensac
349 59 Jeremy Barneron
 * -Connect to a real VOEvent broker-
350 2 Paul Carensac
351 59 Jeremy Barneron
 * -Determine the communication with FSC for strategy change-
352 2 Paul Carensac
353 2 Paul Carensac
 * VOEvents :
354 2 Paul Carensac
355 59 Jeremy Barneron
  * -Extract the good fields (see AK Q&A 07/01/2016)-
356 59 Jeremy Barneron
  * -Fill the request & alerts objects-
357 59 Jeremy Barneron
  * -Use strategies to build a request-
358 59 Jeremy Barneron
  * -Possibility to change the default strategy-
359 59 Jeremy Barneron
  * -Handle VOEvent updates-
360 59 Jeremy Barneron
  * -Be careful to not create 2 alerts for a same GRB, seen by 2 different satellites-
361 2 Paul Carensac
362 2 Paul Carensac
363 2 Paul Carensac
h3. Analyzer
364 2 Paul Carensac
365 59 Jeremy Barneron
 * -Apply the calibrations in the right function-
366 59 Jeremy Barneron
 * -Apply the analyses only if it's a GRB-
367 59 Jeremy Barneron
 * -Implement the analyses-
368 59 Jeremy Barneron
 * -Send analyses to FSC-
369 2 Paul Carensac
370 2 Paul Carensac
371 2 Paul Carensac
h3. Majordome
372 2 Paul Carensac
373 2 Paul Carensac
 * TaskManager
374 2 Paul Carensac
375 59 Jeremy Barneron
  * -When a sequence is cancelled, give back the quota to the user-
376 59 Jeremy Barneron
  * -In case of alert, do not stop the ongoing plan, and make the instruments abort-
377 2 Paul Carensac
378 2 Paul Carensac
 * execute_sequence
379 2 Paul Carensac
380 59 Jeremy Barneron
  * -Add the PLC checks at start (to see if we do the slew)-
381 59 Jeremy Barneron
  * -Use the global telescope (instead of creating one here)-
382 59 Jeremy Barneron
  * -Give first_schedule as false when a scheduling is launched-
383 59 Jeremy Barneron
  * -Remove the default countdown (1, for tests)-
384 2 Paul Carensac
385 2 Paul Carensac
 * system_pause
386 2 Paul Carensac
387 59 Jeremy Barneron
  * -Abort the instruments-
388 59 Jeremy Barneron
  * -Stop the execution tasks-
389 2 Paul Carensac
390 2 Paul Carensac
 * system_restart
391 2 Paul Carensac
392 59 Jeremy Barneron
  * -Start a scheduling-
393 2 Paul Carensac
394 2 Paul Carensac
 * change_obs_conditions
395 2 Paul Carensac
396 59 Jeremy Barneron
  * -Change sequences status (if  needed)-
397 59 Jeremy Barneron
  * -If some status changed, re-launch a scheduling-
398 2 Paul Carensac
399 2 Paul Carensac
h3. Monitoring
400 2 Paul Carensac
401 2 Paul Carensac
 * views
402 2 Paul Carensac
403 59 Jeremy Barneron
  * -Move the dashboard here-
404 59 Jeremy Barneron
  * -Print the instrument status-
405 59 Jeremy Barneron
  * -Print PLC informations (with the evolution)-
406 59 Jeremy Barneron
  * -In the dashboard screens, put scroll on each screen to see the old logs-
407 2 Paul Carensac
408 2 Paul Carensac
 * Monitoring task
409 2 Paul Carensac
 
410 59 Jeremy Barneron
  * -Uncomment the scheduling at the beginning-
411 59 Jeremy Barneron
  * -Implement night start/end computation-
412 59 Jeremy Barneron
  * -Initialize communication with the instruments-
413 59 Jeremy Barneron
  * -Configure intruments at start-
414 59 Jeremy Barneron
  * -Send software versions to the IC-
415 59 Jeremy Barneron
  * -Initialize connection with PLC-
416 59 Jeremy Barneron
  * -After the starting actions, loop to wait for the instruments configuration to be finished-
417 59 Jeremy Barneron
  * -Ask PLC for status-
418 59 Jeremy Barneron
  * -Ask filter wheel for status-
419 59 Jeremy Barneron
  * -Store the instruments & PLC status-
420 59 Jeremy Barneron
  * -Send all status to IC-
421 59 Jeremy Barneron
  * -Analyse PLC status (obs conditions, ...)-
422 59 Jeremy Barneron
  * -Create tasks of obs condition changes-
423 59 Jeremy Barneron
  * -At the beginning of the loop, ping the DISABLED devices. If they answer, change their status (TBD), and do their initialization (ex: If it's a camera, set its temperature to -150°)-
424 2 Paul Carensac
425 2 Paul Carensac
h3. Observation Manager
426 2 Paul Carensac
427 2 Paul Carensac
 * execute_plan :
428 2 Paul Carensac
429 59 Jeremy Barneron
  * -Uncomment the instruments_ready waiting function-
430 59 Jeremy Barneron
  * -Uncomment the observation_ending waiting function-
431 59 Jeremy Barneron
  * -Try to remove code duplication (plan_execution_vis & plan_execution_nir)-
432 59 Jeremy Barneron
  * -Determine what needs to be done at the end of an observation-
433 2 Paul Carensac
434 2 Paul Carensac
 * create_calibrations :
435 2 Paul Carensac
436 59 Jeremy Barneron
  * -Make the calibration images-
437 59 Jeremy Barneron
  * -Generate super images-
438 59 Jeremy Barneron
  * -Send them to the IC-
439 2 Paul Carensac
440 2 Paul Carensac
h3. Routine Manager
441 2 Paul Carensac
442 2 Paul Carensac
 * Web
443 2 Paul Carensac
444 59 Jeremy Barneron
  * -Put the goods fields (for coordinates etc)-
445 59 Jeremy Barneron
  * -Only propose the objects that matches the conditions (ex: scientific programs of the user only)-
446 59 Jeremy Barneron
  * -Do all the needed checks-
447 59 Jeremy Barneron
  * -Add automatic computation of JD1/JD2-
448 59 Jeremy Barneron
  * -Add checkbox for JD / GD-
449 59 Jeremy Barneron
  * -Add options : copy my sequence on x days, and authorise report-
450 59 Jeremy Barneron
  * -Add ETC-IS simulation-
451 59 Jeremy Barneron
  * -Add help for new users (and for it the first time an account come on the page)-
452 2 Paul Carensac
 
453 2 Paul Carensac
 * Do more checks at unserialization
454 2 Paul Carensac
455 2 Paul Carensac
 * views
456 2 Paul Carensac
457 59 Jeremy Barneron
  * -When saving, do more checks on coordinates, jd1/2 etc-
458 59 Jeremy Barneron
  * -Uncomment filter for alerts removing-
459 59 Jeremy Barneron
  * -When submitting, use the monitoring to determine sequences status-
460 59 Jeremy Barneron
  * -When submitting, modify the first_schedule to False, when scheduling-
461 59 Jeremy Barneron
  * -When unsubmitting, uncomment the check for EXED and EXING removing-
462 59 Jeremy Barneron
  * -When unsubmitting, uncomment the scheduling and change the first_schedule to False-
463 2 Paul Carensac
464 2 Paul Carensac
465 2 Paul Carensac
h3. User Manager
466 2 Paul Carensac
467 59 Jeremy Barneron
 * -Password recovery-
468 59 Jeremy Barneron
 * -Profile page-
469 59 Jeremy Barneron
 * -User validation by administrator / commission-
470 59 Jeremy Barneron
 * -Handle permissions and access-
471 2 Paul Carensac
472 2 Paul Carensac
h3. Common
473 2 Paul Carensac
474 59 Jeremy Barneron
 * -Change the 'first_schedule' to False at the end of RequestBuilder.validate()-
475 32 Paul Carensac
476 32 Paul Carensac
h3. Devices
477 32 Paul Carensac
478 59 Jeremy Barneron
 * -When a socket connection fails (exception thrown), set the device to DISABLED (or that kind of status) in the DB, and create a system_pause task (majordome)-