Commit 05bdcc44d371fe7727b75c7b57e331787abab77f
1 parent
cd0149f5
Exists in
dev
BIG DEMO tests (simulator and simulator_development) pass WITH celery and PARTIA…
…LLY WITHOUT (./pyros.py simulator) BON, LA FAUT VRAIMENT QUE J'ARRETE DE CODER, JE VAIS Y LAISSER MA PEAU... !!!!!!!!!!!!!!!! FAUT QUE JE PASSE A LA DOC !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Showing
20 changed files
with
1910 additions
and
318 deletions
Show diff stats
README.md
... | ... | @@ -62,11 +62,11 @@ PROJECT STRUCTURE: |
62 | 62 | -------------------------------------------------------------------------------------------- |
63 | 63 | LAST VERSION |
64 | 64 | |
65 | -Date: 23/03/2018 | |
65 | +Date: 27/03/2018 | |
66 | 66 | By: E. Pallier |
67 | -Version: 0.16.11 | |
68 | -- All unit tests now pass WITHOUT celery (./manage.py test or ./pyros.py test) : | |
69 | -it needed a bugfix on the json fixture !! (the pyrosuser quota was null : set it to 100) | |
67 | +Version: 0.16.12 | |
68 | +- BIG DEMO tests (simulator and simulator_development) pass WITH celery and PARTIALLY WITHOUT (./pyros.py simulator) | |
69 | +- All unit tests pass WITH or WITHOUT celery (./manage.py test or ./pyros.py test) | |
70 | 70 | - New global variable USE_CELERY (false by default) in pyros.settings |
71 | 71 | - README file in each module (with version 0.1.0) |
72 | 72 | - each agent (envmonitor, majordome, alert) can be started independently with a script (new script start_agent in each agent directory) | ... | ... |
pyros.py
... | ... | @@ -645,6 +645,15 @@ class Pyros(AManager): |
645 | 645 | def simulator_development(self): |
646 | 646 | self.simulator(False) |
647 | 647 | |
648 | + ''' | |
649 | + (EP) utile pour le debug avec phpmyadmin pour remettre à zéro la bd pyros_test | |
650 | + delete from plan; | |
651 | + delete from album; | |
652 | + delete from schedule_has_sequences; | |
653 | + delete from schedule; | |
654 | + delete from sequence; | |
655 | + delete from request; | |
656 | + ''' | |
648 | 657 | |
649 | 658 | # Simulation (by default, with ALL simulators and ALL celery workers) |
650 | 659 | def simulator(self, TOTAL=True): |
... | ... | @@ -660,6 +669,8 @@ class Pyros(AManager): |
660 | 669 | else : self.execProcess("rm -f testdb.sqlite3") |
661 | 670 | self.changeDirectory("..") |
662 | 671 | if TOTAL: self.reset_database_sim() |
672 | + # EP added: | |
673 | + if not TOTAL: self.reset_database_sim() | |
663 | 674 | |
664 | 675 | # Actualise l’état de la DB en accord avec l’ensemble des modèles et des migrations actuels |
665 | 676 | self.migrate() |
... | ... | @@ -727,6 +738,17 @@ class Pyros(AManager): |
727 | 738 | self.changeDirectory("..") |
728 | 739 | ''' |
729 | 740 | |
741 | + # | |
742 | + # 4) (if not USE_CELERY) Start Agents | |
743 | + # | |
744 | + # TODO: | |
745 | + if TOTAL and not USE_CELERY : | |
746 | + # Start Environment Monitoring Agent | |
747 | + # Start Majordome Agent | |
748 | + # Start Alert Manager Agent | |
749 | + self.start_agents() | |
750 | + self.sleep(3) | |
751 | + | |
730 | 752 | # When simulators are finished: |
731 | 753 | #self.kill_simulation() |
732 | 754 | return 0 | ... | ... |
simulators/user/userSimulator.py
... | ... | @@ -47,7 +47,7 @@ class UserSimulator(): |
47 | 47 | |
48 | 48 | def sendRequest(self, file_name: str): |
49 | 49 | files = {'request_file' : open(self.request_path + file_name, 'rb')} |
50 | - print("Post request", self.url, "with args", files) | |
50 | + #print("Post request", self.url, "with args", files) | |
51 | 51 | # ex: Post request http://localhost:8000/routine_manager/import_request with args {'request_file': <_io.BufferedReader name='../resources/routine_request_01.xml'>} |
52 | 52 | # This calls import_request() action from src/routine_manager/views.py |
53 | 53 | r = self.client.post(self.url, files=files) | ... | ... |
src/common/models.py
... | ... | @@ -554,6 +554,7 @@ class Sequence(models.Model): |
554 | 554 | |
555 | 555 | |
556 | 556 | class ScheduleHasSequences(models.Model): |
557 | + # (EP) TODO: C'est pas un pb d'utiliser 2 fois le meme nom "shs" pour 2 choses differentes ???!!! | |
557 | 558 | schedule = models.ForeignKey( |
558 | 559 | 'Schedule', on_delete=models.CASCADE, related_name="shs") |
559 | 560 | sequence = models.ForeignKey( | ... | ... |
src/majordome/tasks.py
... | ... | @@ -177,6 +177,8 @@ class Majordome(Task): |
177 | 177 | Function called by the main loop to handle the task event (check monitoring and alert_manager) |
178 | 178 | ''' |
179 | 179 | def handleTasks(self): |
180 | + if not settings.USE_CELERY: return 0 | |
181 | + | |
180 | 182 | self.timers["tasks"] = self.tasks_timer |
181 | 183 | if self.monitoring_task is None: |
182 | 184 | try: |
... | ... | @@ -306,7 +308,14 @@ class Majordome(Task): |
306 | 308 | def handleNightEndTimer(self): |
307 | 309 | self.timers["night_end"] = getNightEnd() |
308 | 310 | if (self.isValidStatus(self.status_tel)): |
309 | - observation_manager.tasks.night_calibrations.apply_async() | |
311 | + #observation_manager.tasks.night_calibrations.apply_async() | |
312 | + if settings.USE_CELERY: | |
313 | + print("MJ: call observation_manager WITH CELERY") | |
314 | + observation_manager.tasks.night_calibrations.apply_async() | |
315 | + else: | |
316 | + print("MJ: call observation_manager WITHOUT CELERY") | |
317 | + observation_manager.tasks.night_calibrations().run() | |
318 | + | |
310 | 319 | else: |
311 | 320 | self.notifyTelescopeStatus("night_end") |
312 | 321 | return (0) |
... | ... | @@ -320,7 +329,14 @@ class Majordome(Task): |
320 | 329 | self.dom.open() |
321 | 330 | self.vis_camera.open_shutter() |
322 | 331 | self.nir_camera.open_shutter() |
323 | - scheduler.tasks.scheduling.apply_async((False, False)) | |
332 | + #scheduler.tasks.scheduling.apply_async((False, False)) | |
333 | + if settings.USE_CELERY: | |
334 | + print("MJ: call schedule WITH CELERY") | |
335 | + scheduler.tasks.scheduling.apply_async((False, False)) | |
336 | + else: | |
337 | + print("MJ: call schedule WITHOUT CELERY") | |
338 | + scheduler.tasks.scheduling().run((False, False)) | |
339 | + | |
324 | 340 | return (0) |
325 | 341 | |
326 | 342 | def notifyTelescopeStatus(self, timer_name): |
... | ... | @@ -388,9 +404,22 @@ class Majordome(Task): |
388 | 404 | def reset(self, type): |
389 | 405 | if type == "WEATHER": |
390 | 406 | self.dom.open() |
391 | - scheduler.tasks.scheduling.delay((False, False)) | |
407 | + #scheduler.tasks.scheduling.delay((False, False)) | |
408 | + if settings.USE_CELERY: | |
409 | + print("MJ: call schedule WITH CELERY") | |
410 | + scheduler.tasks.scheduling.delay((False, False)) | |
411 | + else: | |
412 | + print("MJ: call schedule WITHOUT CELERY") | |
413 | + scheduler.tasks.scheduling().run((False, False)) | |
414 | + | |
392 | 415 | elif type == "INSIDE": |
393 | - scheduler.tasks.scheduling.delay((False, False)) | |
416 | + #scheduler.tasks.scheduling.delay((False, False)) | |
417 | + if settings.USE_CELERY: | |
418 | + print("MJ: call schedule WITH CELERY") | |
419 | + scheduler.tasks.scheduling.delay((False, False)) | |
420 | + else: | |
421 | + print("MJ: call schedule WITHOUT CELERY") | |
422 | + scheduler.tasks.scheduling().run((False, False)) | |
394 | 423 | |
395 | 424 | ''' |
396 | 425 | Handle a new alarm (called by isInsideOk or isWeatherOk) |
... | ... | @@ -485,8 +514,16 @@ class Majordome(Task): |
485 | 514 | if sequence.albums.filter(detector__name="Cagire").exists(): |
486 | 515 | if (self.isValidStatus(self.status_nir)): |
487 | 516 | for plan in sequence.albums.get(detector__name="Cagire").plans.all(): |
488 | - res = observation_manager.tasks.execute_plan_nir.apply_async( | |
489 | - (plan.id, float(self.getCountdown(shs)))) | |
517 | + #res = observation_manager.tasks.execute_plan_nir.apply_async((plan.id, float(self.getCountdown(shs)))) | |
518 | + if settings.USE_CELERY: | |
519 | + print("MJ: call observation_manager WITH CELERY") | |
520 | + res = observation_manager.tasks.execute_plan_nir.apply_async( | |
521 | + (plan.id, float(self.getCountdown(shs)))) | |
522 | + else: | |
523 | + print("MJ: call observation_manager WITHOUT CELERY") | |
524 | + res = observation_manager.tasks.execute_plan_nir().run( | |
525 | + (plan.id, float(self.getCountdown(shs)))) | |
526 | + | |
490 | 527 | # JB TODO : is it still usefull ? |
491 | 528 | # TaskId.objects.create(task_id=res.id, task="execute_plan") |
492 | 529 | plans_results.append(res) |
... | ... | @@ -500,8 +537,14 @@ class Majordome(Task): |
500 | 537 | if sequence.albums.filter(detector__name="Visible camera").exists(): |
501 | 538 | if (self.isValidStatus(self.status_vis)): |
502 | 539 | for plan in sequence.albums.get(detector__name="Visible camera").plans.all(): |
503 | - res = observation_manager.tasks.execute_plan_vis.apply_async( | |
504 | - (plan.id, float(self.getCountdown(shs)))) | |
540 | + #res = observation_manager.tasks.execute_plan_vis.apply_async((plan.id, float(self.getCountdown(shs)))) | |
541 | + if settings.USE_CELERY: | |
542 | + print("MJ: call observation_manager WITH CELERY") | |
543 | + res = observation_manager.tasks.execute_plan_vis.apply_async((plan.id, float(self.getCountdown(shs)))) | |
544 | + else: | |
545 | + print("MJ: call observation_manager WITHOUT CELERY") | |
546 | + res = observation_manager.tasks.execute_plan_vis().run((plan.id, float(self.getCountdown(shs)))) | |
547 | + | |
505 | 548 | plans_results.append(res) |
506 | 549 | else: |
507 | 550 | self.notifyDeviceStatus("Camera visible", "Sequence execution", self.status_vis) |
... | ... | @@ -583,7 +626,14 @@ class Majordome(Task): |
583 | 626 | def systemPause(self, duration, cause: str): |
584 | 627 | self.logDB("System in pause for " + str(duration)) |
585 | 628 | time.sleep(duration) |
586 | - scheduler.tasks.scheduling.apply_async(first_schedule=False, alert=False) | |
629 | + #scheduler.tasks.scheduling.apply_async(first_schedule=False, alert=False) | |
630 | + if settings.USE_CELERY: | |
631 | + print("MJ: call schedule WITH CELERY") | |
632 | + scheduler.tasks.scheduling.apply_async(first_schedule=False, alert=False) | |
633 | + else: | |
634 | + print("MJ: call schedule WITHOUT CELERY") | |
635 | + scheduler.tasks.scheduling().run(first_schedule=False, alert=False) | |
636 | + | |
587 | 637 | self.setTime() |
588 | 638 | print("system has been paused. Cause : " + cause) |
589 | 639 | return (0) | ... | ... |
... | ... | @@ -0,0 +1,497 @@ |
1 | +[ | |
2 | +{ | |
3 | + "model": "common.country", | |
4 | + "pk": 1, | |
5 | + "fields": { | |
6 | + "name": "France", | |
7 | + "desc": "", | |
8 | + "quota": null | |
9 | + } | |
10 | +}, | |
11 | +{ | |
12 | + "model": "common.detector", | |
13 | + "pk": 1, | |
14 | + "fields": { | |
15 | + "telescope": 1, | |
16 | + "status": "", | |
17 | + "nb_photo_x": null, | |
18 | + "nb_photo_y": null, | |
19 | + "photo_size_x": null, | |
20 | + "photo_size_y": null, | |
21 | + "has_shutter": false, | |
22 | + "equivalent_foc_len": "", | |
23 | + "acq_start": null, | |
24 | + "acq_stop": null, | |
25 | + "check_temp": null, | |
26 | + "gain": null, | |
27 | + "readout_noise": null, | |
28 | + "readout_time": null, | |
29 | + "idcam_readout_mode": null, | |
30 | + "name": "Cagire", | |
31 | + "desc": "", | |
32 | + "created": "2016-05-13 11:49:49", | |
33 | + "updated": "2016-05-13 11:49:49", | |
34 | + "is_online": false, | |
35 | + "maintenance_date": null | |
36 | + } | |
37 | +}, | |
38 | +{ | |
39 | + "model": "common.detector", | |
40 | + "pk": 2, | |
41 | + "fields": { | |
42 | + "telescope": 1, | |
43 | + "nb_photo_x": null, | |
44 | + "nb_photo_y": null, | |
45 | + "photo_size_x": null, | |
46 | + "photo_size_y": null, | |
47 | + "has_shutter": false, | |
48 | + "equivalent_foc_len": "", | |
49 | + "acq_start": null, | |
50 | + "acq_stop": null, | |
51 | + "check_temp": null, | |
52 | + "gain": null, | |
53 | + "readout_noise": null, | |
54 | + "readout_time": null, | |
55 | + "idcam_readout_mode": null, | |
56 | + "name": "Visible camera", | |
57 | + "desc": "", | |
58 | + "created": "2016-05-13 11:50:17", | |
59 | + "updated": "2016-05-13 11:50:17", | |
60 | + "is_online": false, | |
61 | + "status": "", | |
62 | + "maintenance_date": null | |
63 | + } | |
64 | +}, | |
65 | +{ | |
66 | + "model": "common.plc", | |
67 | + "pk": 1, | |
68 | + "fields": { | |
69 | + "last_update_status": null, | |
70 | + "name": "Plc", | |
71 | + "desc": "", | |
72 | + "created": "2016-05-13 11:50:14", | |
73 | + "updated": "2016-05-13 11:50:14", | |
74 | + "is_online": false, | |
75 | + "maintenance_date": null | |
76 | + } | |
77 | +}, | |
78 | +{ | |
79 | + "model": "common.filter", | |
80 | + "pk": 1, | |
81 | + "fields": { | |
82 | + "filter_wheel": 2, | |
83 | + "category": "", | |
84 | + "transmission_curve_doc": "", | |
85 | + "name": "First infrared filter", | |
86 | + "desc": "", | |
87 | + "created": "2016-05-13 11:49:56", | |
88 | + "updated": "2016-05-13 11:49:56", | |
89 | + "is_online": false, | |
90 | + "status": "", | |
91 | + "maintenance_date": null | |
92 | + } | |
93 | +}, | |
94 | +{ | |
95 | + "model": "common.filter", | |
96 | + "pk": 2, | |
97 | + "fields": { | |
98 | + "filter_wheel": 2, | |
99 | + "category": "", | |
100 | + "transmission_curve_doc": "", | |
101 | + "name": "Second infrared filter", | |
102 | + "desc": "", | |
103 | + "created": "2016-05-13 11:50:07", | |
104 | + "updated": "2016-05-13 11:50:07", | |
105 | + "is_online": false, | |
106 | + "status": "", | |
107 | + "maintenance_date": null | |
108 | + } | |
109 | +}, | |
110 | +{ | |
111 | + "model": "common.filter", | |
112 | + "pk": 3, | |
113 | + "fields": { | |
114 | + "filter_wheel": 2, | |
115 | + "category": "", | |
116 | + "transmission_curve_doc": "", | |
117 | + "name": "First visible filter", | |
118 | + "desc": "", | |
119 | + "created": "2016-05-13 11:50:02", | |
120 | + "updated": "2016-05-13 11:50:02", | |
121 | + "is_online": false, | |
122 | + "status": "", | |
123 | + "maintenance_date": null | |
124 | + } | |
125 | +}, | |
126 | +{ | |
127 | + "model": "common.filter", | |
128 | + "pk": 4, | |
129 | + "fields": { | |
130 | + "filter_wheel": 2, | |
131 | + "category": "", | |
132 | + "transmission_curve_doc": "", | |
133 | + "name": "Second visible filter", | |
134 | + "desc": "", | |
135 | + "created": "2016-05-13 11:50:11", | |
136 | + "updated": "2016-05-13 11:50:11", | |
137 | + "is_online": false, | |
138 | + "status": "", | |
139 | + "maintenance_date": null | |
140 | + } | |
141 | +}, | |
142 | +{ | |
143 | + "model": "common.filterwheel", | |
144 | + "pk": 1, | |
145 | + "fields": { | |
146 | + "detector": 1, | |
147 | + "name": "Cagire FW", | |
148 | + "desc": "", | |
149 | + "created": "2016-06-28 13:28:28", | |
150 | + "updated": "2016-06-28 13:28:28", | |
151 | + "is_online": false, | |
152 | + "status": "", | |
153 | + "maintenance_date": null | |
154 | + } | |
155 | +}, | |
156 | +{ | |
157 | + "model": "common.filterwheel", | |
158 | + "pk": 2, | |
159 | + "fields": { | |
160 | + "detector": 2, | |
161 | + "name": "Visible Camera FW", | |
162 | + "desc": "", | |
163 | + "created": "2016-06-28 13:28:46", | |
164 | + "updated": "2016-06-28 13:28:46", | |
165 | + "is_online": false, | |
166 | + "status": "", | |
167 | + "maintenance_date": null | |
168 | + } | |
169 | +}, | |
170 | +{ | |
171 | + "model": "common.scientificprogram", | |
172 | + "pk": 1, | |
173 | + "fields": { | |
174 | + "name": "GRB", | |
175 | + "desc": "", | |
176 | + "quota": 9999.0, | |
177 | + "priority": 0, | |
178 | + "pyros_users": [ | |
179 | + 5 | |
180 | + ] | |
181 | + } | |
182 | +}, | |
183 | +{ | |
184 | + "model": "common.strategyobs", | |
185 | + "pk": 1, | |
186 | + "fields": { | |
187 | + "name": "strat1", | |
188 | + "desc": "", | |
189 | + "xml_file": "strat1.xml", | |
190 | + "is_default": false | |
191 | + } | |
192 | +}, | |
193 | +{ | |
194 | + "model": "common.strategyobs", | |
195 | + "pk": 2, | |
196 | + "fields": { | |
197 | + "name": "strat2", | |
198 | + "desc": "", | |
199 | + "xml_file": "strat2.xml", | |
200 | + "is_default": false | |
201 | + } | |
202 | +}, | |
203 | +{ | |
204 | + "model": "common.strategyobs", | |
205 | + "pk": 3, | |
206 | + "fields": { | |
207 | + "name": "strat_unittest", | |
208 | + "desc": "", | |
209 | + "xml_file": "strat_unittest.xml", | |
210 | + "is_default": true | |
211 | + } | |
212 | +}, | |
213 | +{ | |
214 | + "model": "common.telescope", | |
215 | + "pk": 1, | |
216 | + "fields": { | |
217 | + "mount_type": "", | |
218 | + "diameter": null, | |
219 | + "status": "", | |
220 | + "latitude": null, | |
221 | + "longitude": null, | |
222 | + "sens": "", | |
223 | + "altitude": null, | |
224 | + "readout_time": null, | |
225 | + "slew_time": null, | |
226 | + "slew_dead": null, | |
227 | + "slew_rate_max": null, | |
228 | + "horizon_type": "", | |
229 | + "horizon_def": null, | |
230 | + "lim_dec_max": null, | |
231 | + "lim_dec_min": null, | |
232 | + "lim_ha_rise": null, | |
233 | + "lim_ha_set": null, | |
234 | + "address": "", | |
235 | + "night_elev_sun": null, | |
236 | + "mpc_code": "", | |
237 | + "name": "Telescope", | |
238 | + "desc": "", | |
239 | + "created": "2016-05-13 11:50:14", | |
240 | + "updated": "2016-05-13 11:50:14", | |
241 | + "is_online": false, | |
242 | + "maintenance_date": null | |
243 | + } | |
244 | +}, | |
245 | +{ | |
246 | + "model": "common.dome", | |
247 | + "pk": 1, | |
248 | + "fields": { | |
249 | + "name": "Dome", | |
250 | + "desc": "dome", | |
251 | + "created": "2016-05-13 11:50:14", | |
252 | + "updated": "2016-05-13 11:50:14", | |
253 | + "is_online": false, | |
254 | + "status": "", | |
255 | + "maintenance_date": null, | |
256 | + "open": false | |
257 | + } | |
258 | +}, | |
259 | +{ | |
260 | + "model": "common.userlevel", | |
261 | + "pk": 1, | |
262 | + "fields": { | |
263 | + "name": "Developer", | |
264 | + "desc": "", | |
265 | + "priority": 0, | |
266 | + "quota": 9999.0 | |
267 | + } | |
268 | +}, | |
269 | +{ | |
270 | + "model": "common.version", | |
271 | + "pk": 1, | |
272 | + "fields": { | |
273 | + "module_name": "Scheduler", | |
274 | + "version": "0.1", | |
275 | + "created": "2016-06-23 14:04:48", | |
276 | + "updated": "2016-06-23 14:04:48" | |
277 | + } | |
278 | +}, | |
279 | +{ | |
280 | + "model": "common.version", | |
281 | + "pk": 2, | |
282 | + "fields": { | |
283 | + "module_name": "Dashboard", | |
284 | + "version": "0.1", | |
285 | + "created": "2016-06-23 14:04:48", | |
286 | + "updated": "2016-06-23 14:04:48" | |
287 | + } | |
288 | +}, | |
289 | +{ | |
290 | + "model": "common.version", | |
291 | + "pk": 3, | |
292 | + "fields": { | |
293 | + "module_name": "Observation Manager", | |
294 | + "version": "0.1", | |
295 | + "created": "2016-06-23 14:04:48", | |
296 | + "updated": "2016-06-23 14:04:48" | |
297 | + } | |
298 | +}, | |
299 | +{ | |
300 | + "model": "common.version", | |
301 | + "pk": 4, | |
302 | + "fields": { | |
303 | + "module_name": "Routine Manager", | |
304 | + "version": "0.1", | |
305 | + "created": "2016-06-23 14:04:48", | |
306 | + "updated": "2016-06-23 14:04:48" | |
307 | + } | |
308 | +}, | |
309 | +{ | |
310 | + "model": "common.version", | |
311 | + "pk": 5, | |
312 | + "fields": { | |
313 | + "module_name": "Alert Manager", | |
314 | + "version": "0.1", | |
315 | + "created": "2016-06-23 14:04:48", | |
316 | + "updated": "2016-06-23 14:04:48" | |
317 | + } | |
318 | +}, | |
319 | +{ | |
320 | + "model": "common.version", | |
321 | + "pk": 6, | |
322 | + "fields": { | |
323 | + "module_name": "Monitoring", | |
324 | + "version": "0.1", | |
325 | + "created": "2016-06-23 14:04:48", | |
326 | + "updated": "2016-06-23 14:04:48" | |
327 | + } | |
328 | +}, | |
329 | +{ | |
330 | + "model": "common.version", | |
331 | + "pk": 7, | |
332 | + "fields": { | |
333 | + "module_name": "User Manager", | |
334 | + "version": "0.1", | |
335 | + "created": "2016-06-23 14:04:48", | |
336 | + "updated": "2016-06-23 14:04:48" | |
337 | + } | |
338 | +}, | |
339 | +{ | |
340 | + "model": "common.version", | |
341 | + "pk": 8, | |
342 | + "fields": { | |
343 | + "module_name": "Analyzer", | |
344 | + "version": "0.1", | |
345 | + "created": "2016-06-23 14:04:48", | |
346 | + "updated": "2016-06-23 14:04:48" | |
347 | + } | |
348 | +}, | |
349 | +{ | |
350 | + "model": "common.version", | |
351 | + "pk": 9, | |
352 | + "fields": { | |
353 | + "module_name": "Majordome", | |
354 | + "version": "0.1", | |
355 | + "created": "2016-06-23 14:04:48", | |
356 | + "updated": "2016-06-23 14:04:48" | |
357 | + } | |
358 | +}, | |
359 | +{ | |
360 | + "model": "common.version", | |
361 | + "pk": 10, | |
362 | + "fields": { | |
363 | + "module_name": "Majordome", | |
364 | + "version": "0.2", | |
365 | + "created": "2016-06-28 10:50:32", | |
366 | + "updated": "2016-06-28 10:50:32" | |
367 | + } | |
368 | +}, | |
369 | +{ | |
370 | + "model": "common.version", | |
371 | + "pk": 11, | |
372 | + "fields": { | |
373 | + "module_name": "Majordome", | |
374 | + "version": "0.1.4", | |
375 | + "created": "2016-07-20 13:44:29", | |
376 | + "updated": "2016-07-20 13:44:29" | |
377 | + } | |
378 | +}, | |
379 | +{ | |
380 | + "model": "common.version", | |
381 | + "pk": 12, | |
382 | + "fields": { | |
383 | + "module_name": "Alert Manager", | |
384 | + "version": "0.2.3", | |
385 | + "created": "2016-07-20 13:44:29", | |
386 | + "updated": "2016-07-20 13:44:29" | |
387 | + } | |
388 | +}, | |
389 | +{ | |
390 | + "model": "common.version", | |
391 | + "pk": 13, | |
392 | + "fields": { | |
393 | + "module_name": "Dashboard", | |
394 | + "version": "0.1.1", | |
395 | + "created": "2016-07-20 13:44:29", | |
396 | + "updated": "2016-07-20 13:44:29" | |
397 | + } | |
398 | +}, | |
399 | +{ | |
400 | + "model": "common.version", | |
401 | + "pk": 14, | |
402 | + "fields": { | |
403 | + "module_name": "Observation Manager", | |
404 | + "version": "0.1.3", | |
405 | + "created": "2016-07-20 13:44:29", | |
406 | + "updated": "2016-07-20 13:44:29" | |
407 | + } | |
408 | +}, | |
409 | +{ | |
410 | + "model": "common.version", | |
411 | + "pk": 15, | |
412 | + "fields": { | |
413 | + "module_name": "Routine Manager", | |
414 | + "version": "0.1.2", | |
415 | + "created": "2016-07-20 13:44:29", | |
416 | + "updated": "2016-07-20 13:44:29" | |
417 | + } | |
418 | +}, | |
419 | +{ | |
420 | + "model": "common.version", | |
421 | + "pk": 16, | |
422 | + "fields": { | |
423 | + "module_name": "Monitoring", | |
424 | + "version": "0.1.3", | |
425 | + "created": "2016-07-20 13:44:29", | |
426 | + "updated": "2016-07-20 13:44:29" | |
427 | + } | |
428 | +}, | |
429 | +{ | |
430 | + "model": "common.version", | |
431 | + "pk": 17, | |
432 | + "fields": { | |
433 | + "module_name": "Scheduler", | |
434 | + "version": "0.1.2", | |
435 | + "created": "2016-07-20 13:44:29", | |
436 | + "updated": "2016-07-20 13:44:29" | |
437 | + } | |
438 | +}, | |
439 | +{ | |
440 | + "model": "common.version", | |
441 | + "pk": 18, | |
442 | + "fields": { | |
443 | + "module_name": "User Manager", | |
444 | + "version": "0.1.1", | |
445 | + "created": "2016-07-20 13:44:29", | |
446 | + "updated": "2016-07-20 13:44:29" | |
447 | + } | |
448 | +}, | |
449 | +{ | |
450 | + "model": "common.version", | |
451 | + "pk": 19, | |
452 | + "fields": { | |
453 | + "module_name": "Analyzer", | |
454 | + "version": "0.1.2", | |
455 | + "created": "2016-07-20 13:44:29", | |
456 | + "updated": "2016-07-20 13:44:29" | |
457 | + } | |
458 | +}, | |
459 | +{ | |
460 | + "model": "common.pyrosuser", | |
461 | + "pk": 5, | |
462 | + "fields": { | |
463 | + "password": "pbkdf2_sha256$24000$HRial3QUfrlz$bVuEzQaXthOd9GZVXd2449LDEF8EMQure69nA/Hu7qQ=", | |
464 | + "last_login": "2016-08-10 15:16:42.327", | |
465 | + "is_superuser": true, | |
466 | + "username": "pyros", | |
467 | + "first_name": "", | |
468 | + "last_name": "", | |
469 | + "email": "admin@example.com", | |
470 | + "is_staff": true, | |
471 | + "is_active": true, | |
472 | + "date_joined": "2016-08-10 15:15:58.481", | |
473 | + "groups": [], | |
474 | + "user_permissions": [], | |
475 | + "country": 1, | |
476 | + "user_level": 1, | |
477 | + "desc": "", | |
478 | + "created": "2016-08-11 07:54:05.627", | |
479 | + "updated": "2016-08-11 07:54:05.627", | |
480 | + "tel": "", | |
481 | + "address": "", | |
482 | + "laboratory": "IRAP", | |
483 | + "last_connect": null, | |
484 | + "cur_connect": null, | |
485 | + "putvalid_beg": null, | |
486 | + "putvalid_end": null, | |
487 | + "acqvalid_beg": "", | |
488 | + "acqvalid_end": "", | |
489 | + "quota": 1000.0, | |
490 | + "quota_rea": null, | |
491 | + "u_priority": 1, | |
492 | + "p_priority": 1, | |
493 | + "dir_level": null, | |
494 | + "can_del_void_req": false | |
495 | + } | |
496 | +} | |
497 | +] | ... | ... |
... | ... | @@ -0,0 +1,311 @@ |
1 | +[ | |
2 | +{ | |
3 | + "model": "common.country", | |
4 | + "pk": 1, | |
5 | + "fields": { | |
6 | + "name": "France", | |
7 | + "desc": "", | |
8 | + "quota": null | |
9 | + } | |
10 | +}, | |
11 | +{ | |
12 | + "model": "common.detector", | |
13 | + "pk": 1, | |
14 | + "fields": { | |
15 | + "telescope": 1, | |
16 | + "nb_photo_x": null, | |
17 | + "nb_photo_y": null, | |
18 | + "photo_size_x": null, | |
19 | + "photo_size_y": null, | |
20 | + "has_shutter": false, | |
21 | + "equivalent_foc_len": "", | |
22 | + "acq_start": null, | |
23 | + "acq_stop": null, | |
24 | + "check_temp": null, | |
25 | + "gain": null, | |
26 | + "readout_noise": null, | |
27 | + "readout_time": null, | |
28 | + "idcam_readout_mode": null, | |
29 | + "name": "Cagire", | |
30 | + "desc": "", | |
31 | + "created": "2016-05-13 11:49:49.663", | |
32 | + "updated": "2016-05-13 11:49:49.664", | |
33 | + "is_online": false, | |
34 | + "status": "", | |
35 | + "maintenance_date": null | |
36 | + } | |
37 | +}, | |
38 | +{ | |
39 | + "model": "common.detector", | |
40 | + "pk": 2, | |
41 | + "fields": { | |
42 | + "telescope": 1, | |
43 | + "nb_photo_x": null, | |
44 | + "nb_photo_y": null, | |
45 | + "photo_size_x": null, | |
46 | + "photo_size_y": null, | |
47 | + "has_shutter": false, | |
48 | + "equivalent_foc_len": "", | |
49 | + "acq_start": null, | |
50 | + "acq_stop": null, | |
51 | + "check_temp": null, | |
52 | + "gain": null, | |
53 | + "readout_noise": null, | |
54 | + "readout_time": null, | |
55 | + "idcam_readout_mode": null, | |
56 | + "name": "Visible camera", | |
57 | + "desc": "", | |
58 | + "created": "2016-05-13 11:50:17.644", | |
59 | + "updated": "2016-05-13 11:50:17.644", | |
60 | + "is_online": false, | |
61 | + "status": "", | |
62 | + "maintenance_date": null | |
63 | + } | |
64 | +}, | |
65 | +{ | |
66 | + "model": "common.filterwheel", | |
67 | + "pk": 1, | |
68 | + "fields": { | |
69 | + "detector": 1, | |
70 | + "name": "Cagire FW", | |
71 | + "desc": "", | |
72 | + "created": "2016-06-28 13:28:28.298", | |
73 | + "updated": "2016-06-28 13:28:28.298", | |
74 | + "is_online": false, | |
75 | + "status": "", | |
76 | + "maintenance_date": null | |
77 | + } | |
78 | +}, | |
79 | +{ | |
80 | + "model": "common.filterwheel", | |
81 | + "pk": 2, | |
82 | + "fields": { | |
83 | + "detector": 2, | |
84 | + "name": "Visible Camera FW", | |
85 | + "desc": "", | |
86 | + "created": "2016-06-28 13:28:46.887", | |
87 | + "updated": "2016-06-28 13:28:46.887", | |
88 | + "is_online": false, | |
89 | + "status": "", | |
90 | + "maintenance_date": null | |
91 | + } | |
92 | +}, | |
93 | +{ | |
94 | + "model": "common.filter", | |
95 | + "pk": 1, | |
96 | + "fields": { | |
97 | + "filter_wheel": 1, | |
98 | + "category": "", | |
99 | + "transmission_curve_doc": "", | |
100 | + "name": "First infrared filter", | |
101 | + "desc": "", | |
102 | + "created": "2016-05-13 11:49:56.579", | |
103 | + "updated": "2016-05-13 11:49:56.579", | |
104 | + "is_online": false, | |
105 | + "status": "", | |
106 | + "maintenance_date": null | |
107 | + } | |
108 | +}, | |
109 | +{ | |
110 | + "model": "common.filter", | |
111 | + "pk": 2, | |
112 | + "fields": { | |
113 | + "filter_wheel": 1, | |
114 | + "category": "", | |
115 | + "transmission_curve_doc": "", | |
116 | + "name": "Second infrared filter", | |
117 | + "desc": "", | |
118 | + "created": "2016-05-13 11:50:07.592", | |
119 | + "updated": "2016-05-13 11:50:07.592", | |
120 | + "is_online": false, | |
121 | + "status": "", | |
122 | + "maintenance_date": null | |
123 | + } | |
124 | +}, | |
125 | +{ | |
126 | + "model": "common.filter", | |
127 | + "pk": 3, | |
128 | + "fields": { | |
129 | + "filter_wheel": 2, | |
130 | + "category": "", | |
131 | + "transmission_curve_doc": "", | |
132 | + "name": "First visible filter", | |
133 | + "desc": "", | |
134 | + "created": "2016-05-13 11:50:02.012", | |
135 | + "updated": "2016-05-13 11:50:02.013", | |
136 | + "is_online": false, | |
137 | + "status": "", | |
138 | + "maintenance_date": null | |
139 | + } | |
140 | +}, | |
141 | +{ | |
142 | + "model": "common.filter", | |
143 | + "pk": 4, | |
144 | + "fields": { | |
145 | + "filter_wheel": 2, | |
146 | + "category": "", | |
147 | + "transmission_curve_doc": "", | |
148 | + "name": "Second visible filter", | |
149 | + "desc": "", | |
150 | + "created": "2016-05-13 11:50:11.226", | |
151 | + "updated": "2016-05-13 11:50:11.226", | |
152 | + "is_online": false, | |
153 | + "status": "", | |
154 | + "maintenance_date": null | |
155 | + } | |
156 | +}, | |
157 | +{ | |
158 | + "model": "common.scientificprogram", | |
159 | + "pk": 1, | |
160 | + "fields": { | |
161 | + "name": "GRB", | |
162 | + "desc": "", | |
163 | + "quota": 9999.0, | |
164 | + "priority": 0, | |
165 | + "pyros_users": [ | |
166 | + 1 | |
167 | + ] | |
168 | + } | |
169 | +}, | |
170 | +{ | |
171 | + "model": "common.strategyobs", | |
172 | + "pk": 1, | |
173 | + "fields": { | |
174 | + "name": "strat1", | |
175 | + "desc": "", | |
176 | + "xml_file": "strat1.xml" | |
177 | + } | |
178 | +}, | |
179 | +{ | |
180 | + "model": "common.strategyobs", | |
181 | + "pk": 2, | |
182 | + "fields": { | |
183 | + "name": "strat2", | |
184 | + "desc": "", | |
185 | + "xml_file": "strat2.xml" | |
186 | + } | |
187 | +}, | |
188 | +{ | |
189 | + "model": "common.telescope", | |
190 | + "pk": 1, | |
191 | + "fields": { | |
192 | + "mount_type": "", | |
193 | + "diameter": null, | |
194 | + "status": "", | |
195 | + "latitude": null, | |
196 | + "longitude": null, | |
197 | + "sens": "", | |
198 | + "altitude": null, | |
199 | + "readout_time": null, | |
200 | + "slew_time": null, | |
201 | + "slew_dead": null, | |
202 | + "slew_rate_max": null, | |
203 | + "horizon_type": "", | |
204 | + "horizon_def": null, | |
205 | + "lim_dec_max": null, | |
206 | + "lim_dec_min": null, | |
207 | + "lim_ha_rise": null, | |
208 | + "lim_ha_set": null, | |
209 | + "address": "", | |
210 | + "night_elev_sun": null, | |
211 | + "mpc_code": "", | |
212 | + "name": "Telescope", | |
213 | + "desc": "", | |
214 | + "created": "2016-05-13 11:50:14.326", | |
215 | + "updated": "2016-05-13 11:50:14.326", | |
216 | + "is_online": false, | |
217 | + "maintenance_date": null | |
218 | + } | |
219 | +}, | |
220 | +{ | |
221 | + "model": "common.userlevel", | |
222 | + "pk": 1, | |
223 | + "fields": { | |
224 | + "name": "Developer", | |
225 | + "desc": "", | |
226 | + "priority": 0, | |
227 | + "quota": 9999.0 | |
228 | + } | |
229 | +}, | |
230 | +{ | |
231 | + "model": "common.pyrosuser", | |
232 | + "pk": 3, | |
233 | + "fields": { | |
234 | + "country": 1, | |
235 | + "user_level": 1, | |
236 | + "desc": null, | |
237 | + "created": "2016-06-21 13:07:19.911", | |
238 | + "updated": "2016-06-21 13:07:19.911", | |
239 | + "tel": "test", | |
240 | + "address": "test", | |
241 | + "laboratory": "test", | |
242 | + "last_connect": null, | |
243 | + "cur_connect": null, | |
244 | + "putvalid_beg": null, | |
245 | + "putvalid_end": null, | |
246 | + "acqvalid_beg": null, | |
247 | + "acqvalid_end": null, | |
248 | + "quota": 100, | |
249 | + "quota_rea": null, | |
250 | + "u_priority": null, | |
251 | + "p_priority": null, | |
252 | + "dir_level": null, | |
253 | + "can_del_void_req": false, | |
254 | + "password": "pbkdf2_sha256$24000$bKJO902RCk0w$zxUz9uiSYG85ymuvl5rNLLqT/LZwrLwpVj5WfwwSyKE=", | |
255 | + "last_login": "2016-06-21 13:07:34.383", | |
256 | + "is_superuser": false, | |
257 | + "username": "test@test.test", | |
258 | + "first_name": "test", | |
259 | + "last_name": "test", | |
260 | + "email": "test@test.test", | |
261 | + "is_staff": false, | |
262 | + "is_active": true, | |
263 | + "date_joined": "2016-06-21 13:07:19.609", | |
264 | + "groups": [], | |
265 | + "user_permissions": [] | |
266 | + } | |
267 | +}, | |
268 | + | |
269 | +{ | |
270 | + "model": "common.alert", | |
271 | + "pk": 8, | |
272 | + "fields": { | |
273 | + "request": 65, | |
274 | + "strategyobs": 1, | |
275 | + "voevent_file": null, | |
276 | + "author": null, | |
277 | + "burst_jd": null, | |
278 | + "burst_ra": null, | |
279 | + "burst_dec": null, | |
280 | + "astro_coord_system": null, | |
281 | + "jd_send": null, | |
282 | + "jd_received": null, | |
283 | + "trig_id": 5, | |
284 | + "error_radius": null, | |
285 | + "defly_not_grb": false, | |
286 | + "editor": null | |
287 | + } | |
288 | +}, | |
289 | + | |
290 | + | |
291 | +{ | |
292 | + "model": "common.request", | |
293 | + "pk": 65, | |
294 | + "fields": { | |
295 | + "pyros_user": 3, | |
296 | + "scientific_program": 1, | |
297 | + "name": "Simulation_request", | |
298 | + "desc": null, | |
299 | + "created": "2016-06-21 12:51:24.293", | |
300 | + "updated": "2016-06-21 12:51:24.293", | |
301 | + "is_alert": true, | |
302 | + "target_type": null, | |
303 | + "status": null, | |
304 | + "autodeposit": false, | |
305 | + "checkpoint": null, | |
306 | + "flag": null, | |
307 | + "complete": true, | |
308 | + "submitted": true | |
309 | + } | |
310 | +} | |
311 | +] | ... | ... |
... | ... | @@ -0,0 +1,268 @@ |
1 | +[ | |
2 | +{ | |
3 | + "model": "common.country", | |
4 | + "pk": 1, | |
5 | + "fields": { | |
6 | + "name": "France", | |
7 | + "desc": "", | |
8 | + "quota": null | |
9 | + } | |
10 | +}, | |
11 | +{ | |
12 | + "model": "common.detector", | |
13 | + "pk": 1, | |
14 | + "fields": { | |
15 | + "telescope": 1, | |
16 | + "status": "", | |
17 | + "nb_photo_x": null, | |
18 | + "nb_photo_y": null, | |
19 | + "photo_size_x": null, | |
20 | + "photo_size_y": null, | |
21 | + "has_shutter": false, | |
22 | + "equivalent_foc_len": "", | |
23 | + "acq_start": null, | |
24 | + "acq_stop": null, | |
25 | + "check_temp": null, | |
26 | + "gain": null, | |
27 | + "readout_noise": null, | |
28 | + "readout_time": null, | |
29 | + "idcam_readout_mode": null, | |
30 | + "name": "Cagire", | |
31 | + "desc": "", | |
32 | + "created": "2016-05-13 11:49:49.663", | |
33 | + "updated": "2016-05-13 11:49:49.664", | |
34 | + "is_online": false, | |
35 | + "maintenance_date": null | |
36 | + } | |
37 | +}, | |
38 | +{ | |
39 | + "model": "common.detector", | |
40 | + "pk": 2, | |
41 | + "fields": { | |
42 | + "telescope": 1, | |
43 | + "nb_photo_x": null, | |
44 | + "nb_photo_y": null, | |
45 | + "photo_size_x": null, | |
46 | + "photo_size_y": null, | |
47 | + "has_shutter": false, | |
48 | + "equivalent_foc_len": "", | |
49 | + "acq_start": null, | |
50 | + "acq_stop": null, | |
51 | + "check_temp": null, | |
52 | + "gain": null, | |
53 | + "readout_noise": null, | |
54 | + "readout_time": null, | |
55 | + "idcam_readout_mode": null, | |
56 | + "name": "Visible camera", | |
57 | + "desc": "", | |
58 | + "created": "2016-05-13 11:50:17.644", | |
59 | + "updated": "2016-05-13 11:50:17.644", | |
60 | + "is_online": false, | |
61 | + "status": "", | |
62 | + "maintenance_date": null | |
63 | + } | |
64 | +}, | |
65 | +{ | |
66 | + "model": "common.filterwheel", | |
67 | + "pk": 1, | |
68 | + "fields": { | |
69 | + "name": "Cagire FW", | |
70 | + "desc": "", | |
71 | + "created": "2016-06-28 13:28:28.298", | |
72 | + "updated": "2016-06-28 13:28:28.298", | |
73 | + "is_online": false, | |
74 | + "status": "", | |
75 | + "maintenance_date": null, | |
76 | + "detector": 1 | |
77 | + } | |
78 | +}, | |
79 | +{ | |
80 | + "model": "common.filterwheel", | |
81 | + "pk": 2, | |
82 | + "fields": { | |
83 | + "detector": 2, | |
84 | + "name": "Visible Camera FW", | |
85 | + "desc": "", | |
86 | + "created": "2016-06-28 13:28:46.887", | |
87 | + "updated": "2016-06-28 13:28:46.887", | |
88 | + "is_online": false, | |
89 | + "status": "", | |
90 | + "maintenance_date": null | |
91 | + } | |
92 | +}, | |
93 | +{ | |
94 | + "model": "common.filter", | |
95 | + "pk": 1, | |
96 | + "fields": { | |
97 | + "filter_wheel": 1, | |
98 | + "category": "", | |
99 | + "transmission_curve_doc": "", | |
100 | + "name": "First infrared filter", | |
101 | + "desc": "", | |
102 | + "created": "2016-05-13 11:49:56.579", | |
103 | + "updated": "2016-05-13 11:49:56.579", | |
104 | + "is_online": false, | |
105 | + "status": "", | |
106 | + "maintenance_date": null | |
107 | + } | |
108 | +}, | |
109 | +{ | |
110 | + "model": "common.filter", | |
111 | + "pk": 2, | |
112 | + "fields": { | |
113 | + "filter_wheel": 1, | |
114 | + "category": "", | |
115 | + "transmission_curve_doc": "", | |
116 | + "name": "Second infrared filter", | |
117 | + "desc": "", | |
118 | + "created": "2016-05-13 11:50:07.592", | |
119 | + "updated": "2016-05-13 11:50:07.592", | |
120 | + "is_online": false, | |
121 | + "status": "", | |
122 | + "maintenance_date": null | |
123 | + } | |
124 | +}, | |
125 | +{ | |
126 | + "model": "common.filter", | |
127 | + "pk": 3, | |
128 | + "fields": { | |
129 | + "filter_wheel": 2, | |
130 | + "category": "", | |
131 | + "transmission_curve_doc": "", | |
132 | + "name": "First visible filter", | |
133 | + "desc": "", | |
134 | + "created": "2016-05-13 11:50:02.012", | |
135 | + "updated": "2016-05-13 11:50:02.013", | |
136 | + "is_online": false, | |
137 | + "status": "", | |
138 | + "maintenance_date": null | |
139 | + } | |
140 | +}, | |
141 | +{ | |
142 | + "model": "common.filter", | |
143 | + "pk": 4, | |
144 | + "fields": { | |
145 | + "filter_wheel": 2, | |
146 | + "category": "", | |
147 | + "transmission_curve_doc": "", | |
148 | + "name": "Second visible filter", | |
149 | + "desc": "", | |
150 | + "created": "2016-05-13 11:50:11.226", | |
151 | + "updated": "2016-05-13 11:50:11.226", | |
152 | + "is_online": false, | |
153 | + "status": "", | |
154 | + "maintenance_date": null | |
155 | + } | |
156 | +}, | |
157 | +{ | |
158 | + "model": "common.scientificprogram", | |
159 | + "pk": 1, | |
160 | + "fields": { | |
161 | + "name": "GRB", | |
162 | + "desc": "", | |
163 | + "quota": 9999.0, | |
164 | + "priority": 0, | |
165 | + "pyros_users": [ | |
166 | + 1 | |
167 | + ] | |
168 | + } | |
169 | +}, | |
170 | +{ | |
171 | + "model": "common.strategyobs", | |
172 | + "pk": 1, | |
173 | + "fields": { | |
174 | + "name": "strat1", | |
175 | + "desc": "", | |
176 | + "xml_file": "strat1.xml" | |
177 | + } | |
178 | +}, | |
179 | +{ | |
180 | + "model": "common.strategyobs", | |
181 | + "pk": 2, | |
182 | + "fields": { | |
183 | + "name": "strat2", | |
184 | + "desc": "", | |
185 | + "xml_file": "strat2.xml" | |
186 | + } | |
187 | +}, | |
188 | +{ | |
189 | + "model": "common.telescope", | |
190 | + "pk": 1, | |
191 | + "fields": { | |
192 | + "mount_type": "", | |
193 | + "diameter": null, | |
194 | + "status": "", | |
195 | + "latitude": null, | |
196 | + "longitude": null, | |
197 | + "sens": "", | |
198 | + "altitude": null, | |
199 | + "readout_time": null, | |
200 | + "slew_time": null, | |
201 | + "slew_dead": null, | |
202 | + "slew_rate_max": null, | |
203 | + "horizon_type": "", | |
204 | + "horizon_def": null, | |
205 | + "lim_dec_max": null, | |
206 | + "lim_dec_min": null, | |
207 | + "lim_ha_rise": null, | |
208 | + "lim_ha_set": null, | |
209 | + "address": "", | |
210 | + "night_elev_sun": null, | |
211 | + "mpc_code": "", | |
212 | + "name": "Telescope", | |
213 | + "desc": "", | |
214 | + "created": "2016-05-13 11:50:14.326", | |
215 | + "updated": "2016-05-13 11:50:14.326", | |
216 | + "is_online": false, | |
217 | + "maintenance_date": null | |
218 | + } | |
219 | +}, | |
220 | +{ | |
221 | + "model": "common.userlevel", | |
222 | + "pk": 1, | |
223 | + "fields": { | |
224 | + "name": "Developer", | |
225 | + "desc": "", | |
226 | + "priority": 0, | |
227 | + "quota": 9999.0 | |
228 | + } | |
229 | +}, | |
230 | +{ | |
231 | + "model": "common.pyrosuser", | |
232 | + "pk": 1, | |
233 | + "fields": { | |
234 | + "password": "pbkdf2_sha256$24000$NC9UO4LPGvDN$+pkRcZUbmV3HEtbrhBdDCSPnAsDVValrbwLt7cXqrJE=", | |
235 | + "last_login": "2016-06-03 09:27:53.245", | |
236 | + "is_superuser": true, | |
237 | + "username": "haribo", | |
238 | + "first_name": "", | |
239 | + "last_name": "", | |
240 | + "email": "", | |
241 | + "is_staff": true, | |
242 | + "is_active": true, | |
243 | + "date_joined": "2016-05-02 14:02:36.495", | |
244 | + "groups": [], | |
245 | + "user_permissions": [], | |
246 | + "country": 1, | |
247 | + "user_level": 1, | |
248 | + "desc": "", | |
249 | + "created": "2016-06-03 09:29:15.450", | |
250 | + "updated": "2016-06-03 09:29:15.450", | |
251 | + "tel": "", | |
252 | + "address": "", | |
253 | + "laboratory": "", | |
254 | + "last_connect": null, | |
255 | + "cur_connect": null, | |
256 | + "putvalid_beg": null, | |
257 | + "putvalid_end": null, | |
258 | + "acqvalid_beg": "", | |
259 | + "acqvalid_end": "", | |
260 | + "quota": 9999.0, | |
261 | + "quota_rea": 9999.0, | |
262 | + "u_priority": null, | |
263 | + "p_priority": null, | |
264 | + "dir_level": null, | |
265 | + "can_del_void_req": false | |
266 | + } | |
267 | +} | |
268 | +] | ... | ... |
... | ... | @@ -0,0 +1,349 @@ |
1 | +[ | |
2 | +{ | |
3 | + "model": "common.country", | |
4 | + "pk": 1, | |
5 | + "fields": { | |
6 | + "name": "France", | |
7 | + "desc": "", | |
8 | + "quota": null | |
9 | + } | |
10 | +}, | |
11 | +{ | |
12 | + "model": "common.detector", | |
13 | + "pk": 1, | |
14 | + "fields": { | |
15 | + "name": "Cagire", | |
16 | + "desc": "", | |
17 | + "created": "2016-05-13 11:49:49.663", | |
18 | + "updated": "2016-05-13 11:49:49.664", | |
19 | + "is_online": false, | |
20 | + "maintenance_date": null, | |
21 | + "telescope": 1, | |
22 | + "status": "", | |
23 | + "nb_photo_x": null, | |
24 | + "nb_photo_y": null, | |
25 | + "photo_size_x": null, | |
26 | + "photo_size_y": null, | |
27 | + "has_shutter": false, | |
28 | + "equivalent_foc_len": "", | |
29 | + "acq_start": null, | |
30 | + "acq_stop": null, | |
31 | + "check_temp": null, | |
32 | + "gain": null, | |
33 | + "readout_noise": null, | |
34 | + "readout_time": null, | |
35 | + "idcam_readout_mode": null | |
36 | + } | |
37 | +}, | |
38 | +{ | |
39 | + "model": "common.detector", | |
40 | + "pk": 2, | |
41 | + "fields": { | |
42 | + "name": "Visible camera", | |
43 | + "desc": "", | |
44 | + "created": "2016-05-13 11:50:17.644", | |
45 | + "updated": "2016-05-13 11:50:17.644", | |
46 | + "is_online": false, | |
47 | + "maintenance_date": null, | |
48 | + "telescope": 1, | |
49 | + "status": "", | |
50 | + "nb_photo_x": null, | |
51 | + "nb_photo_y": null, | |
52 | + "photo_size_x": null, | |
53 | + "photo_size_y": null, | |
54 | + "has_shutter": false, | |
55 | + "equivalent_foc_len": "", | |
56 | + "acq_start": null, | |
57 | + "acq_stop": null, | |
58 | + "check_temp": null, | |
59 | + "gain": null, | |
60 | + "readout_noise": null, | |
61 | + "readout_time": null, | |
62 | + "idcam_readout_mode": null | |
63 | + } | |
64 | +}, | |
65 | +{ | |
66 | + "model": "common.filterwheel", | |
67 | + "pk": 1, | |
68 | + "fields": { | |
69 | + "name": "Cagire FW", | |
70 | + "desc": "", | |
71 | + "created": "2016-06-28 13:28:28.298", | |
72 | + "updated": "2016-06-28 13:28:28.298", | |
73 | + "is_online": false, | |
74 | + "status": "", | |
75 | + "maintenance_date": null, | |
76 | + "detector": 1 | |
77 | + } | |
78 | +}, | |
79 | +{ | |
80 | + "model": "common.filterwheel", | |
81 | + "pk": 2, | |
82 | + "fields": { | |
83 | + "name": "Visible Camera FW", | |
84 | + "desc": "", | |
85 | + "created": "2016-06-28 13:28:46.887", | |
86 | + "updated": "2016-06-28 13:28:46.887", | |
87 | + "is_online": false, | |
88 | + "status": "", | |
89 | + "maintenance_date": null, | |
90 | + "detector": 2 | |
91 | + } | |
92 | +}, | |
93 | +{ | |
94 | + "model": "common.filter", | |
95 | + "pk": 1, | |
96 | + "fields": { | |
97 | + "name": "First infrared filter", | |
98 | + "desc": "", | |
99 | + "created": "2016-05-13 11:49:56.579", | |
100 | + "updated": "2016-05-13 11:49:56.579", | |
101 | + "is_online": false, | |
102 | + "status": "", | |
103 | + "maintenance_date": null, | |
104 | + "filter_wheel": 1, | |
105 | + "category": "", | |
106 | + "transmission_curve_doc": "" | |
107 | + } | |
108 | +}, | |
109 | +{ | |
110 | + "model": "common.filter", | |
111 | + "pk": 2, | |
112 | + "fields": { | |
113 | + "filter_wheel": 1, | |
114 | + "category": "", | |
115 | + "transmission_curve_doc": "", | |
116 | + "name": "Second infrared filter", | |
117 | + "desc": "", | |
118 | + "created": "2016-05-13 11:50:07.592", | |
119 | + "updated": "2016-05-13 11:50:07.592", | |
120 | + "is_online": false, | |
121 | + "status": "", | |
122 | + "maintenance_date": null | |
123 | + } | |
124 | +}, | |
125 | +{ | |
126 | + "model": "common.filter", | |
127 | + "pk": 3, | |
128 | + "fields": { | |
129 | + "filter_wheel": 2, | |
130 | + "category": "", | |
131 | + "transmission_curve_doc": "", | |
132 | + "name": "First visible filter", | |
133 | + "desc": "", | |
134 | + "created": "2016-05-13 11:50:02.012", | |
135 | + "updated": "2016-05-13 11:50:02.013", | |
136 | + "is_online": false, | |
137 | + "status": "", | |
138 | + "maintenance_date": null | |
139 | + } | |
140 | +}, | |
141 | +{ | |
142 | + "model": "common.filter", | |
143 | + "pk": 4, | |
144 | + "fields": { | |
145 | + "filter_wheel": 2, | |
146 | + "category": "", | |
147 | + "transmission_curve_doc": "", | |
148 | + "name": "Second visible filter", | |
149 | + "desc": "", | |
150 | + "created": "2016-05-13 11:50:11.226", | |
151 | + "updated": "2016-05-13 11:50:11.226", | |
152 | + "is_online": false, | |
153 | + "status": "", | |
154 | + "maintenance_date": null | |
155 | + } | |
156 | +}, | |
157 | +{ | |
158 | + "model": "common.scientificprogram", | |
159 | + "pk": 1, | |
160 | + "fields": { | |
161 | + "name": "GRB", | |
162 | + "desc": "", | |
163 | + "quota": 9999.0, | |
164 | + "priority": 0, | |
165 | + "pyros_users": [ | |
166 | + 1 | |
167 | + ] | |
168 | + } | |
169 | +}, | |
170 | +{ | |
171 | + "model": "common.strategyobs", | |
172 | + "pk": 1, | |
173 | + "fields": { | |
174 | + "name": "strat1", | |
175 | + "desc": "", | |
176 | + "xml_file": "strat1.xml" | |
177 | + } | |
178 | +}, | |
179 | +{ | |
180 | + "model": "common.strategyobs", | |
181 | + "pk": 2, | |
182 | + "fields": { | |
183 | + "name": "strat2", | |
184 | + "desc": "", | |
185 | + "xml_file": "strat2.xml" | |
186 | + } | |
187 | +}, | |
188 | +{ | |
189 | + "model": "common.telescope", | |
190 | + "pk": 1, | |
191 | + "fields": { | |
192 | + "name": "Telescope", | |
193 | + "desc": "", | |
194 | + "created": "2016-05-13 11:50:14.326", | |
195 | + "updated": "2016-05-13 11:50:14.326", | |
196 | + "is_online": false, | |
197 | + "maintenance_date": null, | |
198 | + "mount_type": "", | |
199 | + "diameter": null, | |
200 | + "status": "", | |
201 | + "latitude": null, | |
202 | + "longitude": null, | |
203 | + "sens": "", | |
204 | + "altitude": null, | |
205 | + "readout_time": null, | |
206 | + "slew_time": null, | |
207 | + "slew_dead": null, | |
208 | + "slew_rate_max": null, | |
209 | + "horizon_type": "", | |
210 | + "horizon_def": null, | |
211 | + "lim_dec_max": null, | |
212 | + "lim_dec_min": null, | |
213 | + "lim_ha_rise": null, | |
214 | + "lim_ha_set": null, | |
215 | + "address": "", | |
216 | + "night_elev_sun": null, | |
217 | + "mpc_code": "" | |
218 | + } | |
219 | +}, | |
220 | +{ | |
221 | + "model": "common.userlevel", | |
222 | + "pk": 1, | |
223 | + "fields": { | |
224 | + "name": "Developer", | |
225 | + "desc": "", | |
226 | + "priority": 0, | |
227 | + "quota": 9999.0 | |
228 | + } | |
229 | +}, | |
230 | +{ | |
231 | + "model": "common.pyrosuser", | |
232 | + "pk": 3, | |
233 | + "fields": { | |
234 | + "password": "pbkdf2_sha256$24000$bKJO902RCk0w$zxUz9uiSYG85ymuvl5rNLLqT/LZwrLwpVj5WfwwSyKE=", | |
235 | + "last_login": "2016-06-21 13:07:34.383", | |
236 | + "is_superuser": false, | |
237 | + "username": "test@test.test", | |
238 | + "first_name": "test", | |
239 | + "last_name": "test", | |
240 | + "email": "test@test.test", | |
241 | + "is_staff": false, | |
242 | + "is_active": true, | |
243 | + "date_joined": "2016-06-21 13:07:19.609", | |
244 | + "groups": [], | |
245 | + "user_permissions": [], | |
246 | + "country": 1, | |
247 | + "user_level": 1, | |
248 | + "desc": null, | |
249 | + "created": "2016-06-21 13:07:19.911", | |
250 | + "updated": "2016-06-21 13:07:19.911", | |
251 | + "tel": "test", | |
252 | + "address": "test", | |
253 | + "laboratory": "test", | |
254 | + "last_connect": null, | |
255 | + "cur_connect": null, | |
256 | + "putvalid_beg": null, | |
257 | + "putvalid_end": null, | |
258 | + "acqvalid_beg": null, | |
259 | + "acqvalid_end": null, | |
260 | + "quota": null, | |
261 | + "quota_rea": null, | |
262 | + "u_priority": null, | |
263 | + "p_priority": null, | |
264 | + "dir_level": null, | |
265 | + "can_del_void_req": false | |
266 | + } | |
267 | +},{ | |
268 | + "model": "common.request", | |
269 | + "pk": 66, | |
270 | + "fields": { | |
271 | + "pyros_user": 3, | |
272 | + "scientific_program": 1, | |
273 | + "name": "Simulation_request_strat2", | |
274 | + "desc": null, | |
275 | + "created": "2016-06-21 13:42:04.493", | |
276 | + "updated": "2016-06-22 12:34:09.401", | |
277 | + "is_alert": true, | |
278 | + "target_type": "dqsd", | |
279 | + "status": null, | |
280 | + "autodeposit": false, | |
281 | + "checkpoint": null, | |
282 | + "flag": null, | |
283 | + "complete": true, | |
284 | + "submitted": false | |
285 | + } | |
286 | +}, | |
287 | +{ | |
288 | + "model": "common.sequence", | |
289 | + "pk": 53, | |
290 | + "fields": { | |
291 | + "request": 66, | |
292 | + "name": "Simulation_request_strat2_0", | |
293 | + "desc": null, | |
294 | + "created": "2016-06-21 13:42:04.587", | |
295 | + "updated": "2016-06-22 12:32:16.892", | |
296 | + "is_alert": false, | |
297 | + "status": "CPL", | |
298 | + "target_coords": "sdfghj", | |
299 | + "with_drift": false, | |
300 | + "priority": 0, | |
301 | + "analysis_method": null, | |
302 | + "moon_min": null, | |
303 | + "alt_min": null, | |
304 | + "type": null, | |
305 | + "img_current": null, | |
306 | + "img_total": null, | |
307 | + "not_obs": false, | |
308 | + "obsolete": false, | |
309 | + "processing": false, | |
310 | + "flag": null, | |
311 | + "jd1": "0E-8", | |
312 | + "jd2": "9000000.00000000", | |
313 | + "t_prefered": "-1.00000000", | |
314 | + "duration": "0.00023148", | |
315 | + "overhead": "0E-8" | |
316 | + } | |
317 | +}, | |
318 | +{ | |
319 | + "model": "common.album", | |
320 | + "pk": 55, | |
321 | + "fields": { | |
322 | + "sequence": 53, | |
323 | + "detector": 2, | |
324 | + "name": "Simulation_request_strat2_01", | |
325 | + "desc": null, | |
326 | + "created": "2016-06-21 13:42:04.874", | |
327 | + "updated": "2016-06-22 12:32:16.787", | |
328 | + "complete": true | |
329 | + } | |
330 | +}, | |
331 | +{ | |
332 | + "model": "common.plan", | |
333 | + "pk": 58, | |
334 | + "fields": { | |
335 | + "album": 55, | |
336 | + "filter": 3, | |
337 | + "name": "Simulation_request_strat2_010", | |
338 | + "desc": null, | |
339 | + "created": "2016-06-21 13:42:05.309", | |
340 | + "updated": "2016-06-22 12:32:16.690", | |
341 | + "duration": 0.0002314814814814815, | |
342 | + "position": null, | |
343 | + "exposure_time": null, | |
344 | + "nb_images": 1, | |
345 | + "dithering": false, | |
346 | + "complete": true | |
347 | + } | |
348 | +} | |
349 | +] | ... | ... |
src/pyros/settings.py
... | ... | @@ -206,7 +206,7 @@ USE_L10N = True |
206 | 206 | # TODO: fix this |
207 | 207 | # Necessary for ENV monitoring : |
208 | 208 | USE_TZ = False |
209 | -# Still necessary for "pyros.py simulator" (because of some fixtures that still use timezone-aware datetimes) | |
209 | +#USE_TZ = True | |
210 | 210 | #if USE_CELERY: USE_TZ = True |
211 | 211 | |
212 | 212 | # To find the media files {{ MEDIA_URL }} | ... | ... |
src/pyros/test_settings.py renamed to src/pyros/test_settings_NOTUSED.py
1 | -""" OBSOLETE FILE """ | |
2 | -""" | |
3 | -Django settings for pyros project. | |
4 | - | |
5 | -Generated by 'django-admin startproject' using Django 1.9.4. | |
6 | - | |
7 | -For more information on this file, see | |
8 | -https://docs.djangoproject.com/en/1.9/topics/settings/ | |
9 | - | |
10 | -For the full list of settings and their values, see | |
11 | -https://docs.djangoproject.com/en/1.9/ref/settings/ | |
12 | -""" | |
13 | - | |
14 | -# Dictionary containing all the versions for the different modules | |
15 | -# IMPORTANT : I must be updated at every commit ! | |
16 | - | |
17 | -MODULES_VERSIONS = { | |
18 | - "Alert Manager" : "0.2.4", | |
19 | - "Analyzer" : "0.1.2", | |
20 | - "Dashboard" : "0.1.1", | |
21 | - "Majordome" : "0.1.4", | |
22 | - "Monitoring" : "0.1.3", | |
23 | - "Observation Manager" : "0.1.3", | |
24 | - "Routine Manager" : "0.1.2", | |
25 | - "Scheduler" : "0.1.2", | |
26 | - "User Manager" : "0.1.1", | |
27 | - "Device" : "0.1.1" | |
28 | -} | |
29 | - | |
30 | -# Set MYSQL to False if you want to use SQLITE | |
31 | -# This line MUST NOT be changed at all except from changing True/False | |
32 | -# (or install_requirements script will become invalid) | |
33 | -MYSQL = True | |
34 | - | |
35 | -# YOU MUST CHANGE THIS VALUE IN PYROSRUN.SH TOO | |
36 | -TEST_PORT = 8001 | |
37 | -# YOU MUST CHANGE THIS VALUE IN PYROSRUN.SH TOO | |
38 | - | |
39 | - | |
40 | -import os | |
41 | - | |
42 | -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) | |
43 | -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
44 | - | |
45 | - | |
46 | -# Quick-start development settings - unsuitable for production | |
47 | -# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ | |
48 | - | |
49 | -# SECURITY WARNING: keep the secret key used in production secret! | |
50 | -SECRET_KEY = '0*@w)$rq4x1c2w!c#gn58*$*u$w=s8uw2zpr_c3nj*u%qlxc23' | |
51 | - | |
52 | -# SECURITY WARNING: don't run with debug turned on in production! | |
53 | -DEBUG = True | |
54 | - | |
55 | -ALLOWED_HOSTS = ['localhost'] | |
56 | - | |
57 | - | |
58 | -# Application definition | |
59 | - | |
60 | -INSTALLED_APPS = [ | |
61 | - 'django.contrib.admin', | |
62 | - 'django.contrib.auth', | |
63 | - 'django.contrib.contenttypes', | |
64 | - 'django.contrib.sessions', | |
65 | - 'django.contrib.messages', | |
66 | - 'django.contrib.staticfiles', | |
67 | - | |
68 | - # for using "./manage.py graph_models" with graphviz: | |
69 | - # (https://projects.irap.omp.eu/projects/pyros/wiki/Project_Development#django-extensions-and-graphviz-useful-for-generating-an-image-of-all-the-models-and-their-relationships) | |
70 | - 'django_extensions', | |
71 | - 'test_without_migrations', | |
72 | - 'bootstrap3', | |
73 | - 'dashboard', | |
74 | - 'scheduler', | |
75 | - 'common', | |
76 | - 'alert_manager', | |
77 | - 'analyzer', | |
78 | - 'majordome', | |
79 | - 'monitoring', | |
80 | - 'observation_manager', | |
81 | - 'routine_manager', | |
82 | - 'user_manager', | |
83 | - 'devices' | |
84 | -] | |
85 | - | |
86 | -MIDDLEWARE_CLASSES = [ | |
87 | - 'django.middleware.security.SecurityMiddleware', | |
88 | - 'django.contrib.sessions.middleware.SessionMiddleware', | |
89 | - 'django.middleware.common.CommonMiddleware', | |
90 | - 'django.middleware.csrf.CsrfViewMiddleware', | |
91 | - 'django.contrib.auth.middleware.AuthenticationMiddleware', | |
92 | - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | |
93 | - 'django.contrib.messages.middleware.MessageMiddleware', | |
94 | - 'django.middleware.clickjacking.XFrameOptionsMiddleware', | |
95 | -] | |
96 | - | |
97 | -ROOT_URLCONF = 'pyros.urls' | |
98 | - | |
99 | -TEMPLATES = [ | |
100 | - { | |
101 | - 'BACKEND': 'django.template.backends.django.DjangoTemplates', | |
102 | - 'DIRS': ['misc/templates'], | |
103 | - 'APP_DIRS': True, | |
104 | - 'OPTIONS': { | |
105 | - 'context_processors': [ | |
106 | - 'django.template.context_processors.debug', | |
107 | - 'django.template.context_processors.request', | |
108 | - 'django.contrib.auth.context_processors.auth', | |
109 | - 'django.contrib.messages.context_processors.messages', | |
110 | - ], | |
111 | - }, | |
112 | - }, | |
113 | -] | |
114 | - | |
115 | -WSGI_APPLICATION = 'pyros.wsgi.application' | |
116 | - | |
117 | -FIXTURE_DIRS = ( | |
118 | - 'misc/fixtures/', | |
119 | -) | |
120 | - | |
121 | -LOGIN_URL = "/" | |
122 | - | |
123 | -# Database | |
124 | -# https://docs.djangoproject.com/en/1.9/ref/settings/#databases | |
125 | - | |
126 | -# EP modif | |
127 | - | |
128 | -CELERY_TEST = False | |
129 | - | |
130 | -if not CELERY_TEST: | |
131 | - if not MYSQL: | |
132 | - DATABASES = { | |
133 | - 'default': { | |
134 | - 'ENGINE': 'django.db.backends.sqlite3', | |
135 | - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), | |
136 | - } | |
137 | - } | |
138 | - else: | |
139 | - DATABASES = { | |
140 | - 'default': { | |
141 | - 'ENGINE': 'django.db.backends.mysql', | |
142 | - 'NAME': 'test_pyros', | |
143 | - 'USER': 'pyros', | |
144 | - 'PASSWORD': 'DjangoPyros', | |
145 | - } | |
146 | - } | |
147 | -else: | |
148 | - DATABASES = { | |
149 | - 'default': { | |
150 | - 'ENGINE': 'django.db.backends.sqlite3', | |
151 | - 'NAME': os.path.join(BASE_DIR, 'testdb.sqlite3'), | |
152 | - 'TEST': { | |
153 | - 'NAME': os.path.join(BASE_DIR, 'testdb.sqlite3'), | |
154 | - }, | |
155 | - } | |
156 | - } | |
157 | - | |
158 | - | |
159 | -# Password validation | |
160 | -# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators | |
161 | - | |
162 | -AUTH_PASSWORD_VALIDATORS = [ | |
163 | - { | |
164 | - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', | |
165 | - }, | |
166 | - { | |
167 | - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', | |
168 | - }, | |
169 | - { | |
170 | - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', | |
171 | - }, | |
172 | - { | |
173 | - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', | |
174 | - }, | |
175 | -] | |
176 | - | |
177 | - | |
178 | -# Internationalization | |
179 | -# https://docs.djangoproject.com/en/1.9/topics/i18n/ | |
180 | - | |
181 | -LANGUAGE_CODE = 'en-us' | |
182 | - | |
183 | -TIME_ZONE = 'UTC' | |
184 | - | |
185 | -USE_I18N = True | |
186 | - | |
187 | -USE_L10N = True | |
188 | - | |
189 | -USE_TZ = True | |
190 | - | |
191 | - | |
192 | -# To find the media files {{ MEDIA_URL }} | |
193 | -MEDIA_URL = '/public/static/media/' | |
194 | - | |
195 | - | |
196 | -# To find the static files in the app/static/ap/... folders | |
197 | -STATIC_URL = '/public/static/' | |
198 | - | |
199 | -# To find the static files in src/static/. Any local directory can be added to this list. | |
200 | -STATICFILES_DIRS = ( | |
201 | - os.path.join(BASE_DIR, "misc", "static"), | |
202 | - ) | |
203 | - | |
204 | -# Used for deployment (DEBUG = False). Need to run "python manage.py collectstatic" to fill it. | |
205 | -STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'public', 'static') | |
206 | - | |
207 | - | |
208 | -# EP added | |
209 | -if not DEBUG: | |
210 | - ''' | |
211 | - CACHES = { | |
212 | - 'default': { | |
213 | - 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', | |
214 | - 'LOCATION': '127.0.0.1:11211', | |
215 | - } | |
216 | - } | |
217 | - ''' | |
218 | - CACHES = { | |
219 | - 'default': { | |
220 | - 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', | |
221 | - 'LOCATION': '/var/tmp/django_cache', | |
222 | - } | |
223 | - } | |
224 | - | |
225 | -else: | |
226 | - CACHES = { | |
227 | - 'default': { | |
228 | - 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', | |
229 | - } | |
230 | - } | |
231 | - | |
232 | -# from django.core.cache import cache | |
233 | -# cache.clear() | |
234 | - | |
235 | -# CELERY CONFIG | |
236 | - | |
237 | -# CELERY_RESULT_BACKEND = 'rpc://' | |
238 | -CELERY_RESULT_BACKEND = 'amqp' | |
239 | - | |
240 | -CELERY_ACCEPT_CONTENT = ['json'] | |
241 | -CELERY_TASK_SERIALIZER = 'json' | |
242 | -CELERY_RESULT_SERIALIZER = 'json' | |
243 | - | |
244 | -CELERY_IMPORTS = ( | |
245 | - "alert_manager.tasks", | |
246 | - "analyzer.tasks", | |
247 | - "majordome.tasks", | |
248 | - "monitoring.tasks", | |
249 | - "observation_manager.tasks", | |
250 | - "scheduler.tasks", | |
251 | -) | |
252 | - | |
253 | -# This config allows only 1 process / queue. We replace it by the -c option at celery workers creation. | |
254 | -# CELERYD_CONCURRENCY = 1 | |
255 | - | |
256 | -''' Following config is needed for manual purge ''' | |
257 | -CELERY_ACKS_LATE = False | |
258 | -CELERYD_PREFETCH_MULTIPLIER = 1 | |
259 | - | |
260 | -CELERY_QUEUES = { | |
261 | - "alert_listener_q": {"exchange": "alert_listener_q", "routing_key": "alert_listener_q"}, | |
262 | - "analysis_q": {"exchange": "analysis_q", "routing_key": "analysis_q"}, | |
263 | - "system_status_q": {"exchange": "system_status_q", "routing_key": "system_status_q"}, | |
264 | - "change_obs_conditions_q": {"exchange": "change_obs_conditions_q", "routing_key": "change_obs_conditions_q"}, | |
265 | - "monitoring_q": {"exchange": "monitoring_q", "routing_key": "monitoring_q"}, | |
266 | - "scheduling_q": {"exchange": "scheduling_q", "routing_key": "scheduling_q"}, | |
267 | - "execute_sequence_q": {"exchange": "execute_sequence_q", "routing_key": "execute_sequence_q"}, | |
268 | - "execute_plan_vis_q": {"exchange": "execute_plan_vis_q", "routing_key": "execute_plan_vis_q"}, | |
269 | - "execute_plan_nir_q": {"exchange": "execute_plan_nir_q", "routing_key": "execute_plan_nir_q"}, | |
270 | - "create_calibrations_q": {"exchange": "create_calibrations_q", "routing_key": "create_calibrations_q"}, | |
271 | -} | |
272 | - | |
273 | -CELERY_ROUTES = { | |
274 | - "alert_manager.tasks.alert_listener": {"queue": "alert_listener_q"}, | |
275 | - "analyzer.tasks.analysis": {"queue": "analysis_q"}, | |
276 | - "majordome.tasks.execute_sequence": {"queue": "execute_sequence_q"}, | |
277 | - "majordome.tasks.system_pause": {"queue": "system_status_q"}, | |
278 | - "majordome.tasks.system_restart": {"queue": "system_status_q"}, | |
279 | - "majordome.tasks.change_obs_conditions": {"queue": "change_obs_conditions_q"}, | |
280 | - "monitoring.tasks.monitoring": {"queue": "monitoring_q"}, | |
281 | - "observation_manager.tasks.execute_plan_vis": {"queue": "execute_plan_vis_q"}, | |
282 | - "observation_manager.tasks.execute_plan_nir": {"queue": "execute_plan_nir_q"}, | |
283 | - "observation_manager.tasks.create_calibrations": {"queue": "create_calibrations_q"}, | |
284 | - "scheduler.tasks.scheduling": {"queue": "scheduling_q"}, | |
285 | -} | |
286 | - | |
287 | -''' Removes pickle warning ''' | |
288 | -CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] | |
1 | +""" OBSOLETE FILE """ | |
2 | +""" | |
3 | +Django settings for pyros project. | |
4 | + | |
5 | +Generated by 'django-admin startproject' using Django 1.9.4. | |
6 | + | |
7 | +For more information on this file, see | |
8 | +https://docs.djangoproject.com/en/1.9/topics/settings/ | |
9 | + | |
10 | +For the full list of settings and their values, see | |
11 | +https://docs.djangoproject.com/en/1.9/ref/settings/ | |
12 | +""" | |
13 | + | |
14 | +# Dictionary containing all the versions for the different modules | |
15 | +# IMPORTANT : I must be updated at every commit ! | |
16 | + | |
17 | +MODULES_VERSIONS = { | |
18 | + "Alert Manager" : "0.2.4", | |
19 | + "Analyzer" : "0.1.2", | |
20 | + "Dashboard" : "0.1.1", | |
21 | + "Majordome" : "0.1.4", | |
22 | + "Monitoring" : "0.1.3", | |
23 | + "Observation Manager" : "0.1.3", | |
24 | + "Routine Manager" : "0.1.2", | |
25 | + "Scheduler" : "0.1.2", | |
26 | + "User Manager" : "0.1.1", | |
27 | + "Device" : "0.1.1" | |
28 | +} | |
29 | + | |
30 | +# Set MYSQL to False if you want to use SQLITE | |
31 | +# This line MUST NOT be changed at all except from changing True/False | |
32 | +# (or install_requirements script will become invalid) | |
33 | +MYSQL = True | |
34 | + | |
35 | +# YOU MUST CHANGE THIS VALUE IN PYROSRUN.SH TOO | |
36 | +TEST_PORT = 8001 | |
37 | +# YOU MUST CHANGE THIS VALUE IN PYROSRUN.SH TOO | |
38 | + | |
39 | + | |
40 | +import os | |
41 | + | |
42 | +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) | |
43 | +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
44 | + | |
45 | + | |
46 | +# Quick-start development settings - unsuitable for production | |
47 | +# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ | |
48 | + | |
49 | +# SECURITY WARNING: keep the secret key used in production secret! | |
50 | +SECRET_KEY = '0*@w)$rq4x1c2w!c#gn58*$*u$w=s8uw2zpr_c3nj*u%qlxc23' | |
51 | + | |
52 | +# SECURITY WARNING: don't run with debug turned on in production! | |
53 | +DEBUG = True | |
54 | + | |
55 | +ALLOWED_HOSTS = ['localhost'] | |
56 | + | |
57 | + | |
58 | +# Application definition | |
59 | + | |
60 | +INSTALLED_APPS = [ | |
61 | + 'django.contrib.admin', | |
62 | + 'django.contrib.auth', | |
63 | + 'django.contrib.contenttypes', | |
64 | + 'django.contrib.sessions', | |
65 | + 'django.contrib.messages', | |
66 | + 'django.contrib.staticfiles', | |
67 | + | |
68 | + # for using "./manage.py graph_models" with graphviz: | |
69 | + # (https://projects.irap.omp.eu/projects/pyros/wiki/Project_Development#django-extensions-and-graphviz-useful-for-generating-an-image-of-all-the-models-and-their-relationships) | |
70 | + 'django_extensions', | |
71 | + 'test_without_migrations', | |
72 | + 'bootstrap3', | |
73 | + 'dashboard', | |
74 | + 'scheduler', | |
75 | + 'common', | |
76 | + 'alert_manager', | |
77 | + 'analyzer', | |
78 | + 'majordome', | |
79 | + 'monitoring', | |
80 | + 'observation_manager', | |
81 | + 'routine_manager', | |
82 | + 'user_manager', | |
83 | + 'devices' | |
84 | +] | |
85 | + | |
86 | +MIDDLEWARE_CLASSES = [ | |
87 | + 'django.middleware.security.SecurityMiddleware', | |
88 | + 'django.contrib.sessions.middleware.SessionMiddleware', | |
89 | + 'django.middleware.common.CommonMiddleware', | |
90 | + 'django.middleware.csrf.CsrfViewMiddleware', | |
91 | + 'django.contrib.auth.middleware.AuthenticationMiddleware', | |
92 | + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | |
93 | + 'django.contrib.messages.middleware.MessageMiddleware', | |
94 | + 'django.middleware.clickjacking.XFrameOptionsMiddleware', | |
95 | +] | |
96 | + | |
97 | +ROOT_URLCONF = 'pyros.urls' | |
98 | + | |
99 | +TEMPLATES = [ | |
100 | + { | |
101 | + 'BACKEND': 'django.template.backends.django.DjangoTemplates', | |
102 | + 'DIRS': ['misc/templates'], | |
103 | + 'APP_DIRS': True, | |
104 | + 'OPTIONS': { | |
105 | + 'context_processors': [ | |
106 | + 'django.template.context_processors.debug', | |
107 | + 'django.template.context_processors.request', | |
108 | + 'django.contrib.auth.context_processors.auth', | |
109 | + 'django.contrib.messages.context_processors.messages', | |
110 | + ], | |
111 | + }, | |
112 | + }, | |
113 | +] | |
114 | + | |
115 | +WSGI_APPLICATION = 'pyros.wsgi.application' | |
116 | + | |
117 | +FIXTURE_DIRS = ( | |
118 | + 'misc/fixtures/', | |
119 | +) | |
120 | + | |
121 | +LOGIN_URL = "/" | |
122 | + | |
123 | +# Database | |
124 | +# https://docs.djangoproject.com/en/1.9/ref/settings/#databases | |
125 | + | |
126 | +# EP modif | |
127 | + | |
128 | +CELERY_TEST = False | |
129 | + | |
130 | +if not CELERY_TEST: | |
131 | + if not MYSQL: | |
132 | + DATABASES = { | |
133 | + 'default': { | |
134 | + 'ENGINE': 'django.db.backends.sqlite3', | |
135 | + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), | |
136 | + } | |
137 | + } | |
138 | + else: | |
139 | + DATABASES = { | |
140 | + 'default': { | |
141 | + 'ENGINE': 'django.db.backends.mysql', | |
142 | + 'NAME': 'test_pyros', | |
143 | + 'USER': 'pyros', | |
144 | + 'PASSWORD': 'DjangoPyros', | |
145 | + } | |
146 | + } | |
147 | +else: | |
148 | + DATABASES = { | |
149 | + 'default': { | |
150 | + 'ENGINE': 'django.db.backends.sqlite3', | |
151 | + 'NAME': os.path.join(BASE_DIR, 'testdb.sqlite3'), | |
152 | + 'TEST': { | |
153 | + 'NAME': os.path.join(BASE_DIR, 'testdb.sqlite3'), | |
154 | + }, | |
155 | + } | |
156 | + } | |
157 | + | |
158 | + | |
159 | +# Password validation | |
160 | +# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators | |
161 | + | |
162 | +AUTH_PASSWORD_VALIDATORS = [ | |
163 | + { | |
164 | + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', | |
165 | + }, | |
166 | + { | |
167 | + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', | |
168 | + }, | |
169 | + { | |
170 | + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', | |
171 | + }, | |
172 | + { | |
173 | + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', | |
174 | + }, | |
175 | +] | |
176 | + | |
177 | + | |
178 | +# Internationalization | |
179 | +# https://docs.djangoproject.com/en/1.9/topics/i18n/ | |
180 | + | |
181 | +#LANGUAGE_CODE = 'en-us' | |
182 | +LANGUAGE_CODE = 'fr-FR' | |
183 | + | |
184 | +#TIME_ZONE = 'UTC' | |
185 | +TIME_ZONE = 'Europe/Paris' | |
186 | + | |
187 | +USE_I18N = True | |
188 | + | |
189 | +USE_L10N = True | |
190 | + | |
191 | +USE_TZ = True | |
192 | + | |
193 | + | |
194 | +# To find the media files {{ MEDIA_URL }} | |
195 | +MEDIA_URL = '/public/static/media/' | |
196 | + | |
197 | + | |
198 | +# To find the static files in the app/static/ap/... folders | |
199 | +STATIC_URL = '/public/static/' | |
200 | + | |
201 | +# To find the static files in src/static/. Any local directory can be added to this list. | |
202 | +STATICFILES_DIRS = ( | |
203 | + os.path.join(BASE_DIR, "misc", "static"), | |
204 | + ) | |
205 | + | |
206 | +# Used for deployment (DEBUG = False). Need to run "python manage.py collectstatic" to fill it. | |
207 | +STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'public', 'static') | |
208 | + | |
209 | + | |
210 | +# EP added | |
211 | +if not DEBUG: | |
212 | + ''' | |
213 | + CACHES = { | |
214 | + 'default': { | |
215 | + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', | |
216 | + 'LOCATION': '127.0.0.1:11211', | |
217 | + } | |
218 | + } | |
219 | + ''' | |
220 | + CACHES = { | |
221 | + 'default': { | |
222 | + 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', | |
223 | + 'LOCATION': '/var/tmp/django_cache', | |
224 | + } | |
225 | + } | |
226 | + | |
227 | +else: | |
228 | + CACHES = { | |
229 | + 'default': { | |
230 | + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', | |
231 | + } | |
232 | + } | |
233 | + | |
234 | +# from django.core.cache import cache | |
235 | +# cache.clear() | |
236 | + | |
237 | +# CELERY CONFIG | |
238 | + | |
239 | +# CELERY_RESULT_BACKEND = 'rpc://' | |
240 | +CELERY_RESULT_BACKEND = 'amqp' | |
241 | + | |
242 | +CELERY_ACCEPT_CONTENT = ['json'] | |
243 | +CELERY_TASK_SERIALIZER = 'json' | |
244 | +CELERY_RESULT_SERIALIZER = 'json' | |
245 | + | |
246 | +CELERY_IMPORTS = ( | |
247 | + "alert_manager.tasks", | |
248 | + "analyzer.tasks", | |
249 | + "majordome.tasks", | |
250 | + "monitoring.tasks", | |
251 | + "observation_manager.tasks", | |
252 | + "scheduler.tasks", | |
253 | +) | |
254 | + | |
255 | +# This config allows only 1 process / queue. We replace it by the -c option at celery workers creation. | |
256 | +# CELERYD_CONCURRENCY = 1 | |
257 | + | |
258 | +''' Following config is needed for manual purge ''' | |
259 | +CELERY_ACKS_LATE = False | |
260 | +CELERYD_PREFETCH_MULTIPLIER = 1 | |
261 | + | |
262 | +CELERY_QUEUES = { | |
263 | + "alert_listener_q": {"exchange": "alert_listener_q", "routing_key": "alert_listener_q"}, | |
264 | + "analysis_q": {"exchange": "analysis_q", "routing_key": "analysis_q"}, | |
265 | + "system_status_q": {"exchange": "system_status_q", "routing_key": "system_status_q"}, | |
266 | + "change_obs_conditions_q": {"exchange": "change_obs_conditions_q", "routing_key": "change_obs_conditions_q"}, | |
267 | + "monitoring_q": {"exchange": "monitoring_q", "routing_key": "monitoring_q"}, | |
268 | + "scheduling_q": {"exchange": "scheduling_q", "routing_key": "scheduling_q"}, | |
269 | + "execute_sequence_q": {"exchange": "execute_sequence_q", "routing_key": "execute_sequence_q"}, | |
270 | + "execute_plan_vis_q": {"exchange": "execute_plan_vis_q", "routing_key": "execute_plan_vis_q"}, | |
271 | + "execute_plan_nir_q": {"exchange": "execute_plan_nir_q", "routing_key": "execute_plan_nir_q"}, | |
272 | + "create_calibrations_q": {"exchange": "create_calibrations_q", "routing_key": "create_calibrations_q"}, | |
273 | +} | |
274 | + | |
275 | +CELERY_ROUTES = { | |
276 | + "alert_manager.tasks.alert_listener": {"queue": "alert_listener_q"}, | |
277 | + "analyzer.tasks.analysis": {"queue": "analysis_q"}, | |
278 | + "majordome.tasks.execute_sequence": {"queue": "execute_sequence_q"}, | |
279 | + "majordome.tasks.system_pause": {"queue": "system_status_q"}, | |
280 | + "majordome.tasks.system_restart": {"queue": "system_status_q"}, | |
281 | + "majordome.tasks.change_obs_conditions": {"queue": "change_obs_conditions_q"}, | |
282 | + "monitoring.tasks.monitoring": {"queue": "monitoring_q"}, | |
283 | + "observation_manager.tasks.execute_plan_vis": {"queue": "execute_plan_vis_q"}, | |
284 | + "observation_manager.tasks.execute_plan_nir": {"queue": "execute_plan_nir_q"}, | |
285 | + "observation_manager.tasks.create_calibrations": {"queue": "create_calibrations_q"}, | |
286 | + "scheduler.tasks.scheduling": {"queue": "scheduling_q"}, | |
287 | +} | |
288 | + | |
289 | +''' Removes pickle warning ''' | |
290 | +CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] | ... | ... |
src/routine_manager/RequestSerializer.py
... | ... | @@ -10,8 +10,8 @@ from jdcal import gcal2jd, jd2gcal |
10 | 10 | import time |
11 | 11 | import datetime |
12 | 12 | import utils.Logger as L |
13 | -#import scheduler.tasks as task | |
14 | -import scheduler.tasks | |
13 | +import scheduler.tasks as task | |
14 | +#import scheduler.tasks | |
15 | 15 | log = L.setupLogger("RequestSerializerLogger", "RequestSerializer") |
16 | 16 | |
17 | 17 | def prettify(elem): |
... | ... | @@ -71,6 +71,7 @@ class RequestSerializer(): |
71 | 71 | return "Invalid file : " + str(E) |
72 | 72 | |
73 | 73 | self.pyros_user = pyros_user |
74 | + print("RS: pyros user is ", pyros_user) | |
74 | 75 | self.request = None |
75 | 76 | |
76 | 77 | """ self.sequences will be a [(seq, album_list), ...], and same thing for album """ |
... | ... | @@ -86,8 +87,15 @@ class RequestSerializer(): |
86 | 87 | self.request.save() |
87 | 88 | for sequence, albums in self.sequences: |
88 | 89 | if self.relative: |
90 | + # 86400 = nb seconds in 24 h | |
89 | 91 | sequence.jd1 = (time.time() + float(sequence.jd1)) / 86400 + TIMESTAMP_JD |
90 | 92 | sequence.jd2 = (time.time() + float(sequence.jd2)) / 86400 + TIMESTAMP_JD |
93 | + #print("********* jd1,jd2 ", sequence.jd1, sequence.jd2) | |
94 | + | |
95 | + # EP avirer | |
96 | + #sequence.jd1 += float( (1/24)*2 ) | |
97 | + #sequence.jd2 += float( (1/24)*2 ) | |
98 | + | |
91 | 99 | sequence.request = self.request |
92 | 100 | sequence.save() |
93 | 101 | for album, plans in albums: |
... | ... | @@ -101,10 +109,12 @@ class RequestSerializer(): |
101 | 109 | #ret = task.scheduling.delay(first_schedule=False, alert=False) |
102 | 110 | if settings.USE_CELERY: |
103 | 111 | print("RS: schedule WITH CELERY") |
104 | - scheduler.tasks.scheduling.delay(first_schedule=False, alert=False) | |
112 | + #ret = scheduler.tasks.scheduling.delay(first_schedule=False, alert=False) | |
113 | + ret = task.scheduling.delay(first_schedule=False, alert=False) | |
105 | 114 | else: |
106 | 115 | print("RS: schedule WITHOUT CELERY") |
107 | - scheduler.tasks.scheduling().run(first_schedule=False, alert=False) | |
116 | + #ret = scheduler.tasks.scheduling().run(first_schedule=False, alert=False) | |
117 | + ret = task.scheduling().run(first_schedule=False, alert=False) | |
108 | 118 | |
109 | 119 | return "" |
110 | 120 | ... | ... |
src/routine_manager/views.py
... | ... | @@ -48,7 +48,7 @@ def requests_list(request, status=0, message=""): |
48 | 48 | requests = [] |
49 | 49 | |
50 | 50 | for req in requests_objs: |
51 | - print("- REQ/views: requete", req) | |
51 | + #print("- REQ/views: requete", req) | |
52 | 52 | sequences = req.sequences |
53 | 53 | nb_executed = sequences.filter(status=Sequence.EXECUTED).count |
54 | 54 | nb_cancelled = sequences.filter(Q(status=Sequence.INVALID) | Q(status=Sequence.CANCELLED) |
... | ... | @@ -443,7 +443,7 @@ def submit_request(request, req_id, redir): |
443 | 443 | scheduler.tasks.scheduling.delay(first_schedule=True, alert=False) |
444 | 444 | else: |
445 | 445 | print("WITHOUT CELERY") |
446 | - scheduler.tasks.scheduling().delay(first_schedule=True, alert=False) | |
446 | + scheduler.tasks.scheduling().run(first_schedule=True, alert=False) | |
447 | 447 | |
448 | 448 | message = "The request was submitted" |
449 | 449 | if redir == "action_request": |
... | ... | @@ -464,7 +464,7 @@ def unsubmit_request(request, req_id): |
464 | 464 | |
465 | 465 | # TODO: uncomment pour la production |
466 | 466 | # if req.sequences.filter(Q(status=Sequence.EXECUTED) | Q(status=Sequence.EXECUTING)).exists(): |
467 | -# message = "You can't unsubmit an request with executed sequences" | |
467 | +# message = "You can't unsubmit a request with executed sequences" | |
468 | 468 | # return redirect(action_request, req_id=req_id, action="view", status=-1, message=message) |
469 | 469 | |
470 | 470 | req.submitted = False | ... | ... |
src/scheduler/Scheduler.py
1 | 1 | from operator import attrgetter |
2 | + | |
3 | +from scheduler.templatetags.jdconverter import jdtodate | |
2 | 4 | from .UserManager import UserManager |
3 | 5 | from .Interval import * |
4 | 6 | from django.db.models import Q |
... | ... | @@ -42,6 +44,7 @@ class Scheduler(IntervalManagement): |
42 | 44 | ''' |
43 | 45 | def copyFromPrevious(self) -> int: |
44 | 46 | if len(Schedule.objects.all()) == 1: |
47 | + print("only 1 schedule available") | |
45 | 48 | self.schedule.plan_night_start = self.schedule.plan_start |
46 | 49 | if DEBUG_FILE: |
47 | 50 | self.log("No schedule found") |
... | ... | @@ -97,7 +100,11 @@ class Scheduler(IntervalManagement): |
97 | 100 | self.log("Interval created : " + str(interval.__dict__)) |
98 | 101 | self.removeInvalidSequences() |
99 | 102 | self.determinePriorities() |
103 | + print("Sequences bef removeNonEligible are:", len(self.sequences)) | |
104 | + # EP le pb est ici !!! | |
105 | + #TODO: bugfix time computation EP a virer (remettre) | |
100 | 106 | self.removeNonEligible() |
107 | + print("Sequences aft removeNonEligible are:", len(self.sequences)) | |
101 | 108 | self.sortSequences() |
102 | 109 | self.placeSequences() |
103 | 110 | return 0 |
... | ... | @@ -108,6 +115,7 @@ class Scheduler(IntervalManagement): |
108 | 115 | def makeSchedule(self) -> Schedule: |
109 | 116 | print("In makeSchedule()") |
110 | 117 | global SIMULATION |
118 | + # WHY ??? | |
111 | 119 | SIMULATION = False |
112 | 120 | |
113 | 121 | if self.isFirstSchedule(): |
... | ... | @@ -117,10 +125,17 @@ class Scheduler(IntervalManagement): |
117 | 125 | #print("It is not the first schedule") |
118 | 126 | self.copyFromPrevious() #TODO trycatch a faire |
119 | 127 | self.schedule.plan_night_start = self.schedule.plan_start |
128 | + print("night start is", self.schedule.plan_night_start) | |
129 | + | |
130 | + #EP: avirer (add 2 hours) | |
131 | + #self.schedule.plan_night_start += float( (1/24)*2 ) | |
132 | + #self.schedule.plan_start += float( (1/24)*2 ) | |
120 | 133 | |
121 | - # List of sequences (PLANNED, TOBEPLANNED, PENDING) | |
134 | + # Get all sequences which are PLANNED, TOBEPLANNED, or PENDING | |
122 | 135 | self.sequences = list(Sequence.objects.filter(Q(status=Sequence.PLANNED) | Q(status=Sequence.TOBEPLANNED) |
123 | 136 | | Q(status=Sequence.PENDING))) |
137 | + print("**** nb of sequences already available for scheduling", len(self.sequences)) | |
138 | + | |
124 | 139 | # List of tuples (sequence, ScheduleHasSequences) for each sequence above and for current schedule |
125 | 140 | self.sequences = [ |
126 | 141 | ( |
... | ... | @@ -129,10 +144,11 @@ class Scheduler(IntervalManagement): |
129 | 144 | ) |
130 | 145 | for sequence in self.sequences |
131 | 146 | ] |
132 | - print("Sequences are:", self.sequences) | |
147 | + print("Sequences BEFORE are:", len(self.sequences)) | |
133 | 148 | if DEBUG_FILE: |
134 | 149 | self.log(str(len(self.sequences)) + " sequences found") |
135 | 150 | self.computeSchedule() |
151 | + print("Sequences AFTER are:", len(self.sequences)) | |
136 | 152 | self.saveSchedule() |
137 | 153 | if DEBUG_FILE: |
138 | 154 | self.log("Saving schedule with " + str(len(self.schedule.sequences.all())) + " sequences") |
... | ... | @@ -156,6 +172,14 @@ class Scheduler(IntervalManagement): |
156 | 172 | def removeNonEligible(self) -> int: |
157 | 173 | for sequence, shs in list(self.sequences): |
158 | 174 | overlap = Decimal(min(self.schedule.plan_end, sequence.jd2)) - Decimal(max(self.schedule.plan_start, sequence.jd1)) - self.max_overhead |
175 | + print() | |
176 | + print("- sequence: ", sequence) | |
177 | + print("plan start - plan end:", jdtodate(self.schedule.plan_start), "-", jdtodate(self.schedule.plan_end)) | |
178 | + print("jd1-jd2:", jdtodate(sequence.jd1), "-", jdtodate(sequence.jd2)) | |
179 | + print("overlap < duration ?:", overlap, sequence.duration) | |
180 | + #print("- sequence: ", sequence, "plan start, end, jd1, jd2, overlap", self.schedule.plan_start, self.schedule.plan_end, sequence.jd1, sequence.jd2, overlap) | |
181 | + #print("- sequence: ", sequence, "plan start", jdtodate(self.schedule.plan_start)) | |
182 | + print() | |
159 | 183 | if overlap < sequence.duration: |
160 | 184 | if sequence.jd1 < self.schedule.plan_start: |
161 | 185 | sequence.status = Sequence.UNPLANNABLE | ... | ... |
src/scheduler/tasks.py
... | ... | @@ -14,8 +14,11 @@ class scheduling(Task): |
14 | 14 | print("In scheduling.run()") |
15 | 15 | task = TaskId.objects.create(task_id=self.request.id, task="scheduling") |
16 | 16 | Log.objects.create(agent='Scheduler', message='Start schedule : ' + str(datetime.datetime.now())) |
17 | + # This creates a Scheduler (in memory) which creates a Schedule (in DB) | |
17 | 18 | self.scheduler = Scheduler() |
18 | 19 | self.scheduler.setNightLimits(secondsToJulianDate(getNightStart()), secondsToJulianDate(getNightEnd())) |
20 | + print("****sched-task: NEW SCHEDULE", self.scheduler.schedule, "*****") | |
19 | 21 | self.scheduler.makeSchedule() |
22 | + print("****sched-task: NEW SCHEDULE", self.scheduler.schedule, "*****") | |
20 | 23 | Log.objects.create(agent='Scheduler', message='Scheduling finished : ' + str(datetime.datetime.now())) |
21 | 24 | task.delete() |
22 | 25 | \ No newline at end of file | ... | ... |
src/scheduler/templatetags/jdconverter.py
... | ... | @@ -14,6 +14,10 @@ def jdtodate(jd): |
14 | 14 | |
15 | 15 | hour = str(int(date[3] * 24)) |
16 | 16 | hour = hour if len(hour) == 2 else "0%s" % hour |
17 | + | |
18 | + # EP avirer | |
19 | + #hour = str(int(hour)+2) | |
20 | + | |
17 | 21 | minute = str(int(date[3] * 24 * 60 % 60)) |
18 | 22 | minute = minute if len(minute) == 2 else "0%s" % minute |
19 | 23 | second = str(int(date[3] * 24 * 60 * 60 % 60)) | ... | ... |
src/scheduler/tests.py
... | ... | @@ -8,6 +8,7 @@ SIMULATION_FILE = 'file:./scheduler/sequences_cador.html' |
8 | 8 | |
9 | 9 | class SchedulerTest(TestCase): |
10 | 10 | |
11 | + # (EP) Create a fixture in memory with 1 scheduler, 3 requests belonging to 3 different users | |
11 | 12 | def setUp(self): |
12 | 13 | ''' |
13 | 14 | Creates the scheduler |
... | ... | @@ -557,16 +558,22 @@ class SchedulerTest(TestCase): |
557 | 558 | |
558 | 559 | def test_4_seq_eligibility(self): |
559 | 560 | ''' |
560 | - goal: test if inelibigle sequences are programmed | |
561 | + goal: test if ineligible sequences are programmed | |
561 | 562 | conditions: only ineligible sequences |
562 | 563 | ''' |
563 | 564 | |
564 | 565 | print("\n===== TEST_4_SEQ_ELIGIBILITY =====\n") |
565 | 566 | |
567 | + # Check that only 1 EMPTY schedule is available in DB (because of Scheduler() instance created in setup()) | |
568 | + self.assertEqual(len(Schedule.objects.all()) , 1) | |
569 | + sched = Schedule.objects.order_by('-created')[0] | |
570 | + print("schedule is", sched) | |
571 | + self.assertEqual(len(sched.shs.all()), 0) | |
572 | + | |
566 | 573 | self.scheduler.schedule.plan_start = 100 |
567 | 574 | self.scheduler.schedule.plan_end = 200 |
568 | 575 | |
569 | - ''' create the sequences ''' | |
576 | + ''' create 4 sequences (to be planned) with default status TOBEPLANNED ''' | |
570 | 577 | seq1 = Sequence.objects.create(request=self.req1, status=Sequence.TOBEPLANNED, |
571 | 578 | name="seq1", jd1=0, jd2=110, priority=1, t_prefered=-1, duration=20) |
572 | 579 | seq2 = Sequence.objects.create(request=self.req2, status=Sequence.TOBEPLANNED, |
... | ... | @@ -575,28 +582,38 @@ class SchedulerTest(TestCase): |
575 | 582 | name="seq3", jd1=50, jd2=90, priority=1, t_prefered=-1, duration=20) |
576 | 583 | seq4 = Sequence.objects.create(request=self.req3, status=Sequence.TOBEPLANNED, |
577 | 584 | name="seq4", jd1=300, jd2=400, priority=1, t_prefered=-1, duration=20) |
585 | + #for s in (seq1,seq2,seq3,seq4): print(s.status) | |
586 | + | |
587 | + # Check that we now have exactly 4 sequences in DB | |
588 | + self.assertEqual(len(Sequence.objects.all()) , 4) | |
578 | 589 | |
579 | 590 | ''' compute and print the schedule ''' |
580 | 591 | self.scheduler.makeSchedule() |
581 | 592 | |
593 | + # Check that still only 1 schedule available in DB, and 0 sequence in it | |
594 | + self.assertEqual(len(Schedule.objects.all()) , 1) | |
595 | + # Get the last (more recent) schedule saved by makeSchedule() | |
582 | 596 | sched = Schedule.objects.order_by('-created')[0] |
597 | + print("updated schedule is", sched, "with night start", sched.plan_night_start) | |
583 | 598 | shs_list = sched.shs.all() |
599 | + # EP added | |
600 | + self.assertEqual(len(shs_list), 0) | |
584 | 601 | nbPlanned = len([shs for shs in shs_list if shs.status == Sequence.PLANNED]) |
602 | + self.assertEqual(nbPlanned, 0) | |
585 | 603 | |
604 | + ''' checks sequences status ''' | |
586 | 605 | seq1 = Sequence.objects.get(name="seq1") |
587 | 606 | seq2 = Sequence.objects.get(name="seq2") |
588 | 607 | seq3 = Sequence.objects.get(name="seq3") |
589 | 608 | seq4 = Sequence.objects.get(name="seq4") |
590 | 609 | |
591 | - ''' checks sequences status ''' | |
592 | - | |
593 | - self.assertEqual(nbPlanned, 0) | |
594 | - | |
610 | + for s in (seq1,seq2,seq3,seq4): print(s.status) | |
595 | 611 | self.assertEqual(seq1.status, Sequence.UNPLANNABLE) |
596 | 612 | self.assertEqual(seq2.status, Sequence.TOBEPLANNED) |
597 | 613 | self.assertEqual(seq3.status, Sequence.UNPLANNABLE) |
598 | 614 | self.assertEqual(seq4.status, Sequence.TOBEPLANNED) |
599 | 615 | |
616 | + | |
600 | 617 | def test_invalid_sequences(self): |
601 | 618 | ''' |
602 | 619 | goal: test if the scheduler is able to plan invalid sequences (it shouldn't) | ... | ... |
src/utils/JDManipulator.py
... | ... | @@ -17,8 +17,10 @@ def getSimTime(): |
17 | 17 | current_time = current_time.replace(minute=current_time.minute + 1, second=10) |
18 | 18 | else: |
19 | 19 | current_time = current_time.replace(second=(current_time.second + 10)) |
20 | + | |
20 | 21 | return (time.mktime(current_time.timetuple())) |
21 | 22 | |
23 | + | |
22 | 24 | SIM_TIME_START = getSimTime() |
23 | 25 | |
24 | 26 | def JulianSeconds(value): |
... | ... | @@ -67,6 +69,12 @@ def getNextDefaultNightEnd(): |
67 | 69 | |
68 | 70 | def getDefaultNightStart(): |
69 | 71 | current_time = datetime.datetime.now() |
72 | + print("*********************") | |
73 | + print("*********************") | |
74 | + print("current time is", current_time) | |
75 | + print("SIM_TIME_START", SIM_TIME_START) | |
76 | + print("*********************") | |
77 | + print("*********************") | |
70 | 78 | if settings.SIMULATOR: |
71 | 79 | if settings.SIMULATOR: |
72 | 80 | return SIM_TIME_START | ... | ... |