isar 1.17.0__tar.gz → 1.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of isar might be problematic. Click here for more details.

Files changed (203) hide show
  1. {isar-1.17.0 → isar-1.18.0}/PKG-INFO +1 -1
  2. {isar-1.17.0 → isar-1.18.0}/src/isar/config/settings.py +3 -0
  3. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/monitor.py +36 -1
  4. {isar-1.17.0 → isar-1.18.0}/src/isar.egg-info/PKG-INFO +1 -1
  5. {isar-1.17.0 → isar-1.18.0}/src/isar.egg-info/SOURCES.txt +0 -1
  6. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/exceptions/robot_exceptions.py +13 -0
  7. isar-1.17.0/.github/workflows/repository_dispatch_on_merge.yml +0 -20
  8. {isar-1.17.0 → isar-1.18.0}/.dockerignore +0 -0
  9. {isar-1.17.0 → isar-1.18.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  10. {isar-1.17.0 → isar-1.18.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  11. {isar-1.17.0 → isar-1.18.0}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  12. {isar-1.17.0 → isar-1.18.0}/.github/release.yml +0 -0
  13. {isar-1.17.0 → isar-1.18.0}/.github/workflows/project_automations.yml +0 -0
  14. {isar-1.17.0 → isar-1.18.0}/.github/workflows/publish_isar_base_image.yml +0 -0
  15. {isar-1.17.0 → isar-1.18.0}/.github/workflows/pythonpackage.yml +0 -0
  16. {isar-1.17.0 → isar-1.18.0}/.github/workflows/pythonpublish.yml +0 -0
  17. {isar-1.17.0 → isar-1.18.0}/.github/workflows/stale.yml +0 -0
  18. {isar-1.17.0 → isar-1.18.0}/.gitignore +0 -0
  19. {isar-1.17.0 → isar-1.18.0}/.pre-commit-config.yaml +0 -0
  20. {isar-1.17.0 → isar-1.18.0}/Dockerfile +0 -0
  21. {isar-1.17.0 → isar-1.18.0}/LICENSE +0 -0
  22. {isar-1.17.0 → isar-1.18.0}/README.md +0 -0
  23. {isar-1.17.0 → isar-1.18.0}/SECURITY.md +0 -0
  24. {isar-1.17.0 → isar-1.18.0}/docker-compose-turtlebot.yml +0 -0
  25. {isar-1.17.0 → isar-1.18.0}/docker-compose.yml +0 -0
  26. {isar-1.17.0 → isar-1.18.0}/docs/Makefile +0 -0
  27. {isar-1.17.0 → isar-1.18.0}/docs/make.bat +0 -0
  28. {isar-1.17.0 → isar-1.18.0}/docs/rst_processing.py +0 -0
  29. {isar-1.17.0 → isar-1.18.0}/docs/source/conf.py +0 -0
  30. {isar-1.17.0 → isar-1.18.0}/docs/source/index.rst +0 -0
  31. {isar-1.17.0 → isar-1.18.0}/docs/source/readme_link.md +0 -0
  32. {isar-1.17.0 → isar-1.18.0}/docs/state_machine_diagram.png +0 -0
  33. {isar-1.17.0 → isar-1.18.0}/main.py +0 -0
  34. {isar-1.17.0 → isar-1.18.0}/pyproject.toml +0 -0
  35. {isar-1.17.0 → isar-1.18.0}/radixconfig.yml +0 -0
  36. {isar-1.17.0 → isar-1.18.0}/setup.cfg +0 -0
  37. {isar-1.17.0 → isar-1.18.0}/setup.py +0 -0
  38. {isar-1.17.0 → isar-1.18.0}/src/isar/__init__.py +0 -0
  39. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/__init__.py +0 -0
  40. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/api.py +0 -0
  41. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/models/__init__.py +0 -0
  42. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/models/models.py +0 -0
  43. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/models/start_mission_definition.py +0 -0
  44. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/schedule/__init__.py +0 -0
  45. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/schedule/scheduling_controller.py +0 -0
  46. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/security/__init__.py +0 -0
  47. {isar-1.17.0 → isar-1.18.0}/src/isar/apis/security/authentication.py +0 -0
  48. {isar-1.17.0 → isar-1.18.0}/src/isar/config/__init__.py +0 -0
  49. {isar-1.17.0 → isar-1.18.0}/src/isar/config/certs/ca-cert.pem +0 -0
  50. {isar-1.17.0 → isar-1.18.0}/src/isar/config/configuration_error.py +0 -0
  51. {isar-1.17.0 → isar-1.18.0}/src/isar/config/keyvault/__init__.py +0 -0
  52. {isar-1.17.0 → isar-1.18.0}/src/isar/config/keyvault/keyvault_error.py +0 -0
  53. {isar-1.17.0 → isar-1.18.0}/src/isar/config/keyvault/keyvault_service.py +0 -0
  54. {isar-1.17.0 → isar-1.18.0}/src/isar/config/log.py +0 -0
  55. {isar-1.17.0 → isar-1.18.0}/src/isar/config/logging.conf +0 -0
  56. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  57. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  58. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/default_map.json +0 -0
  59. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/klab_b.json +0 -0
  60. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/klab_compressor.json +0 -0
  61. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/klab_turtlebot.json +0 -0
  62. {isar-1.17.0 → isar-1.18.0}/src/isar/config/maps/turtleworld.json +0 -0
  63. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  64. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  65. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  66. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  67. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_missions/__init__.py +0 -0
  68. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_missions/default.json +0 -0
  69. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  70. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_poses/__init__.py +0 -0
  71. {isar-1.17.0 → isar-1.18.0}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
  72. {isar-1.17.0 → isar-1.18.0}/src/isar/config/settings.env +0 -0
  73. {isar-1.17.0 → isar-1.18.0}/src/isar/mission_planner/__init__.py +0 -0
  74. {isar-1.17.0 → isar-1.18.0}/src/isar/mission_planner/local_planner.py +0 -0
  75. {isar-1.17.0 → isar-1.18.0}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  76. {isar-1.17.0 → isar-1.18.0}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  77. {isar-1.17.0 → isar-1.18.0}/src/isar/mission_planner/task_selector_interface.py +0 -0
  78. {isar-1.17.0 → isar-1.18.0}/src/isar/models/__init__.py +0 -0
  79. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/__init__.py +0 -0
  80. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/message.py +0 -0
  81. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/queues/__init__.py +0 -0
  82. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/queues/queue_io.py +0 -0
  83. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  84. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/queues/queues.py +0 -0
  85. {isar-1.17.0 → isar-1.18.0}/src/isar/models/communication/queues/status_queue.py +0 -0
  86. {isar-1.17.0 → isar-1.18.0}/src/isar/models/mission_metadata/__init__.py +0 -0
  87. {isar-1.17.0 → isar-1.18.0}/src/isar/modules.py +0 -0
  88. {isar-1.17.0 → isar-1.18.0}/src/isar/services/__init__.py +0 -0
  89. {isar-1.17.0 → isar-1.18.0}/src/isar/services/auth/__init__.py +0 -0
  90. {isar-1.17.0 → isar-1.18.0}/src/isar/services/auth/azure_credentials.py +0 -0
  91. {isar-1.17.0 → isar-1.18.0}/src/isar/services/readers/__init__.py +0 -0
  92. {isar-1.17.0 → isar-1.18.0}/src/isar/services/readers/base_reader.py +0 -0
  93. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/__init__.py +0 -0
  94. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  95. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  96. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  97. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  98. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/mqtt/robot_status_publisher.py +0 -0
  99. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/request_handler.py +0 -0
  100. {isar-1.17.0 → isar-1.18.0}/src/isar/services/service_connections/stid/__init__.py +0 -0
  101. {isar-1.17.0 → isar-1.18.0}/src/isar/services/utilities/__init__.py +0 -0
  102. {isar-1.17.0 → isar-1.18.0}/src/isar/services/utilities/queue_utilities.py +0 -0
  103. {isar-1.17.0 → isar-1.18.0}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  104. {isar-1.17.0 → isar-1.18.0}/src/isar/services/utilities/threaded_request.py +0 -0
  105. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/__init__.py +0 -0
  106. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/state_machine.py +0 -0
  107. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/__init__.py +0 -0
  108. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/idle.py +0 -0
  109. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/initialize.py +0 -0
  110. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/initiate.py +0 -0
  111. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/off.py +0 -0
  112. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/paused.py +0 -0
  113. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states/stop.py +0 -0
  114. {isar-1.17.0 → isar-1.18.0}/src/isar/state_machine/states_enum.py +0 -0
  115. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/__init__.py +0 -0
  116. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/blob_storage.py +0 -0
  117. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/local_storage.py +0 -0
  118. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/slimm_storage.py +0 -0
  119. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/storage_interface.py +0 -0
  120. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/uploader.py +0 -0
  121. {isar-1.17.0 → isar-1.18.0}/src/isar/storage/utilities.py +0 -0
  122. {isar-1.17.0 → isar-1.18.0}/src/isar.egg-info/dependency_links.txt +0 -0
  123. {isar-1.17.0 → isar-1.18.0}/src/isar.egg-info/requires.txt +0 -0
  124. {isar-1.17.0 → isar-1.18.0}/src/isar.egg-info/top_level.txt +0 -0
  125. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/__init__.py +0 -0
  126. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/__init__.py +0 -0
  127. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/exceptions/__init__.py +0 -0
  128. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/initialize/__init__.py +0 -0
  129. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  130. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/inspection/__init__.py +0 -0
  131. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/inspection/inspection.py +0 -0
  132. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/mission/__init__.py +0 -0
  133. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/mission/mission.py +0 -0
  134. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/mission/status.py +0 -0
  135. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/mission/step.py +0 -0
  136. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/mission/task.py +0 -0
  137. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/robots/__init__.py +0 -0
  138. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/models/robots/robot_model.py +0 -0
  139. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/robot_interface.py +0 -0
  140. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/telemetry/__init__.py +0 -0
  141. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  142. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/telemetry/payloads.py +0 -0
  143. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/test_robot_interface.py +0 -0
  144. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/utilities/__init__.py +0 -0
  145. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/utilities/json_service.py +0 -0
  146. {isar-1.17.0 → isar-1.18.0}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  147. {isar-1.17.0 → isar-1.18.0}/tests/__init__.py +0 -0
  148. {isar-1.17.0 → isar-1.18.0}/tests/conftest.py +0 -0
  149. {isar-1.17.0 → isar-1.18.0}/tests/integration/__init__.py +0 -0
  150. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/__init__.py +0 -0
  151. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/config/__init__.py +0 -0
  152. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  153. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  154. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  155. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/config/missions/default.json +0 -0
  156. {isar-1.17.0 → isar-1.18.0}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  157. {isar-1.17.0 → isar-1.18.0}/tests/isar/__init__.py +0 -0
  158. {isar-1.17.0 → isar-1.18.0}/tests/isar/apis/__init__.py +0 -0
  159. {isar-1.17.0 → isar-1.18.0}/tests/isar/apis/scheduler/__init__.py +0 -0
  160. {isar-1.17.0 → isar-1.18.0}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  161. {isar-1.17.0 → isar-1.18.0}/tests/isar/apis/security/__init__.py +0 -0
  162. {isar-1.17.0 → isar-1.18.0}/tests/isar/apis/security/test_authentication.py +0 -0
  163. {isar-1.17.0 → isar-1.18.0}/tests/isar/mission/__init__.py +0 -0
  164. {isar-1.17.0 → isar-1.18.0}/tests/isar/mission/test_mission.py +0 -0
  165. {isar-1.17.0 → isar-1.18.0}/tests/isar/models/__init__.py +0 -0
  166. {isar-1.17.0 → isar-1.18.0}/tests/isar/models/communication/__init__.py +0 -0
  167. {isar-1.17.0 → isar-1.18.0}/tests/isar/models/communication/test_queues.py +0 -0
  168. {isar-1.17.0 → isar-1.18.0}/tests/isar/models/example_mission_definition.json +0 -0
  169. {isar-1.17.0 → isar-1.18.0}/tests/isar/models/test_start_mission_definition.py +0 -0
  170. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/__init__.py +0 -0
  171. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/readers/__init__.py +0 -0
  172. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/readers/test_base_reader.py +0 -0
  173. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/readers/test_mission_reader.py +0 -0
  174. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/service_connections/__init__.py +0 -0
  175. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  176. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  177. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/utilities/__init__.py +0 -0
  178. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  179. {isar-1.17.0 → isar-1.18.0}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  180. {isar-1.17.0 → isar-1.18.0}/tests/isar/state_machine/__init__.py +0 -0
  181. {isar-1.17.0 → isar-1.18.0}/tests/isar/state_machine/states/__init__.py +0 -0
  182. {isar-1.17.0 → isar-1.18.0}/tests/isar/state_machine/states/test_monitor.py +0 -0
  183. {isar-1.17.0 → isar-1.18.0}/tests/isar/state_machine/test_state_machine.py +0 -0
  184. {isar-1.17.0 → isar-1.18.0}/tests/isar/storage/test_blob_storage.py +0 -0
  185. {isar-1.17.0 → isar-1.18.0}/tests/isar/storage/test_uploader.py +0 -0
  186. {isar-1.17.0 → isar-1.18.0}/tests/mocks/__init__.py +0 -0
  187. {isar-1.17.0 → isar-1.18.0}/tests/mocks/blob_storage.py +0 -0
  188. {isar-1.17.0 → isar-1.18.0}/tests/mocks/mission_definition.py +0 -0
  189. {isar-1.17.0 → isar-1.18.0}/tests/mocks/mqtt_client.py +0 -0
  190. {isar-1.17.0 → isar-1.18.0}/tests/mocks/pose.py +0 -0
  191. {isar-1.17.0 → isar-1.18.0}/tests/mocks/request.py +0 -0
  192. {isar-1.17.0 → isar-1.18.0}/tests/mocks/robot_interface.py +0 -0
  193. {isar-1.17.0 → isar-1.18.0}/tests/mocks/status.py +0 -0
  194. {isar-1.17.0 → isar-1.18.0}/tests/mocks/step.py +0 -0
  195. {isar-1.17.0 → isar-1.18.0}/tests/mocks/task.py +0 -0
  196. {isar-1.17.0 → isar-1.18.0}/tests/mocks/token.py +0 -0
  197. {isar-1.17.0 → isar-1.18.0}/tests/test_data/test_json_file.json +0 -0
  198. {isar-1.17.0 → isar-1.18.0}/tests/test_data/test_map_config/test_map_config.json +0 -0
  199. {isar-1.17.0 → isar-1.18.0}/tests/test_data/test_mission_not_working.json +0 -0
  200. {isar-1.17.0 → isar-1.18.0}/tests/test_data/test_mission_working.json +0 -0
  201. {isar-1.17.0 → isar-1.18.0}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  202. {isar-1.17.0 → isar-1.18.0}/tests/test_data/test_thermal_image_mission.json +0 -0
  203. {isar-1.17.0 → isar-1.18.0}/tests/test_modules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.17.0
3
+ Version: 1.18.0
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -56,6 +56,9 @@ class Settings(BaseSettings):
56
56
  # Number of attempts to initiate a step or mission before cancelling
57
57
  INITIATE_FAILURE_COUNTER_LIMIT: int = Field(default=10)
58
58
 
59
+ # Number of attempts to request a step status in monitor before cancelling
60
+ REQUEST_STATUS_FAILURE_COUNTER_LIMIT: int = Field(default=3)
61
+
59
62
  # Number of attempts to stop the robot before giving up
60
63
  STOP_ROBOT_ATTEMPTS_LIMIT: int = Field(default=10)
61
64
 
@@ -7,6 +7,7 @@ from injector import inject
7
7
  from transitions import State
8
8
 
9
9
  from isar.mission_planner.task_selector_interface import TaskSelectorStop
10
+ from isar.config.settings import settings
10
11
  from isar.services.utilities.threaded_request import (
11
12
  ThreadedRequest,
12
13
  ThreadedRequestNotFinishedError,
@@ -17,6 +18,7 @@ from robot_interface.models.exceptions.robot_exceptions import (
17
18
  RobotMissionStatusException,
18
19
  RobotRetrieveInspectionException,
19
20
  RobotStepStatusException,
21
+ RobotCommunicationTimeoutException,
20
22
  )
21
23
  from robot_interface.models.inspection.inspection import Inspection
22
24
  from robot_interface.models.mission.mission import Mission
@@ -32,6 +34,10 @@ class Monitor(State):
32
34
  def __init__(self, state_machine: "StateMachine") -> None:
33
35
  super().__init__(name="monitor", on_enter=self.start, on_exit=self.stop)
34
36
  self.state_machine: "StateMachine" = state_machine
37
+ self.request_status_failure_counter: int = 0
38
+ self.request_status_failure_counter_limit: int = (
39
+ settings.REQUEST_STATUS_FAILURE_COUNTER_LIMIT
40
+ )
35
41
 
36
42
  self.logger = logging.getLogger("state_machine")
37
43
  self.step_status_thread: Optional[ThreadedRequest] = None
@@ -61,7 +67,6 @@ class Monitor(State):
61
67
  status_function=self.state_machine.robot.step_status,
62
68
  thread_name="State Machine Monitor Get Step Status",
63
69
  )
64
-
65
70
  try:
66
71
  status: Union[StepStatus, MissionStatus] = (
67
72
  self.step_status_thread.get_output()
@@ -70,6 +75,34 @@ class Monitor(State):
70
75
  time.sleep(self.state_machine.sleep_time)
71
76
  continue
72
77
 
78
+ except RobotCommunicationTimeoutException as e:
79
+ self.state_machine.current_mission.error_message = ErrorMessage(
80
+ error_reason=e.error_reason, error_description=e.error_description
81
+ )
82
+ self.step_status_thread = None
83
+ self.request_status_failure_counter += 1
84
+ self.logger.warning(
85
+ f"Monitoring step {self.state_machine.current_step.id} failed #: "
86
+ f"{self.request_status_failure_counter} failed because: {e.error_description}"
87
+ )
88
+
89
+ if (
90
+ self.request_status_failure_counter
91
+ >= self.request_status_failure_counter_limit
92
+ ):
93
+ self.state_machine.current_step.error_message = ErrorMessage(
94
+ error_reason=e.error_reason,
95
+ error_description=e.error_description,
96
+ )
97
+ self.logger.error(
98
+ f"Step will be cancelled after failing to get step status "
99
+ f"{self.request_status_failure_counter} times because: "
100
+ f"{e.error_description}"
101
+ )
102
+ status = StepStatus.Failed
103
+ else:
104
+ continue
105
+
73
106
  except RobotStepStatusException as e:
74
107
  self.state_machine.current_step.error_message = ErrorMessage(
75
108
  error_reason=e.error_reason, error_description=e.error_description
@@ -98,6 +131,8 @@ class Monitor(State):
98
131
  f"Retrieving the status failed because: {e.error_description}"
99
132
  )
100
133
 
134
+ self.request_status_failure_counter = 0
135
+
101
136
  if isinstance(status, StepStatus):
102
137
  self.state_machine.current_step.status = status
103
138
  elif isinstance(status, MissionStatus):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.17.0
3
+ Version: 1.18.0
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -20,7 +20,6 @@ setup.py
20
20
  .github/workflows/publish_isar_base_image.yml
21
21
  .github/workflows/pythonpackage.yml
22
22
  .github/workflows/pythonpublish.yml
23
- .github/workflows/repository_dispatch_on_merge.yml
24
23
  .github/workflows/stale.yml
25
24
  docs/Makefile
26
25
  docs/make.bat
@@ -5,6 +5,7 @@ from typing import Optional
5
5
 
6
6
  class ErrorReason(str, Enum):
7
7
  RobotCommunicationException: str = "robot_communication_exception"
8
+ RobotCommunicationTimeoutException: str = "robot_communication_timeout_exception"
8
9
  RobotInfeasibleStepException: str = "robot_infeasible_step_exception"
9
10
  RobotInfeasibleMissionException: str = "robot_infeasible_mission_exception"
10
11
  RobotMissionStatusException: str = "robot_mission_status_exception"
@@ -49,6 +50,18 @@ class RobotCommunicationException(RobotException):
49
50
  pass
50
51
 
51
52
 
53
+ # An exception which should be thrown by the robot package if the communication has timed
54
+ # out and ISAR should retry the request.
55
+ class RobotCommunicationTimeoutException(RobotException):
56
+ def __init__(self, error_description: str) -> None:
57
+ super().__init__(
58
+ error_reason=ErrorReason.RobotCommunicationTimeoutException,
59
+ error_description=error_description,
60
+ )
61
+
62
+ pass
63
+
64
+
52
65
  # An exception which should be thrown by the robot package if it is unable to start the
53
66
  # current step.
54
67
  class RobotInfeasibleStepException(RobotException):
@@ -1,20 +0,0 @@
1
- name: Dispatch to repo
2
- on:
3
- push:
4
- branches:
5
- - main
6
- workflow_dispatch:
7
- jobs:
8
- dispatch:
9
- runs-on: ubuntu-latest
10
- strategy:
11
- matrix:
12
- repo: ["equinor/robotics-deployment"]
13
- steps:
14
- - name: Push to repo
15
- uses: peter-evans/repository-dispatch@v2.0.0
16
- with:
17
- token: ${{ secrets.PAT }}
18
- repository: ${{ matrix.repo }}
19
- event-type: update
20
- client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "module": "isar", "branch": "main"}'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes