Commit 8902a770b185c2a1ac3650db3d6380d810d06196
1 parent
e848fbef
Exists in
dev
ctrl-c available sooner : from restart loop and not only from main_loop as before
Showing
25 changed files
with
332 additions
and
438 deletions
Show diff stats
.gitignore
... | ... | @@ -19,7 +19,6 @@ BASE_TEMPLATE.HTML |
19 | 19 | |
20 | 20 | *.swp |
21 | 21 | /.settings/ |
22 | -#/.pydevproject | |
23 | 22 | |
24 | 23 | #src/images/*_* |
25 | 24 | #src/alert_manager/twistd* |
... | ... | @@ -27,6 +26,7 @@ BASE_TEMPLATE.HTML |
27 | 26 | #src/common/migrations/0* |
28 | 27 | #src/common/migrations_LOCAL/0* |
29 | 28 | #src/monitoring/plc_config.json |
29 | +src/core/pyros_django/majordome/doc/AgentMajordome_object_diag_error.html | |
30 | 30 | |
31 | 31 | # LOGS |
32 | 32 | /config/logs/* |
... | ... | @@ -85,4 +85,4 @@ src/core/pyros_django/misc/fixtures/tests/test_import_seq.yml |
85 | 85 | *.moi |
86 | 86 | *.moi.* |
87 | 87 | |
88 | -privatedev/plugin/agent/triton/triton/CATALOGUES | |
89 | 88 | \ No newline at end of file |
89 | +privatedev/plugin/agent/triton/triton/CATALOGUES | ... | ... |
.pydevproject deleted
... | ... | @@ -1,58 +0,0 @@ |
1 | -<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | -<?eclipse-pydev version="1.0"?><pydev_project> | |
3 | - | |
4 | - | |
5 | - | |
6 | - | |
7 | - | |
8 | - | |
9 | - | |
10 | - <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property> | |
11 | - | |
12 | - | |
13 | - | |
14 | - | |
15 | - | |
16 | - | |
17 | - | |
18 | - <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property> | |
19 | - | |
20 | - | |
21 | - | |
22 | - | |
23 | - | |
24 | - | |
25 | - | |
26 | - <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> | |
27 | - | |
28 | - <path>/${PROJECT_DIR_NAME}/src</path> | |
29 | - | |
30 | - <path>/${PROJECT_DIR_NAME}/simulators</path> | |
31 | - | |
32 | - </pydev_pathproperty> | |
33 | - | |
34 | - | |
35 | - | |
36 | - | |
37 | - | |
38 | - | |
39 | - | |
40 | - <pydev_variables_property name="org.python.pydev.PROJECT_VARIABLE_SUBSTITUTION"> | |
41 | - <key>DJANGO_MANAGE_LOCATION</key> | |
42 | - <value>src/core/pyros_django/manage.py</value> | |
43 | - <key>DJANGO_SETTINGS_MODULE</key> | |
44 | - <value>core.pyros_django.pyros.settings</value> | |
45 | - <key>PY</key> | |
46 | - <value>37</value> | |
47 | - </pydev_variables_property> | |
48 | - | |
49 | - | |
50 | - | |
51 | - | |
52 | - | |
53 | - | |
54 | - | |
55 | - <pydev_pathproperty name="org.python.pydev.PROJECT_EXTERNAL_SOURCE_PATH"> | |
56 | - <path>/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS_SOFT/PYROS201806/venv/venv_py3_pyros/lib/python3.7/site-packages</path> | |
57 | - </pydev_pathproperty> | |
58 | -</pydev_project> |
cp_private_dev_to_private.sh
1 | 1 | |
2 | 2 | cp -p src/core/pyros_django/agent/AgentBasic.py privatedev/plugin/agent/AgentBasic.py |
3 | 3 | |
4 | -rsync -avh --delete privatedev/ private/ | |
4 | +rsync -avh --delete --exclude '.gitignore' --exclude 'plugin/README' --exclude 'config/README' privatedev/ private/ | |
5 | + | |
5 | 6 | #cp -r ./privatedev/* ./private/ |
6 | 7 | ... | ... |
private/.gitignore
privatedev/plugin/agent/AgentBasic.py
src/core/pyros_django/agent/Agent.py
... | ... | @@ -626,8 +626,6 @@ class Agent: |
626 | 626 | _my_client_agents_aliases = [] |
627 | 627 | _my_client_agents = {} |
628 | 628 | |
629 | - _iter_num = None | |
630 | - | |
631 | 629 | # Log object |
632 | 630 | _log = None |
633 | 631 | |
... | ... | @@ -645,13 +643,13 @@ class Agent: |
645 | 643 | # Declaration of Instance attributes, default values |
646 | 644 | #self.UP_SINCE = datetime.utcnow() |
647 | 645 | self.__UP_SINCE = datetime.now(tz=timezone.utc) |
648 | - self.__current_cmd = None | |
646 | + self.__current_cmd :AgentCmd = None | |
649 | 647 | self.name = "Generic Agent" |
650 | - self.__status = None | |
651 | - self.__mode = None | |
648 | + self.__status :str = None | |
649 | + self.__mode :str = None | |
652 | 650 | self.unit = None |
653 | 651 | self.TEST_COMMANDS = None |
654 | - | |
652 | + self.__iter_num :int = 0 | |
655 | 653 | |
656 | 654 | #print(AgentSurvey.MODE_CHOICES.IDLE) |
657 | 655 | #sys.exit() |
... | ... | @@ -1030,82 +1028,68 @@ class Agent: |
1030 | 1028 | ###############@ |
1031 | 1029 | # REPEAT UNTIL not DO_RESTART_LOOP |
1032 | 1030 | self.DO_RESTART_LOOP = True |
1031 | + | |
1033 | 1032 | while self.DO_RESTART_LOOP: |
1034 | - | |
1035 | - log.info("*"*10+ " STARTING RESTART LOOP "+ "*"*10+ '\n') | |
1036 | - | |
1037 | 1033 | # By default, no restart after exit from main loop |
1038 | 1034 | self.DO_RESTART_LOOP = False |
1039 | - | |
1040 | - self.start_time = time.time() | |
1041 | - #log.debug("on est ici: " + os.getcwd()) | |
1042 | - | |
1043 | - self.__load_config() | |
1044 | - | |
1045 | - self.__print_TEST_MODE() | |
1046 | - | |
1047 | - self._init() | |
1048 | - ''' testing log: | |
1049 | - self.log_e("ERROR") | |
1050 | - self.log_c("FATAL critical ERROR") | |
1051 | - ''' | |
1052 | - #self.log_w("WARNING", "watch your step !") | |
1053 | - #log.warning("WARNING"+ "watch your step !") | |
1054 | - | |
1055 | - # Avoid blocking on false "running" commands | |
1056 | - # (old commands that stayed with "running" status when agent was killed) | |
1057 | - AgentCmd.delete_commands_with_running_status_for_agent(self.name) | |
1058 | - | |
1059 | - self._iter_num = 1 | |
1060 | - | |
1061 | - ############# | |
1062 | - # MAIN loop # | |
1063 | - ############@ | |
1064 | - self.DO_MAIN_LOOP = True | |
1065 | - while self.DO_MAIN_LOOP: | |
1066 | - try: | |
1067 | - self.__main_loop(nb_iter,FOR_REAL) | |
1068 | - #if not self.DO_MAIN_LOOP: break | |
1069 | - except KeyboardInterrupt: # CTRL-C | |
1070 | - # In case of CTRL-C, kill the current thread (process) before dying (in error) | |
1071 | - #log.info("CTRL-C Interrupted, I kill the current thread (process) before exiting (if exists)") | |
1072 | - log.info("CTRL-C Interrupted, trying to stop cleanly") | |
1073 | - #self._kill_running_device_cmd_if_exists("USER_CTRLC") | |
1074 | - #self.do_things_before_exit("USER_CTRLC") | |
1075 | - ##self._cleanup_before_exit("USER_CTRLC") | |
1076 | - self.do_stop("asap") | |
1077 | - exit(1) | |
1078 | - | |
1079 | - # TEST mode only | |
1080 | - self.__TEST_test_results() | |
1081 | - #if self._DO_EXIT: exit(0) | |
1035 | + try: | |
1036 | + self.__restart_loop(nb_iter,FOR_REAL) | |
1037 | + except KeyboardInterrupt: # CTRL-C | |
1038 | + # In case of CTRL-C, kill the current thread (process) before dying (in error) | |
1039 | + #log.info("CTRL-C Interrupted, I kill the current thread (process) before exiting (if exists)") | |
1040 | + log.info("CTRL-C Interrupted, trying to stop cleanly") | |
1041 | + break | |
1042 | + #self._kill_running_device_cmd_if_exists("USER_CTRLC") | |
1043 | + #self.do_things_before_exit("USER_CTRLC") | |
1044 | + ##self._cleanup_before_exit("USER_CTRLC") | |
1045 | + ###self.do_stop("asap") | |
1046 | + ###exit(1) | |
1047 | + | |
1048 | + # exit | |
1049 | + self.do_stop("asap") | |
1082 | 1050 | |
1083 | 1051 | |
1052 | + def __restart_loop(self, nb_iter:int=None, FOR_REAL:bool=True): | |
1053 | + log.info("*"*10+ " STARTING RESTART LOOP "+ "*"*10+ '\n') | |
1084 | 1054 | |
1085 | - def __cleanup_before_exit(self, stopper_agent_name:str=None): | |
1086 | - if not stopper_agent_name: stopper_agent_name = self.name | |
1087 | - #self._set_status(self.STATUS_EXIT) | |
1088 | - ##self._log_agent_state() | |
1055 | + self.start_time = time.time() | |
1056 | + #log.debug("on est ici: " + os.getcwd()) | |
1089 | 1057 | |
1090 | - log.info("Trying to stop cleanly") | |
1091 | - log.info("Before exiting, Here are (if exists) the current (still) pending commands (time ordered) :") | |
1092 | - #commands = AgentCmd.get_commands_sent_to_agent(self.name) | |
1093 | - commands = AgentCmd.get_pending_and_running_commands_for_agent(self.name) | |
1094 | - AgentCmd.show_commands(commands, True) | |
1095 | - ##self.do_flush_commands() | |
1096 | - #if self.TEST_MODE and self.TEST_WITH_FINAL_TEST and self.TEST_COMMANDS_DEST == "myself": self.simulator_test_results() | |
1097 | - if self.TEST_MODE and self.TEST_WITH_FINAL_TEST: | |
1098 | - self.__TEST_test_results() | |
1099 | - #self._DO_EXIT=True | |
1100 | - #exit(0) | |
1058 | + self.__load_config() | |
1101 | 1059 | |
1102 | - self._do_things_before_exit(stopper_agent_name) | |
1103 | - ##self._set_and_log_status(self.AGT_STATUS.EXITING) | |
1060 | + self.__print_TEST_MODE() | |
1104 | 1061 | |
1105 | - #def _kill_running_device_cmd_if_exists(self, abort_cmd_sender): | |
1106 | - # to be overriden by subclass | |
1107 | - def _do_things_before_exit(self, stopper_agent_name:str=None): | |
1108 | - pass | |
1062 | + self._init() | |
1063 | + ''' testing log: | |
1064 | + self.log_e("ERROR") | |
1065 | + self.log_c("FATAL critical ERROR") | |
1066 | + ''' | |
1067 | + #self.log_w("WARNING", "watch your step !") | |
1068 | + #log.warning("WARNING"+ "watch your step !") | |
1069 | + | |
1070 | + # Avoid blocking on false "running" commands | |
1071 | + # (old commands that stayed with "running" status when agent was killed) | |
1072 | + AgentCmd.delete_commands_with_running_status_for_agent(self.name) | |
1073 | + | |
1074 | + ############# | |
1075 | + # MAIN loop # | |
1076 | + ############@ | |
1077 | + self.__iter_num = 1 | |
1078 | + self.DO_MAIN_LOOP = True | |
1079 | + while self.DO_MAIN_LOOP: | |
1080 | + # EXIT because of nb of iterations ? | |
1081 | + if nb_iter is not None: | |
1082 | + # Bad number of iterations or nb iterations reached => exit | |
1083 | + if nb_iter <= 0 or nb_iter < self.__iter_num: | |
1084 | + log.info(f"Exit because number of iterations asked ({nb_iter}) has been reached") | |
1085 | + break | |
1086 | + self.__main_loop(nb_iter,FOR_REAL) | |
1087 | + self.__iter_num += 1 | |
1088 | + #if not self.DO_MAIN_LOOP: break | |
1089 | + | |
1090 | + # TEST mode only | |
1091 | + self.__TEST_test_results() | |
1092 | + #if self._DO_EXIT: exit(0) | |
1109 | 1093 | |
1110 | 1094 | |
1111 | 1095 | def __main_loop(self, nb_iter:int=None, FOR_REAL:bool=True): |
... | ... | @@ -1204,26 +1188,53 @@ class Agent: |
1204 | 1188 | |
1205 | 1189 | self.__main_loop_end() |
1206 | 1190 | |
1207 | - self._iter_num += 1 | |
1208 | 1191 | |
1209 | 1192 | |
1210 | 1193 | |
1194 | + def __cleanup_before_exit(self, stopper_agent_name:str=None): | |
1195 | + if not stopper_agent_name: stopper_agent_name = self.name | |
1196 | + #self._set_status(self.STATUS_EXIT) | |
1197 | + ##self._log_agent_state() | |
1198 | + | |
1199 | + log.info("Trying to stop cleanly") | |
1200 | + log.info("Before exiting, Here are (if exists) the current (still) pending commands (time ordered) :") | |
1201 | + #commands = AgentCmd.get_commands_sent_to_agent(self.name) | |
1202 | + commands = AgentCmd.get_pending_and_running_commands_for_agent(self.name) | |
1203 | + AgentCmd.show_commands(commands, True) | |
1204 | + ##self.do_flush_commands() | |
1205 | + #if self.TEST_MODE and self.TEST_WITH_FINAL_TEST and self.TEST_COMMANDS_DEST == "myself": self.simulator_test_results() | |
1206 | + if self.TEST_MODE and self.TEST_WITH_FINAL_TEST: | |
1207 | + self.__TEST_test_results() | |
1208 | + #self._DO_EXIT=True | |
1209 | + #exit(0) | |
1210 | + | |
1211 | + self._do_things_before_exit(stopper_agent_name) | |
1212 | + ##self._set_and_log_status(self.AGT_STATUS.EXITING) | |
1213 | + | |
1214 | + #def _kill_running_device_cmd_if_exists(self, abort_cmd_sender): | |
1215 | + # to be overriden by subclass | |
1216 | + def _do_things_before_exit(self, stopper_agent_name:str=None): | |
1217 | + pass | |
1218 | + | |
1219 | + | |
1211 | 1220 | def __main_loop_start(self, nb_iter:int=None): |
1212 | 1221 | |
1213 | 1222 | for i in range(3): print() |
1214 | 1223 | #self.printd("-"*80) |
1215 | 1224 | log.info("*"*90) |
1216 | - log.info("*"*20 + f" {self.name} : MAIN LOOP ITERATION {self._iter_num} (START) " + "*"*20) | |
1225 | + log.info("*"*20 + f" {self.name} : MAIN LOOP ITERATION #{self.__iter_num} (START) " + "*"*20) | |
1217 | 1226 | log.info("*"*90 + '\n') |
1218 | 1227 | #self.print(f"Iteration {self._iter_num}") |
1219 | 1228 | |
1229 | + ''' | |
1220 | 1230 | # EXIT because of nb of iterations ? |
1221 | 1231 | if nb_iter is not None: |
1222 | 1232 | # Bad number of iterations or nb iterations reached => exit |
1223 | - if nb_iter <= 0 or nb_iter < self._iter_num: | |
1233 | + if nb_iter <= 0 or nb_iter < self.__iter_num: | |
1224 | 1234 | log.info(f"Exit because number of iterations asked ({nb_iter}) has been reached") |
1225 | 1235 | self.DO_MAIN_LOOP = False |
1226 | 1236 | return |
1237 | + ''' | |
1227 | 1238 | |
1228 | 1239 | # Temporizing (delay) : Wait a random number of sec before starting iteration |
1229 | 1240 | # (to avoid to busy to much the processor) |
... | ... | @@ -1552,7 +1563,7 @@ class Agent: |
1552 | 1563 | # |
1553 | 1564 | |
1554 | 1565 | def get_state(self): |
1555 | - return f"MODE is {self.__get_mode()} ; STATUS is {self.get_status()} ; ITERATION #{self._iter_num}" | |
1566 | + return f"MODE is {self.__get_mode()} ; STATUS is {self.get_status()} ; ITERATION #{self.__iter_num}" | |
1556 | 1567 | |
1557 | 1568 | def show_state(self): |
1558 | 1569 | log.info(self.get_state()) |
... | ... | @@ -1824,7 +1835,7 @@ class Agent: |
1824 | 1835 | #self._agent_survey = AgentSurvey.objects.get(name=self.name) |
1825 | 1836 | self.__agent_survey.mode = self.__get_mode() |
1826 | 1837 | self.__agent_survey.status = self.get_status() |
1827 | - self.__agent_survey.iteration = self._iter_num | |
1838 | + self.__agent_survey.iteration = self.__iter_num | |
1828 | 1839 | self.__agent_survey.save() |
1829 | 1840 | #self._agent_survey.save(update_fields=["mode", "status"]) |
1830 | 1841 | ... | ... |
src/core/pyros_django/agent/AgentA.py
... | ... | @@ -77,8 +77,8 @@ class AgentA(Agent): |
77 | 77 | self._log.print("init done") |
78 | 78 | |
79 | 79 | # @override |
80 | - def init(self): | |
81 | - super().init() | |
80 | + def _init(self): | |
81 | + super()._init() | |
82 | 82 | # --- Set the mode according the startmode value |
83 | 83 | ##agent_alias = self.__class__.__name__ |
84 | 84 | ##self.set_mode_from_config(agent_alias) | ... | ... |
src/core/pyros_django/agent/AgentB.py
... | ... | @@ -62,8 +62,8 @@ class AgentB(Agent): |
62 | 62 | self._log.print("init done") |
63 | 63 | |
64 | 64 | # @override |
65 | - def init(self): | |
66 | - super().init() | |
65 | + def _init(self): | |
66 | + super()._init() | |
67 | 67 | # --- Set the mode according the startmode value |
68 | 68 | ##agent_alias = self.__class__.__name__ |
69 | 69 | ##self.set_mode_from_config(agent_alias) | ... | ... |
src/core/pyros_django/agent/AgentBasic.py
src/core/pyros_django/agent/AgentC.py
... | ... | @@ -84,8 +84,8 @@ class AgentC(Agent): |
84 | 84 | ###self._log.print("init done") |
85 | 85 | |
86 | 86 | # @override |
87 | - def init(self): | |
88 | - super().init() | |
87 | + def _init(self): | |
88 | + super()._init() | |
89 | 89 | # --- Set the mode according the startmode value |
90 | 90 | ##agent_alias = self.__class__.__name__ |
91 | 91 | ##self.set_mode_from_config(agent_alias) | ... | ... |
src/core/pyros_django/agent/AgentDevice.py
... | ... | @@ -205,9 +205,9 @@ class AgentDevice(Agent): |
205 | 205 | pass |
206 | 206 | |
207 | 207 | # @override |
208 | - def init(self): | |
208 | + def _init(self): | |
209 | 209 | |
210 | - super().init() | |
210 | + super()._init() | |
211 | 211 | # --- Set the mode according the startmode value |
212 | 212 | ##agent_alias = self.__class__.__name__ |
213 | 213 | ##self.set_mode_from_config(agent_alias) |
... | ... | @@ -307,7 +307,7 @@ class AgentDevice(Agent): |
307 | 307 | def is_device_level_cmd(self, cmd: AgentCmd): |
308 | 308 | return self._device_ctrl.is_valid_cmd(DeviceCmd(cmd.full_name)) |
309 | 309 | |
310 | - def process_device_level_cmd(self): | |
310 | + def _process_device_level_cmd(self): | |
311 | 311 | log.info("(DEVICE LEVEL CMD)") |
312 | 312 | try: |
313 | 313 | self.exec_device_cmd_if_possible(cmd) |
... | ... | @@ -331,7 +331,7 @@ class AgentDevice(Agent): |
331 | 331 | # @override superclass (Agent) method |
332 | 332 | def exec_device_cmd_if_possible(self, cmd:AgentCmd): |
333 | 333 | |
334 | - self._set_status(self.STATUS_SPECIFIC_PROCESS) | |
334 | + self.__set_status(self.STATUS_SPECIFIC_PROCESS) | |
335 | 335 | #self.print(f"Starting execution of a DEVICE cmd {cmd}") |
336 | 336 | self.print("Starting execution of a DEVICE cmd...") |
337 | 337 | self.printd(cmd) |
... | ... | @@ -421,7 +421,7 @@ class AgentDevice(Agent): |
421 | 421 | |
422 | 422 | |
423 | 423 | # @override superclass (Agent) |
424 | - def TEST_test_results_other(self, commands): | |
424 | + def _TEST_test_results_other(self, commands): | |
425 | 425 | # (EP) moved from Agent |
426 | 426 | # Now test that any "AD get_xx" following a "AD set_xx value" command has result = value |
427 | 427 | for i,cmd_set in enumerate(commands): |
... | ... | @@ -435,7 +435,7 @@ class AgentDevice(Agent): |
435 | 435 | |
436 | 436 | |
437 | 437 | # @override parent class (Agent) |
438 | - def do_things_before_exit(self, abort_cmd_sender): | |
438 | + def _do_things_before_exit(self, abort_cmd_sender): | |
439 | 439 | self._kill_running_device_cmd_if_exists(abort_cmd_sender) |
440 | 440 | |
441 | 441 | def _kill_running_device_cmd_if_exists(self, abort_cmd_sender): | ... | ... |
src/core/pyros_django/agent/AgentDeviceGemini.py
src/core/pyros_django/agent/AgentDeviceSBIG.py
src/core/pyros_django/agent/AgentMultiRequester.py
... | ... | @@ -293,8 +293,8 @@ class AgentMultiRequester(Agent): |
293 | 293 | self.printd(f"init done") |
294 | 294 | |
295 | 295 | # @override |
296 | - def init(self): | |
297 | - super().init() | |
296 | + def _init(self): | |
297 | + super()._init() | |
298 | 298 | # --- Set the mode according the startmode value |
299 | 299 | ##agent_alias = self.__class__.__name__ |
300 | 300 | ##self.set_mode_from_config(agent_alias) |
... | ... | @@ -403,7 +403,7 @@ class AgentMultiRequester(Agent): |
403 | 403 | ''' |
404 | 404 | |
405 | 405 | # @override |
406 | - def TEST_test_results_main(self, commands): | |
406 | + def _TEST_test_results_main(self, commands): | |
407 | 407 | #nb_asserted = super().simulator_test_results_main(commands) |
408 | 408 | nb_asserted = 0 |
409 | 409 | ''' | ... | ... |
src/core/pyros_django/agent/AgentTelescopeRequester.py
... | ... | @@ -78,8 +78,8 @@ class AgentTelescopeRequester(Agent): |
78 | 78 | self._log.print(f"init done") |
79 | 79 | |
80 | 80 | # @override |
81 | - def init(self): | |
82 | - super().init() | |
81 | + def _init(self): | |
82 | + super()._init() | |
83 | 83 | # --- Set the mode according the startmode value |
84 | 84 | ##agent_alias = self.__class__.__name__ |
85 | 85 | ##self.set_mode_from_config(agent_alias) | ... | ... |
src/core/pyros_django/agent/AgentX.py
... | ... | @@ -9,7 +9,7 @@ import sys |
9 | 9 | #from common.models import Command |
10 | 10 | |
11 | 11 | sys.path.append("..") |
12 | -from agent.Agent import Agent, extract_parameters | |
12 | +from agent.Agent import Agent, __extract_parameters | |
13 | 13 | |
14 | 14 | |
15 | 15 | |
... | ... | @@ -55,8 +55,8 @@ class AgentX(Agent): |
55 | 55 | super().__init__(name, config_filename, RUN_IN_THREAD) |
56 | 56 | |
57 | 57 | # @override |
58 | - def init(self): | |
59 | - super().init() | |
58 | + def _init(self): | |
59 | + super()._init() | |
60 | 60 | # --- Set the mode according the startmode value |
61 | 61 | ##agent_alias = self.__class__.__name__ |
62 | 62 | ##self.set_mode_from_config(agent_alias) |
... | ... | @@ -168,7 +168,7 @@ if __name__ == "__main__": |
168 | 168 | # with process |
169 | 169 | #RUN_IN_THREAD=False |
170 | 170 | |
171 | - TEST_MODE, configfile = extract_parameters() | |
171 | + TEST_MODE, configfile = __extract_parameters() | |
172 | 172 | #agent = AgentX() |
173 | 173 | agent = AgentX("AgentX", configfile, RUN_IN_THREAD) |
174 | 174 | agent.setSimulatorMode(TEST_MODE) | ... | ... |
src/core/pyros_django/agent/doc/AgentDevice_class_diag.pu deleted
... | ... | @@ -1,46 +0,0 @@ |
1 | - | |
2 | -@startuml | |
3 | - | |
4 | -/' | |
5 | -UML class Diagram : can be displayed with PlantUML (plugin for Eclipse or for PyCharm) | |
6 | - | |
7 | -PlantUML: | |
8 | -- How to install : https://projects.irap.omp.eu/projects/pyros/wiki/Project_Development#PlantUML | |
9 | -- Eclipse plugin : http://plantuml.com/eclipse | |
10 | -- class diagrams : http://plantuml.com/class-diagram | |
11 | -- sequence diagrams : http://plantuml.com/sequence-diagram | |
12 | -- state diagrams : http://plantuml.com/state-diagram | |
13 | -- Use Case diagrams : http://plantuml.com/use-case-diagram | |
14 | -- OLD Activity diagrams : http://plantuml.com/activity-diagram-legacy | |
15 | -- NEW Activity diagrams : http://plantuml.com/activity-diagram-beta | |
16 | -- Pre-processing (include...) : http://plantuml.com/preprocessing | |
17 | -- GANTT diagrams : http://plantuml.com/gantt-diagram | |
18 | -- REAL WORLD EXAMPLES !!! : https://real-world-plantuml.com/ | |
19 | -- For Python: | |
20 | - - https://github.com/SamuelMarks/python-plantuml | |
21 | - - https://pythonhosted.org/plantuml/ | |
22 | - | |
23 | -UML diagrams theory : https://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html | |
24 | -'/ | |
25 | - | |
26 | -title | |
27 | -__**AgentDevice class diagram**__ | |
28 | -end title | |
29 | - | |
30 | - | |
31 | - | |
32 | -/' Abstract Devices Controllers '/ | |
33 | - | |
34 | -Agent <|-- AgentDevice | |
35 | -AgentDevice --> DeviceController | |
36 | - | |
37 | -AgentDevice <|-- AgentDeviceTelescopeGemini | |
38 | -AgentDevice <|-- AgentDeviceSBIG | |
39 | - | |
40 | -AgentDeviceTelescopeGemini --> TelescopeGeminiController | |
41 | -TelescopeGeminiController o-- TelescopeGeminiSimulator | |
42 | - | |
43 | -AgentDeviceSBIG --> SBIGController | |
44 | -SBIGController o-- SBIGSimulator | |
45 | - | |
46 | -@enduml |
src/core/pyros_django/agent/doc/AgentDevice_sequence_diag.pu deleted
... | ... | @@ -1,146 +0,0 @@ |
1 | - | |
2 | -@startuml | |
3 | - | |
4 | -' --- Agent SEQUENCE DIAGRAM (plantUML) --- | |
5 | - | |
6 | -' Syntax => http://plantuml.com/fr/sequence-diagram | |
7 | - | |
8 | -' What is the current version of PlantUML (and Java) used ? | |
9 | -' startuml | |
10 | -' version | |
11 | -' enduml | |
12 | - | |
13 | - | |
14 | -title | |
15 | -__**AgentDevice Sequence Diagram (example with AgentDeviceSBIG)**__ | |
16 | -<size:10><i>Version 19-11-2019</i></size> | |
17 | - | |
18 | -end title | |
19 | -'(E. Pallier) | |
20 | - | |
21 | -autonumber | |
22 | - | |
23 | -/' 5 participants (actors) '/ | |
24 | -participant AgentDeviceSBIG | |
25 | -participant DC_SBIG | |
26 | -participant Channel | |
27 | -participant DCC as "DCC (DC_Filter, DC_Shutter, or DC_Sensor...)" | |
28 | -participant SBIG as "DS_SBIG (or real SBIG DEVICE)" #red | |
29 | - | |
30 | - | |
31 | -== _init_(config_filename) # <i>python __init_()</i> == | |
32 | -'group NEW INSTANCE(config_filename) # (python init()) | |
33 | - AgentDeviceSBIG --> AgentDeviceSBIG: Initializes superclass\n (AgentDevice and then Agent)\n with my config_filename,\n my DC class (i.e. DC_SBIG),\n my host and my port | |
34 | - AgentDeviceSBIG --> AgentDeviceSBIG: (Agent:) self.config =\n ConfigPyros(config_filename) | |
35 | - AgentDeviceSBIG --> AgentDeviceSBIG: (Agent:) _set_mode_from_config() | |
36 | -'end | |
37 | - | |
38 | -'group run() # <i>infinite loop</i> | |
39 | - | |
40 | -== run() # <i>infinite loop</i>== | |
41 | - | |
42 | - == run.init() == | |
43 | - 'group init() | |
44 | - 'create DC_SBIG | |
45 | - AgentDeviceSBIG --> DC_SBIG** : Create instance of my DC\n with my host and port | |
46 | - DC_SBIG --> DC_SBIG: initializes superclass\n (DeviceController) with\n my channel_type, protocol,\n commands... | |
47 | - 'create Channel | |
48 | - DC_SBIG --> Channel** : (DeviceController:) my_channel =\n new Channel(channel_type, host, port) | |
49 | - DC_SBIG --> SBIG** : (DeviceController, if simulator mode:)\n Launch simulator DS_SBIG in thread | |
50 | - 'create DCC | |
51 | - DC_SBIG --> DCC** : Create my dcc1, dcc2, ..., dccN instance(s) | |
52 | - DCC --> DCC: Initializes my superclass\n (DeviceController) with\n given DC_SBIG my_channel,\n protocol, commands... | |
53 | - AgentDeviceSBIG --> DC_SBIG: _connect_to_device() | |
54 | - DC_SBIG --> Channel: _my_channel._connect_to_server() | |
55 | - Channel --> SBIG: mysock.connect(HOST, PORT) | |
56 | - 'end group init() | |
57 | - | |
58 | - == run.main_loop() # <i>infinite loop</i> == | |
59 | - 'group main_loop() # <i>infinite loop</i> | |
60 | - AgentDeviceSBIG --> AgentDeviceSBIG: _load_config() # reload only if changed | |
61 | - AgentDeviceSBIG --> AgentDeviceSBIG: _log_agent_status() | |
62 | - group routine_process() | |
63 | - group get_device_status() # <i>DIRECT execution, NO THREAD (see details below in THREAD section)</i> | |
64 | - AgentDeviceSBIG --> DC_SBIG: execute_cmd(ROUTINE_COMMAND) | |
65 | - note left #aqua | |
66 | - DIRECT execution, | |
67 | - NO THREAD | |
68 | - end note | |
69 | - DC_SBIG --> SBIG: REQUEST | |
70 | - ... | |
71 | - 'DC_SBIG <-- SBIG: ANSWER | |
72 | - return ANSWER | |
73 | - AgentDeviceSBIG <-- DC_SBIG: ANSWER | |
74 | - AgentDeviceSBIG --> AgentDeviceSBIG: Save status in DB | |
75 | - end | |
76 | - end | |
77 | - | |
78 | - | |
79 | - group command_process_if_exists() | |
80 | - alt if new COMMAND | |
81 | - | |
82 | - alt AGENT LEVEL COMMAND (i.e. Agent level, immediate short execution, GENERAL or SPECIFIC) | |
83 | - AgentDeviceSBIG --> AgentDeviceSBIG: _exec_agent_cmd(cmd) | |
84 | - | |
85 | - else DEVICE LEVEL COMMAND (i.e. DC level, execution will be in thread) | |
86 | - | |
87 | - group exec_device_cmd_if_possible() | |
88 | - | |
89 | - alt AgentDevice is IDLE => SKIP command (ignored) | |
90 | - | |
91 | - else A device command is already running in a thread => do not execute COMMAND for now (try again at next iteration) | |
92 | - | |
93 | - else COMMAND is not implemented => UnimplementedGenericCmdException | |
94 | - | |
95 | - else ELSE => RUN COMMAND in a THREAD (running _thread_exec_device_cmd() which runs exec_device_cmd(COMMAND)) | |
96 | - AgentDeviceSBIG --> DC_SBIG: execute_cmd(COMMAND) | |
97 | - note left #aqua | |
98 | - EXECUTION | |
99 | - IN A THREAD | |
100 | - end note | |
101 | - | |
102 | - /' in DC_SBIG : '/ | |
103 | - autonumber stop | |
104 | - alt NATIVE COMMAND (i.e. SBIG grammar) | |
105 | - group execute_native_cmd(COMMAND) | |
106 | - DC_SBIG --> SBIG: REQUEST | |
107 | - 'DC_SBIG <-- SBIG: ANSWER | |
108 | - return ANSWER | |
109 | - end group | |
110 | - | |
111 | - else GENERIC COMMAND (i.e. PYROS grammar) | |
112 | - group execute_generic_cmd(COMMAND) | |
113 | - alt COMMAND is GENERAL (i.e. DC_SBIG level) | |
114 | - DC_SBIG --> SBIG: REQUEST | |
115 | - 'DC_SBIG <-- SBIG: ANSWER | |
116 | - return ANSWER | |
117 | - else COMMAND is SPECIFIC (i.e. for one of my dcc's, ex: DC_Filter) | |
118 | - DC_SBIG --> DCC: execute_generic_cmd(COMMAND) | |
119 | - DCC --> SBIG: REQUEST | |
120 | - 'DCC <-- SBIG: ANSWER | |
121 | - return ANSWER | |
122 | - DC_SBIG <-- DCC: ANSWER | |
123 | - end alt | |
124 | - end group | |
125 | - | |
126 | - end alt NATIVE or GENERIC ? | |
127 | - | |
128 | - AgentDeviceSBIG <-- DC_SBIG: ANSWER | |
129 | - | |
130 | - end group RUN COMMAND in a THREAD | |
131 | - | |
132 | - end group exec_device_cmd_if_possible() | |
133 | - | |
134 | - else BAD COMMAND => COMMAND is ignored | |
135 | - | |
136 | - end alt GENERAL or SPECIFIC ? | |
137 | - | |
138 | - end alt new COMMAND ? | |
139 | - end group command_process_if_exists() | |
140 | - | |
141 | - 'end group main_loop() | |
142 | - | |
143 | -'end group run() | |
144 | - | |
145 | - | |
146 | -@enduml |
src/core/pyros_django/agent/doc/Agent_activity_diag_SIMPLE.pu
0 โ 100644
... | ... | @@ -0,0 +1,109 @@ |
1 | + | |
2 | +@startuml | |
3 | + | |
4 | + | |
5 | +' --- Agent & AgentDevice ACTIVIY DIAGRAM (plantUML) --- | |
6 | + | |
7 | +' NEW syntax => http://plantuml.com/fr/activity-diagram-beta | |
8 | +' OLD syntax => http://plantuml.com/fr/activity-diagram-legacy | |
9 | +' (See also https://plantweb.readthedocs.io) | |
10 | +' (See also https://pythonhosted.org/plantuml) | |
11 | + | |
12 | +' What is the current version of PlantUML (and Java) used ? | |
13 | +' startuml | |
14 | +' version | |
15 | +' enduml | |
16 | + | |
17 | +' Exemple de skin utilisable (celui de ChemCam) : | |
18 | +' skinparam activity { | |
19 | +' StartColor red | |
20 | +' EndColor Silver | |
21 | +' BackgroundColor Peru | |
22 | +' BackgroundColor<< Begin >> Olive | |
23 | +' BorderColor Peru | |
24 | +' FontName Impact | |
25 | +' } | |
26 | + | |
27 | +title | |
28 | +__**Agent (Activity Diagram, simplified)**__ | |
29 | +<size:10><i>Version 03-10-2022 (E. Pallier)</i></size> | |
30 | + | |
31 | +end title | |
32 | + | |
33 | + | |
34 | +'|Agent| | |
35 | +start | |
36 | + | |
37 | +skinparam LegendBackgroundColor yellow | |
38 | +skinparam LegendBorderColor red | |
39 | +legend top right | |
40 | + Every important step is logged in database, | |
41 | + with these information : | |
42 | + mode, status, and #iteration | |
43 | +endlegend | |
44 | + | |
45 | + | |
46 | + | |
47 | + | |
48 | +:RESTART = False; | |
49 | +note right | |
50 | + By default, do not restart | |
51 | +end note | |
52 | + | |
53 | +repeat | |
54 | + :load_config(); | |
55 | + :init(); | |
56 | + :MAIN_LOOP = True; | |
57 | + note right | |
58 | + By default, redo main loop | |
59 | + end note | |
60 | + repeat | |
61 | + partition main_loop() { | |
62 | + :reload_config_if_changed(); | |
63 | + ':log_agent_status(); | |
64 | + 'note right | |
65 | + ' Log this agent state in DB : (mode, status, and #iteration) | |
66 | + 'end note | |
67 | + | |
68 | + '#green:routine_process_before(); | |
69 | + :**routine_process_before()**; | |
70 | + note right | |
71 | + Only if NOT in IDLE mode | |
72 | + Only if previous routine_process_before() finished | |
73 | + Only if routine_process_after() finished (can be run in parallel) | |
74 | + end note | |
75 | + | |
76 | + :**exec_next_valid_cmd_if_exists()**; | |
77 | + note right | |
78 | + Only if new command received | |
79 | + Only if previous command finished (can be run in parallel) | |
80 | + Command can be of 3 types : | |
81 | + - Agent General cmd : always executed (sequential exec) | |
82 | + - Agent Specific cmd : only executed if in ATTENTIVE mode | |
83 | + - Other cmd (device) : only executed if in ATTENTIVE mode | |
84 | + Exceptions can be raised : CmdInvalid, CmdUnimplemented, CmdExecError, CmdExecTimeout | |
85 | + end note | |
86 | + | |
87 | + 'if (DO_RESTART or DO_STOP ?) then (yes) | |
88 | + ' :MAIN_LOOP = False; | |
89 | + ' if (DO_RESTART ?) then (yes) | |
90 | + ' :RESTART = True; | |
91 | + ' endif | |
92 | + 'else (no) | |
93 | + '#green:process_routine_after(); | |
94 | + :**process_routine_after()**; | |
95 | + note right | |
96 | + Only if NOT in IDLE mode | |
97 | + Only if previous process_routine_after() finished | |
98 | + Only if routine_process_before() finished (can be run in parallel) | |
99 | + (not executed if cmd was STOP or RESTART, or if exception occurred) | |
100 | + end note | |
101 | + 'endif | |
102 | + | |
103 | + } | |
104 | + repeat while (MAIN_LOOP ?) is (yes) not (no) | |
105 | +repeat while (RESTART ?) is (yes) not (no) | |
106 | + | |
107 | +stop | |
108 | + | |
109 | +@enduml | ... | ... |
src/core/pyros_django/common/doc/models_Command_state_diag.pu
1 | 1 | |
2 | -@startuml | |
2 | +@startuml Command state diagram | |
3 | 3 | |
4 | 4 | ' --- Command STATE DIAGRAM --- |
5 | 5 | ' (see http://plantuml.com/fr/state-diagram) |
6 | 6 | |
7 | 7 | title |
8 | 8 | __**models.Command class : State Diagram**__ |
9 | +<i>Version : 13/09/2022 (EP)</i> | |
9 | 10 | |
10 | 11 | end title |
11 | 12 | |
12 | -[*] --> PENDING : **created by sender** | |
13 | +[*] --> CMD_PENDING : ** cmd created by sender** | |
13 | 14 | |
14 | 15 | ' --- (1) PENDING --- |
15 | -PENDING: + s_deposit_time \n+ r_read_time | |
16 | -PENDING --> RUNNING : **launched** | |
17 | -PENDING --> SKIPPED: **recipient is IDLE** | |
18 | -PENDING --> EXPIRED: **command is too old** | |
19 | -PENDING --> INVALIDATED: **cancelled by sender** | |
16 | +CMD_PENDING: + s_deposit_time \n+ r_read_time | |
20 | 17 | |
21 | -' --- (2) RUNNING, SKIPPED, or EXPIRED --- | |
22 | -RUNNING: + r_start_time | |
23 | -RUNNING --> EXECUTED : **finished** | |
24 | -RUNNING --> KILLED: \l**aborted** \n(by sender or other allowed agent, \nwith command "abort" or "exit") | |
18 | +' Normal case | |
19 | +CMD_PENDING --> CMD_RUNNING : **launched** | |
25 | 20 | |
26 | -SKIPPED: + end_time | |
27 | -SKIPPED --> [*] | |
21 | +' Exception cases | |
22 | +CMD_PENDING --> CMD_INVALID : **invalid cmd** \n(unknown or bad args) | |
23 | +CMD_PENDING --> CMD_UNIMPLEMENTED : **cmd known but**\n **not implemented** | |
24 | +CMD_PENDING --> CMD_SKIPPED: **recipient agent**\n **is IDLE** | |
25 | +CMD_PENDING --> CMD_EXPIRED: **cmd is expired** \n(no more valid) | |
28 | 26 | |
29 | -EXPIRED --> [*] | |
30 | -EXPIRED: + end_time \n+ killer_agent_name | |
27 | +CMD_INVALID: + r_end_time | |
28 | +CMD_INVALID --> [*] | |
31 | 29 | |
32 | -INVALIDATED --> [*] | |
33 | -INVALIDATED: + end_time \n+ killer_agent_name | |
30 | +CMD_UNIMPLEMENTED: + r_end_time | |
31 | +CMD_UNIMPLEMENTED --> [*] | |
34 | 32 | |
35 | -' --- (3) PROCESSED or KILLED --- | |
36 | -EXECUTED: + end_time | |
37 | -EXECUTED --> [*] | |
33 | +CMD_SKIPPED: + r_end_time | |
34 | +CMD_SKIPPED --> [*] | |
38 | 35 | |
39 | -KILLED --> [*] | |
40 | -KILLED: + end_time \n+ killer_agent_name | |
36 | +CMD_EXPIRED: + r_end_time | |
37 | +CMD_EXPIRED --> [*] | |
38 | + | |
39 | + | |
40 | +' --- (2) RUNNING --- | |
41 | +CMD_RUNNING: + r_start_time | |
42 | +CMD_RUNNING --> CMD_EXECUTED : **(OK)**\n **finished** | |
43 | +CMD_RUNNING --> CMD_EXEC_ERROR : **(KO)**\n **execution error** | |
44 | +CMD_RUNNING --> CMD_EXEC_TIMEOUT : **(KO)**\n **execution timeout** | |
45 | +CMD_RUNNING --> CMD_EXEC_KILLED: \l**(KO)**\n **aborted (by other agent)** \n (with "do_stop_current cmd" or "do_stop now") | |
46 | + | |
47 | +' --- PROCESSED or interrupted --- | |
48 | +CMD_EXECUTED: + r_end_time | |
49 | +CMD_EXECUTED --> [*] | |
50 | + | |
51 | +CMD_EXEC_ERROR : + r_end_time | |
52 | +CMD_EXEC_ERROR --> [*] | |
53 | + | |
54 | +CMD_EXEC_TIMEOUT : + r_end_time | |
55 | +CMD_EXEC_TIMEOUT --> [*] | |
56 | + | |
57 | +CMD_EXEC_KILLED: + r_end_time \n+ killer_agent_name | |
58 | +CMD_EXEC_KILLED --> [*] | |
41 | 59 | |
42 | 60 | @enduml | ... | ... |
src/core/pyros_django/routine_manager/doc/ObservationSequence_SO_state_diag.pu
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | |
7 | 7 | title |
8 | 8 | __**Observation Sequence (SO) - State Diagram**__ |
9 | -<size:10><i>Version 7-2-2022 (E. Pallier)</i></size> | |
9 | +<size:10><i>Version 9-2-2022 (E. Pallier)</i></size> | |
10 | 10 | |
11 | 11 | end title |
12 | 12 | |
... | ... | @@ -47,11 +47,10 @@ TBP --> SF07_PLN |
47 | 47 | |
48 | 48 | state SF07_PLN as "SF07-PLN - Observation Sequence Planning" #cyan |
49 | 49 | state PLND as "PLANNED (PLND)": planned for current/coming night |
50 | -state UNPL as "UNPLANNABLE (UNPL)": unplannable \n neither for current/coming night\n neither for next one | |
50 | +state UNPL as "UNPLANNABLE (UNPL)": unplannable for current/coming night | |
51 | 51 | state End_SF07 <<end>> |
52 | 52 | |
53 | -SF07_PLN --> SF07_PLN: **PLAN/SCHEDULE** \n<i>(unplannable for current/coming night, \n <i>but ok for next one) | |
54 | -SF07_PLN --> UNPL: **PLAN/SCHEDULE** | |
53 | +SF07_PLN --> UNPL | |
55 | 54 | UNPL --> End_SF07 |
56 | 55 | SF07_PLN --> PLND: **PLAN/SCHEDULE** |
57 | 56 | |
... | ... | @@ -65,14 +64,14 @@ PLND --> SF08_EXE |
65 | 64 | '/ |
66 | 65 | |
67 | 66 | state SF08_EXE as "SF08-EXE - Observation Sequence Execution" #cyan |
68 | -state E_RUN as "REC_DOING (R_RUN)": Sequence exec running... | |
67 | +state E_RUN as "REC_RUNNING (R_RUN)": Sequence exec running... | |
69 | 68 | state E_CCLD as "REC_STOPPED (R_CCLD)": Sequence exec cancelled |
70 | -state E_END as "REC_DONE (R_END)": Sequence exec finished | |
69 | +state E_END as "REC_FINISHED (R_END)": Sequence exec finished | |
71 | 70 | state can_exec <<choice>> |
72 | 71 | |
73 | 72 | SF08_EXE -d-> can_exec |
74 | 73 | can_exec --> E_RUN: [can be executed]\n **EXEC** |
75 | -can_exec --> TBP: [can't be executed] \n <i>(too late or \n <i>observing conditions not met) | |
74 | +can_exec --> TBP: [can't be executed] \n <i>(too late or \n <i>observing conditions \n not good enough) | |
76 | 75 | |
77 | 76 | E_RUN --> E_CCLD: **exec cancelled** |
78 | 77 | E_CCLD --> TBP: **go back to planning**\n <i>(don't keep incomplete Sequence) |
... | ... | @@ -88,16 +87,12 @@ E_END --> SF11_IPC |
88 | 87 | '/ |
89 | 88 | |
90 | 89 | state SF11_IPC as "SF11-IPC - Sequence Images ProCessing" #cyan |
91 | -state P_RUN as "PROC_DOING (P_RUN)": Sequence process running... | |
92 | -state P_STOP as "PROC_STOPPED (P_STOP)": Sequence process temporarily stopped | |
93 | -state P_CCLD as "PROC_CANCELLED (P_CCLD)": Sequence process definitively cancelled/aborted | |
94 | -state P_END as "PROC_DONE (P_END)": Sequence process finished | |
95 | -state End_SF11 <<end>> | |
90 | +state P_RUN as "PROC_RUNNING (P_RUN)": Sequence process running... | |
91 | +state P_STOP as "PROC_STOPPED (P_STOP)": Sequence process stopped | |
92 | +state P_END as "PROC_FINISHED (P_END)": Sequence process finished | |
96 | 93 | |
97 | 94 | SF11_IPC --> P_RUN: **PROCESS** |
98 | 95 | |
99 | -P_RUN --> P_CCLD: **process cancelled** | |
100 | -P_CCLD --> End_SF11 | |
101 | 96 | P_RUN --> P_STOP: **process stopped** |
102 | 97 | P_STOP --> E_END |
103 | 98 | P_RUN --> P_END: **process finished** |
... | ... | @@ -112,15 +107,11 @@ P_END --> SF12_IAN |
112 | 107 | '/ |
113 | 108 | |
114 | 109 | state SF12_IAN as "SF12-IAN - Sequence Images ANalysis" #cyan |
115 | -state A_RUN as "ANL_DOING (A_RUN)": Sequence analysis running... | |
110 | +state A_RUN as "ANL_RUNNING (A_RUN)": Sequence analysis running... | |
116 | 111 | state A_STOP as "ANL_STOPPED (A_STOP)": Sequence analysis temporarily stopped |
117 | -state A_CCLD as "ANL_CANCELLED (A_CCLD)": Sequence analysis definitively cancelled/aborted | |
118 | -state A_END as "ANL_DONE (A_END)": Sequence analysis finished | |
119 | -state End_SF12 <<end>> | |
112 | +state A_END as "ANL_FINISHED (A_END)": Sequence analysis finished | |
120 | 113 | |
121 | 114 | SF12_IAN --> A_RUN: **ANALYSE** |
122 | -A_RUN --> A_CCLD: **analysis cancelled** | |
123 | -A_CCLD --> End_SF12 | |
124 | 115 | A_RUN --> A_STOP: **process stopped** |
125 | 116 | A_STOP --> P_END |
126 | 117 | A_RUN --> A_END: **analysis finished** |
... | ... | @@ -135,14 +126,11 @@ A_END --> SF13_IAF |
135 | 126 | '/ |
136 | 127 | |
137 | 128 | state SF13_IAF as "SF13-IAF - Sequence Images Archiving & Fetching" #cyan |
138 | -state Z_RUN as "ZIP_DOING (Z_RUN)": Sequence archiving running... | |
129 | +state Z_RUN as "ZIP_RUNNING (Z_RUN)": Sequence archiving running... | |
139 | 130 | state Z_STOP as "ZIP_STOPPED (Z_STOP)": Sequence archiving temporarily stopped |
140 | -state Z_CCLD as "ZIP_CANCELLED (Z_CCLD)": Sequence archiving definitively cancelled/aborted | |
141 | -state Z_END as "ZIP_DONE (Z_END)": Sequence archiving finished | |
131 | +state Z_END as "ZIP_FINISHED (Z_END)": Sequence archiving finished | |
142 | 132 | |
143 | 133 | SF13_IAF --> Z_RUN: **ARCHIVE** |
144 | -Z_RUN --> Z_CCLD: **archiving cancelled** | |
145 | -Z_CCLD --> [*] | |
146 | 134 | Z_RUN --> Z_STOP: **archiving stopped** |
147 | 135 | Z_STOP --> A_END |
148 | 136 | Z_RUN --> Z_END: **archiving finished** | ... | ... |
src/device_controller/concrete_component/gemini/proof_of_concept_for_Protocol.py
... | ... | @@ -63,10 +63,14 @@ class DCGem(DC): |
63 | 63 | self.dc1.encap() |
64 | 64 | |
65 | 65 | |
66 | -dcg = DCGem() | |
67 | -print ("gem toto is", dcg.toto) | |
68 | -print ("dc1 toto is", dcg.dc1.toto) | |
69 | -#dcg.Protoc.encap(dcg) | |
70 | -##dcg.encap() | |
66 | +def main(): | |
67 | + dcg = DCGem() | |
68 | + print ("gem toto is", dcg.toto) | |
69 | + print ("dc1 toto is", dcg.dc1.toto) | |
70 | + #dcg.Protoc.encap(dcg) | |
71 | + ##dcg.encap() | |
71 | 72 | |
72 | 73 | |
74 | +if __name__ == "__main__": | |
75 | + """Comment on Main function execution""" | |
76 | + main() | ... | ... |
src/device_controller/concrete_component/gemini/proof_of_concept_for_logging/proof_of_concept_for_logging.py
... | ... | @@ -70,14 +70,20 @@ def do_logs(): |
70 | 70 | |
71 | 71 | # logger.debug(), info(), warning(), error(), critical() |
72 | 72 | |
73 | -print("\nlevel is DEBUG:") | |
74 | -logger.setLevel(logging.DEBUG) | |
75 | -do_logs() | |
73 | +def main(): | |
74 | + print("\nlevel is DEBUG:") | |
75 | + logger.setLevel(logging.DEBUG) | |
76 | + do_logs() | |
76 | 77 | |
77 | -print("\nlevel is INFO:") | |
78 | -logger.setLevel(logging.INFO) | |
79 | -do_logs() | |
78 | + print("\nlevel is INFO:") | |
79 | + logger.setLevel(logging.INFO) | |
80 | + do_logs() | |
80 | 81 | |
81 | -print("\nlevel is CRITICAL:") | |
82 | -logger.setLevel(logging.CRITICAL) | |
83 | -do_logs() | |
84 | 82 | \ No newline at end of file |
83 | + print("\nlevel is CRITICAL:") | |
84 | + logger.setLevel(logging.CRITICAL) | |
85 | + do_logs() | |
86 | + | |
87 | + | |
88 | +if __name__ == "__main__": | |
89 | + """Comment on Main function execution""" | |
90 | + main() | ... | ... |
src/device_controller/concrete_component/gemini/proof_of_concept_for_multi_inherit.py
... | ... | @@ -74,16 +74,21 @@ class DCSBIG(DCGeneral, DC1,DC2,DC3): |
74 | 74 | print("DCSBIG toto") |
75 | 75 | |
76 | 76 | |
77 | -print(DCSBIG.mro()) | |
78 | -#dc1 = DC1('toto') | |
79 | -#dc1.print_name() | |
80 | -#print(DCGem.__mro__) | |
81 | -dcs = DCSBIG() | |
82 | -dcs.print_name() | |
83 | -print(dcs.a) | |
84 | -print(dcs.b) | |
85 | -dcs.printall() | |
86 | - | |
87 | -# DC1 goto | |
88 | -#dcs.goto() | |
89 | - | |
77 | +def main(): | |
78 | + print(DCSBIG.mro()) | |
79 | + #dc1 = DC1('toto') | |
80 | + #dc1.print_name() | |
81 | + #print(DCGem.__mro__) | |
82 | + dcs = DCSBIG() | |
83 | + dcs.print_name() | |
84 | + print(dcs.a) | |
85 | + print(dcs.b) | |
86 | + dcs.printall() | |
87 | + | |
88 | + # DC1 goto | |
89 | + #dcs.goto() | |
90 | + | |
91 | + | |
92 | +if __name__ == "__main__": | |
93 | + """Comment on Main function execution""" | |
94 | + main() | ... | ... |
src/device_controller/concrete_component/gemini/server_telescope_gemini_simulator_run.py
... | ... | @@ -2,10 +2,12 @@ |
2 | 2 | |
3 | 3 | import sys |
4 | 4 | |
5 | +##sys.path.append("..") | |
6 | +sys.path.append("../..") | |
5 | 7 | |
6 | -sys.path.append("..") | |
8 | +from channels.server_udp_or_tcp import get_SocketServer_UDP_TCP | |
9 | +##from device_simulator_common.server_udp_or_tcp import get_SocketServer_UDP_TCP | |
7 | 10 | #from device_controller.concrete_component.device_simulator_common.server_udp_or_tcp import get_SocketServer_UDP_TCP |
8 | -from device_simulator_common.server_udp_or_tcp import get_SocketServer_UDP_TCP | |
9 | 11 | #from server.server_udp_or_tcp import get_SocketServer_UDP_TCP |
10 | 12 | |
11 | 13 | HOST, PORT = "localhost", 11110 | ... | ... |