isar 1.30.5__tar.gz → 1.31.1__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.
- {isar-1.30.5 → isar-1.31.1}/PKG-INFO +7 -4
- {isar-1.30.5 → isar-1.31.1}/pyproject.toml +6 -3
- isar-1.31.1/requirements.txt +312 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/api.py +7 -51
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/models/models.py +1 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/models/start_mission_definition.py +4 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/robot_control/robot_controller.py +0 -2
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/schedule/scheduling_controller.py +12 -4
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/log.py +8 -29
- isar-1.31.1/src/isar/config/open_telemetry.py +62 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/settings.py +12 -0
- isar-1.31.1/src/isar/eventhandlers/eventhandler.py +93 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/mission_planner/local_planner.py +0 -3
- isar-1.31.1/src/isar/models/events.py +118 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/modules.py +1 -1
- {isar-1.30.5 → isar-1.31.1}/src/isar/robot/robot.py +16 -21
- {isar-1.30.5 → isar-1.31.1}/src/isar/robot/robot_start_mission.py +8 -14
- {isar-1.30.5 → isar-1.31.1}/src/isar/robot/robot_status.py +2 -3
- {isar-1.30.5 → isar-1.31.1}/src/isar/robot/robot_stop_mission.py +3 -9
- {isar-1.30.5 → isar-1.31.1}/src/isar/robot/robot_task_status.py +3 -7
- {isar-1.30.5 → isar-1.31.1}/src/isar/script.py +4 -1
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/utilities/robot_utilities.py +0 -3
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/utilities/scheduling_utilities.py +45 -35
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/state_machine.py +79 -11
- isar-1.31.1/src/isar/state_machine/states/await_next_mission.py +55 -0
- isar-1.31.1/src/isar/state_machine/states/blocked_protective_stop.py +33 -0
- isar-1.31.1/src/isar/state_machine/states/home.py +50 -0
- isar-1.31.1/src/isar/state_machine/states/monitor.py +93 -0
- isar-1.31.1/src/isar/state_machine/states/offline.py +34 -0
- isar-1.31.1/src/isar/state_machine/states/paused.py +30 -0
- isar-1.31.1/src/isar/state_machine/states/returning_home.py +85 -0
- isar-1.31.1/src/isar/state_machine/states/robot_standing_still.py +50 -0
- isar-1.31.1/src/isar/state_machine/states/stopping.py +60 -0
- isar-1.31.1/src/isar/state_machine/states/unknown_status.py +47 -0
- isar-1.31.1/src/isar/state_machine/transitions/functions/pause.py +53 -0
- isar-1.31.1/src/isar/state_machine/transitions/functions/resume.py +56 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/robot_status.py +4 -5
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/stop.py +3 -12
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/mission.py +12 -2
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/return_home.py +1 -1
- isar-1.31.1/src/isar/state_machine/utils/common_event_handlers.py +166 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/storage/blob_storage.py +0 -2
- {isar-1.30.5 → isar-1.31.1}/src/isar/storage/uploader.py +1 -4
- {isar-1.30.5 → isar-1.31.1}/src/isar.egg-info/PKG-INFO +7 -4
- {isar-1.30.5 → isar-1.31.1}/src/isar.egg-info/SOURCES.txt +5 -15
- {isar-1.30.5 → isar-1.31.1}/src/isar.egg-info/requires.txt +6 -3
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/mission/task.py +0 -3
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/robot_interface.py +1 -4
- {isar-1.30.5 → isar-1.31.1}/tests/isar/apis/scheduler/test_scheduler_router.py +38 -4
- isar-1.31.1/tests/isar/models/communication/test_events.py +44 -0
- isar-1.31.1/tests/isar/services/utilities/test_queue_utilities.py +34 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/services/utilities/test_scheduling_utilities.py +4 -6
- {isar-1.30.5 → isar-1.31.1}/tests/isar/state_machine/states/test_monitor.py +9 -5
- {isar-1.30.5 → isar-1.31.1}/tests/isar/state_machine/test_state_machine.py +57 -13
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/robot_interface.py +39 -40
- isar-1.30.5/requirements.txt +0 -196
- isar-1.30.5/src/isar/models/communication/message.py +0 -8
- isar-1.30.5/src/isar/models/communication/queues/events.py +0 -58
- isar-1.30.5/src/isar/models/communication/queues/queue_io.py +0 -12
- isar-1.30.5/src/isar/models/communication/queues/queue_timeout_error.py +0 -2
- isar-1.30.5/src/isar/models/communication/queues/queue_utils.py +0 -38
- isar-1.30.5/src/isar/models/communication/queues/status_queue.py +0 -22
- isar-1.30.5/src/isar/services/utilities/queue_utilities.py +0 -39
- isar-1.30.5/src/isar/state_machine/generic_states/idle.py +0 -133
- isar-1.30.5/src/isar/state_machine/generic_states/ongoing_mission.py +0 -294
- isar-1.30.5/src/isar/state_machine/generic_states/robot_unavailable.py +0 -61
- isar-1.30.5/src/isar/state_machine/states/await_next_mission.py +0 -20
- isar-1.30.5/src/isar/state_machine/states/blocked_protective_stop.py +0 -24
- isar-1.30.5/src/isar/state_machine/states/home.py +0 -19
- isar-1.30.5/src/isar/state_machine/states/monitor.py +0 -24
- isar-1.30.5/src/isar/state_machine/states/offline.py +0 -22
- isar-1.30.5/src/isar/state_machine/states/paused.py +0 -44
- isar-1.30.5/src/isar/state_machine/states/returning_home.py +0 -24
- isar-1.30.5/src/isar/state_machine/states/robot_standing_still.py +0 -20
- isar-1.30.5/src/isar/state_machine/states/stopping.py +0 -75
- isar-1.30.5/src/isar/state_machine/states/unknown_status.py +0 -74
- isar-1.30.5/src/isar/state_machine/transitions/functions/pause.py +0 -24
- isar-1.30.5/src/isar/state_machine/transitions/functions/resume.py +0 -27
- isar-1.30.5/tests/isar/models/communication/test_queues.py +0 -49
- isar-1.30.5/tests/isar/services/utilities/__init__.py +0 -0
- isar-1.30.5/tests/isar/services/utilities/test_queue_utilities.py +0 -38
- isar-1.30.5/tests/isar/state_machine/__init__.py +0 -0
- isar-1.30.5/tests/isar/state_machine/states/__init__.py +0 -0
- isar-1.30.5/tests/test_double/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/.dockerignore +0 -0
- {isar-1.30.5 → isar-1.31.1}/.env.test +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/release.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/workflows/compile_requirements.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/workflows/project_automations.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/workflows/pythonpackage.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/workflows/pythonpublish.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/.github/workflows/stale.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/.gitignore +0 -0
- {isar-1.30.5 → isar-1.31.1}/.pre-commit-config.yaml +0 -0
- {isar-1.30.5 → isar-1.31.1}/LICENSE +0 -0
- {isar-1.30.5 → isar-1.31.1}/README.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/SECURITY.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/Makefile +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/full_state_machine_diagram.png +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/make.bat +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/mission_state_machine_diagram.png +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/robot_status_state_machine_diagram.png +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/rst_processing.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/source/conf.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/source/index.rst +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/source/readme_link.md +0 -0
- {isar-1.30.5 → isar-1.31.1}/docs/update_state_diagram.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/main.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/radixconfig.yml +0 -0
- {isar-1.30.5 → isar-1.31.1}/setup.cfg +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/models/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/schedule/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/security/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/apis/security/authentication.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/certs/ca-cert.pem +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/configuration_error.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/keyvault/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/keyvault/keyvault_error.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/keyvault/keyvault_service.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/logging.conf +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/default_map.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/klab_b.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/klab_compressor.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/klab_turtlebot.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/maps/turtleworld.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_missions/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_missions/default.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/mission_planner/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/mission_planner/mission_planner_interface.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/mission_planner/sequential_task_selector.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/mission_planner/task_selector_interface.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/models/__init__.py +0 -0
- {isar-1.30.5/src/isar/models/communication → isar-1.31.1/src/isar/services}/__init__.py +0 -0
- {isar-1.30.5/src/isar/models/communication/queues → isar-1.31.1/src/isar/services/auth}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/auth/azure_credentials.py +0 -0
- {isar-1.30.5/src/isar/models/mission_metadata → isar-1.31.1/src/isar/services/service_connections}/__init__.py +0 -0
- {isar-1.30.5/src/isar/services → isar-1.31.1/src/isar/services/service_connections/mqtt}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/service_connections/request_handler.py +0 -0
- {isar-1.30.5/src/isar/services/auth → isar-1.31.1/src/isar/services/utilities}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/services/utilities/threaded_request.py +0 -0
- {isar-1.30.5/src/isar/services/service_connections → isar-1.31.1/src/isar/state_machine}/__init__.py +0 -0
- {isar-1.30.5/src/isar/services/service_connections/mqtt → isar-1.31.1/src/isar/state_machine/states}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/states_enum.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/fail_mission.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/finish_mission.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/return_home.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/start_mission.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/functions/utils.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/state_machine/transitions/robot_status.py +0 -0
- {isar-1.30.5/src/isar/services/service_connections/stid → isar-1.31.1/src/isar/storage}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/storage/local_storage.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/storage/storage_interface.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar/storage/utilities.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar.egg-info/dependency_links.txt +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar.egg-info/entry_points.txt +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/isar.egg-info/top_level.txt +0 -0
- {isar-1.30.5/src/isar/services/utilities → isar-1.31.1/src/robot_interface}/__init__.py +0 -0
- {isar-1.30.5/src/isar/state_machine → isar-1.31.1/src/robot_interface/models}/__init__.py +0 -0
- {isar-1.30.5/src/isar/state_machine/states → isar-1.31.1/src/robot_interface/models/exceptions}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
- {isar-1.30.5/src/isar/storage → isar-1.31.1/src/robot_interface/models/initialize}/__init__.py +0 -0
- {isar-1.30.5/src/robot_interface → isar-1.31.1/src/robot_interface/models/inspection}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/inspection/inspection.py +0 -0
- {isar-1.30.5/src/robot_interface/models → isar-1.31.1/src/robot_interface/models/mission}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/mission/mission.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/mission/status.py +0 -0
- {isar-1.30.5/src/robot_interface/models/exceptions → isar-1.31.1/src/robot_interface/models/robots}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/robots/battery_state.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/robots/media.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/models/robots/robot_model.py +0 -0
- {isar-1.30.5/src/robot_interface/models/initialize → isar-1.31.1/src/robot_interface/telemetry}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/telemetry/mqtt_client.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/telemetry/payloads.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/test_robot_interface.py +0 -0
- {isar-1.30.5/src/robot_interface/models/inspection → isar-1.31.1/src/robot_interface/utilities}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/utilities/json_service.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
- {isar-1.30.5/src/robot_interface/models/mission → isar-1.31.1/tests}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/conftest.py +0 -0
- {isar-1.30.5/src/robot_interface/models/robots → isar-1.31.1/tests/integration}/__init__.py +0 -0
- {isar-1.30.5/src/robot_interface/telemetry → isar-1.31.1/tests/integration/turtlebot}/__init__.py +0 -0
- {isar-1.30.5/src/robot_interface/utilities → isar-1.31.1/tests/integration/turtlebot/config}/__init__.py +0 -0
- {isar-1.30.5/tests → isar-1.31.1/tests/integration/turtlebot/config/maps}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
- {isar-1.30.5/tests/integration → isar-1.31.1/tests/integration/turtlebot/config/missions}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/integration/turtlebot/config/missions/default.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/integration/turtlebot/test_successful_mission.py +0 -0
- {isar-1.30.5/tests/integration/turtlebot → isar-1.31.1/tests/isar}/__init__.py +0 -0
- {isar-1.30.5/tests/integration/turtlebot/config → isar-1.31.1/tests/isar/apis}/__init__.py +0 -0
- {isar-1.30.5/tests/integration/turtlebot/config/maps → isar-1.31.1/tests/isar/apis/models}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/apis/models/example_mission_definition.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/apis/models/test_start_mission_definition.py +0 -0
- {isar-1.30.5/tests/integration/turtlebot/config/missions → isar-1.31.1/tests/isar/apis/scheduler}/__init__.py +0 -0
- {isar-1.30.5/tests/isar → isar-1.31.1/tests/isar/apis/security}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/apis/security/test_authentication.py +0 -0
- {isar-1.30.5/tests/isar/apis → isar-1.31.1/tests/isar/mission}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/mission/test_mission.py +0 -0
- {isar-1.30.5/tests/isar/apis → isar-1.31.1/tests/isar}/models/__init__.py +0 -0
- {isar-1.30.5/tests/isar/apis/scheduler → isar-1.31.1/tests/isar/models/communication}/__init__.py +0 -0
- {isar-1.30.5/tests/isar/apis/security → isar-1.31.1/tests/isar/services}/__init__.py +0 -0
- {isar-1.30.5/tests/isar/mission → isar-1.31.1/tests/isar/services/readers}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/services/readers/test_mission_reader.py +0 -0
- {isar-1.30.5/tests/isar/models → isar-1.31.1/tests/isar/services/service_connections}/__init__.py +0 -0
- {isar-1.30.5/tests/isar/models/communication → isar-1.31.1/tests/isar/services/service_connections/echo}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
- {isar-1.30.5/tests/isar/services → isar-1.31.1/tests/isar/services/utilities}/__init__.py +0 -0
- {isar-1.30.5/tests/isar/services/readers → isar-1.31.1/tests/isar/state_machine}/__init__.py +0 -0
- {isar-1.30.5/tests/isar/services/service_connections → isar-1.31.1/tests/isar/state_machine/states}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/storage/test_blob_storage.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/isar/storage/test_uploader.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_data/test_map_config/test_map_config.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_data/test_mission_not_working.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_data/test_mission_working.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_data/test_mission_working_no_tasks.json +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_data/test_thermal_image_mission.json +0 -0
- {isar-1.30.5/tests/isar/services/service_connections/echo → isar-1.31.1/tests/test_double}/__init__.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/blob_storage.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/mission_definition.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/mqtt_client.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/pose.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/request.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/status.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/task.py +0 -0
- {isar-1.30.5 → isar-1.31.1}/tests/test_double/token.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: isar
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.31.1
|
|
4
4
|
Summary: Integration and Supervisory control of Autonomous Robots
|
|
5
5
|
Author-email: Equinor ASA <fg_robots_dev@equinor.com>
|
|
6
6
|
License: Eclipse Public License version 2.0
|
|
@@ -113,9 +113,6 @@ Requires-Dist: fastapi-azure-auth
|
|
|
113
113
|
Requires-Dist: fastapi
|
|
114
114
|
Requires-Dist: dependency-injector
|
|
115
115
|
Requires-Dist: numpy
|
|
116
|
-
Requires-Dist: opencensus-ext-azure
|
|
117
|
-
Requires-Dist: opencensus-ext-logging
|
|
118
|
-
Requires-Dist: opencensus-ext-requests
|
|
119
116
|
Requires-Dist: paho-mqtt
|
|
120
117
|
Requires-Dist: pydantic_settings
|
|
121
118
|
Requires-Dist: pydantic
|
|
@@ -126,6 +123,12 @@ Requires-Dist: requests-toolbelt
|
|
|
126
123
|
Requires-Dist: requests
|
|
127
124
|
Requires-Dist: transitions
|
|
128
125
|
Requires-Dist: uvicorn
|
|
126
|
+
Requires-Dist: opentelemetry-api
|
|
127
|
+
Requires-Dist: opentelemetry-sdk
|
|
128
|
+
Requires-Dist: opentelemetry-exporter-otlp
|
|
129
|
+
Requires-Dist: opentelemetry-instrumentation-fastapi
|
|
130
|
+
Requires-Dist: azure-monitor-opentelemetry
|
|
131
|
+
Requires-Dist: azure-monitor-opentelemetry-exporter>=1.0.0b38
|
|
129
132
|
Provides-Extra: dev
|
|
130
133
|
Requires-Dist: black; extra == "dev"
|
|
131
134
|
Requires-Dist: isort; extra == "dev"
|
|
@@ -36,9 +36,6 @@ dependencies = [
|
|
|
36
36
|
"fastapi",
|
|
37
37
|
"dependency-injector",
|
|
38
38
|
"numpy",
|
|
39
|
-
"opencensus-ext-azure",
|
|
40
|
-
"opencensus-ext-logging",
|
|
41
|
-
"opencensus-ext-requests",
|
|
42
39
|
"paho-mqtt",
|
|
43
40
|
"pydantic_settings",
|
|
44
41
|
"pydantic",
|
|
@@ -49,6 +46,12 @@ dependencies = [
|
|
|
49
46
|
"requests",
|
|
50
47
|
"transitions",
|
|
51
48
|
"uvicorn",
|
|
49
|
+
"opentelemetry-api",
|
|
50
|
+
"opentelemetry-sdk",
|
|
51
|
+
"opentelemetry-exporter-otlp",
|
|
52
|
+
"opentelemetry-instrumentation-fastapi",
|
|
53
|
+
"azure-monitor-opentelemetry",
|
|
54
|
+
"azure-monitor-opentelemetry-exporter>=1.0.0b38",
|
|
52
55
|
]
|
|
53
56
|
dynamic = ["version"]
|
|
54
57
|
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file is autogenerated by pip-compile with Python 3.13
|
|
3
|
+
# by the following command:
|
|
4
|
+
#
|
|
5
|
+
# pip-compile --output-file=requirements.txt pyproject.toml
|
|
6
|
+
#
|
|
7
|
+
alitra==1.1.5
|
|
8
|
+
# via isar (pyproject.toml)
|
|
9
|
+
annotated-types==0.7.0
|
|
10
|
+
# via pydantic
|
|
11
|
+
anyio==4.9.0
|
|
12
|
+
# via
|
|
13
|
+
# httpx
|
|
14
|
+
# starlette
|
|
15
|
+
asgiref==3.9.1
|
|
16
|
+
# via opentelemetry-instrumentation-asgi
|
|
17
|
+
azure-core==1.35.0
|
|
18
|
+
# via
|
|
19
|
+
# azure-core-tracing-opentelemetry
|
|
20
|
+
# azure-identity
|
|
21
|
+
# azure-keyvault-secrets
|
|
22
|
+
# azure-monitor-opentelemetry
|
|
23
|
+
# azure-monitor-opentelemetry-exporter
|
|
24
|
+
# azure-storage-blob
|
|
25
|
+
# msrest
|
|
26
|
+
azure-core-tracing-opentelemetry==1.0.0b12
|
|
27
|
+
# via azure-monitor-opentelemetry
|
|
28
|
+
azure-identity==1.23.1
|
|
29
|
+
# via
|
|
30
|
+
# azure-monitor-opentelemetry-exporter
|
|
31
|
+
# isar (pyproject.toml)
|
|
32
|
+
azure-keyvault-secrets==4.10.0
|
|
33
|
+
# via isar (pyproject.toml)
|
|
34
|
+
azure-monitor-opentelemetry==1.6.13
|
|
35
|
+
# via isar (pyproject.toml)
|
|
36
|
+
azure-monitor-opentelemetry-exporter==1.0.0b40
|
|
37
|
+
# via
|
|
38
|
+
# azure-monitor-opentelemetry
|
|
39
|
+
# isar (pyproject.toml)
|
|
40
|
+
azure-storage-blob==12.26.0
|
|
41
|
+
# via isar (pyproject.toml)
|
|
42
|
+
backoff==2.2.1
|
|
43
|
+
# via isar (pyproject.toml)
|
|
44
|
+
certifi==2025.7.14
|
|
45
|
+
# via
|
|
46
|
+
# httpcore
|
|
47
|
+
# httpx
|
|
48
|
+
# msrest
|
|
49
|
+
# requests
|
|
50
|
+
cffi==1.17.1
|
|
51
|
+
# via cryptography
|
|
52
|
+
charset-normalizer==3.4.2
|
|
53
|
+
# via requests
|
|
54
|
+
click==8.2.1
|
|
55
|
+
# via
|
|
56
|
+
# isar (pyproject.toml)
|
|
57
|
+
# uvicorn
|
|
58
|
+
cryptography==45.0.5
|
|
59
|
+
# via
|
|
60
|
+
# azure-identity
|
|
61
|
+
# azure-storage-blob
|
|
62
|
+
# fastapi-azure-auth
|
|
63
|
+
# msal
|
|
64
|
+
# pyjwt
|
|
65
|
+
dacite==1.9.2
|
|
66
|
+
# via
|
|
67
|
+
# alitra
|
|
68
|
+
# isar (pyproject.toml)
|
|
69
|
+
dependency-injector==4.48.1
|
|
70
|
+
# via isar (pyproject.toml)
|
|
71
|
+
fastapi==0.116.1
|
|
72
|
+
# via
|
|
73
|
+
# fastapi-azure-auth
|
|
74
|
+
# isar (pyproject.toml)
|
|
75
|
+
fastapi-azure-auth==5.2.0
|
|
76
|
+
# via isar (pyproject.toml)
|
|
77
|
+
fixedint==0.1.6
|
|
78
|
+
# via azure-monitor-opentelemetry-exporter
|
|
79
|
+
googleapis-common-protos==1.70.0
|
|
80
|
+
# via
|
|
81
|
+
# opentelemetry-exporter-otlp-proto-grpc
|
|
82
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
83
|
+
grpcio==1.74.0
|
|
84
|
+
# via opentelemetry-exporter-otlp-proto-grpc
|
|
85
|
+
h11==0.16.0
|
|
86
|
+
# via
|
|
87
|
+
# httpcore
|
|
88
|
+
# uvicorn
|
|
89
|
+
httpcore==1.0.9
|
|
90
|
+
# via httpx
|
|
91
|
+
httpx==0.28.1
|
|
92
|
+
# via fastapi-azure-auth
|
|
93
|
+
idna==3.10
|
|
94
|
+
# via
|
|
95
|
+
# anyio
|
|
96
|
+
# httpx
|
|
97
|
+
# requests
|
|
98
|
+
importlib-metadata==8.7.0
|
|
99
|
+
# via opentelemetry-api
|
|
100
|
+
isodate==0.7.2
|
|
101
|
+
# via
|
|
102
|
+
# azure-keyvault-secrets
|
|
103
|
+
# azure-storage-blob
|
|
104
|
+
# msrest
|
|
105
|
+
msal==1.33.0
|
|
106
|
+
# via
|
|
107
|
+
# azure-identity
|
|
108
|
+
# msal-extensions
|
|
109
|
+
msal-extensions==1.3.1
|
|
110
|
+
# via azure-identity
|
|
111
|
+
msrest==0.7.1
|
|
112
|
+
# via azure-monitor-opentelemetry-exporter
|
|
113
|
+
numpy==2.3.2
|
|
114
|
+
# via
|
|
115
|
+
# alitra
|
|
116
|
+
# isar (pyproject.toml)
|
|
117
|
+
# scipy
|
|
118
|
+
oauthlib==3.3.1
|
|
119
|
+
# via requests-oauthlib
|
|
120
|
+
opentelemetry-api==1.36.0
|
|
121
|
+
# via
|
|
122
|
+
# azure-core-tracing-opentelemetry
|
|
123
|
+
# azure-monitor-opentelemetry-exporter
|
|
124
|
+
# isar (pyproject.toml)
|
|
125
|
+
# opentelemetry-exporter-otlp-proto-grpc
|
|
126
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
127
|
+
# opentelemetry-instrumentation
|
|
128
|
+
# opentelemetry-instrumentation-asgi
|
|
129
|
+
# opentelemetry-instrumentation-dbapi
|
|
130
|
+
# opentelemetry-instrumentation-django
|
|
131
|
+
# opentelemetry-instrumentation-fastapi
|
|
132
|
+
# opentelemetry-instrumentation-flask
|
|
133
|
+
# opentelemetry-instrumentation-psycopg2
|
|
134
|
+
# opentelemetry-instrumentation-requests
|
|
135
|
+
# opentelemetry-instrumentation-urllib
|
|
136
|
+
# opentelemetry-instrumentation-urllib3
|
|
137
|
+
# opentelemetry-instrumentation-wsgi
|
|
138
|
+
# opentelemetry-sdk
|
|
139
|
+
# opentelemetry-semantic-conventions
|
|
140
|
+
opentelemetry-exporter-otlp==1.36.0
|
|
141
|
+
# via isar (pyproject.toml)
|
|
142
|
+
opentelemetry-exporter-otlp-proto-common==1.36.0
|
|
143
|
+
# via
|
|
144
|
+
# opentelemetry-exporter-otlp-proto-grpc
|
|
145
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
146
|
+
opentelemetry-exporter-otlp-proto-grpc==1.36.0
|
|
147
|
+
# via opentelemetry-exporter-otlp
|
|
148
|
+
opentelemetry-exporter-otlp-proto-http==1.36.0
|
|
149
|
+
# via opentelemetry-exporter-otlp
|
|
150
|
+
opentelemetry-instrumentation==0.57b0
|
|
151
|
+
# via
|
|
152
|
+
# opentelemetry-instrumentation-asgi
|
|
153
|
+
# opentelemetry-instrumentation-dbapi
|
|
154
|
+
# opentelemetry-instrumentation-django
|
|
155
|
+
# opentelemetry-instrumentation-fastapi
|
|
156
|
+
# opentelemetry-instrumentation-flask
|
|
157
|
+
# opentelemetry-instrumentation-psycopg2
|
|
158
|
+
# opentelemetry-instrumentation-requests
|
|
159
|
+
# opentelemetry-instrumentation-urllib
|
|
160
|
+
# opentelemetry-instrumentation-urllib3
|
|
161
|
+
# opentelemetry-instrumentation-wsgi
|
|
162
|
+
opentelemetry-instrumentation-asgi==0.57b0
|
|
163
|
+
# via opentelemetry-instrumentation-fastapi
|
|
164
|
+
opentelemetry-instrumentation-dbapi==0.57b0
|
|
165
|
+
# via opentelemetry-instrumentation-psycopg2
|
|
166
|
+
opentelemetry-instrumentation-django==0.57b0
|
|
167
|
+
# via azure-monitor-opentelemetry
|
|
168
|
+
opentelemetry-instrumentation-fastapi==0.57b0
|
|
169
|
+
# via
|
|
170
|
+
# azure-monitor-opentelemetry
|
|
171
|
+
# isar (pyproject.toml)
|
|
172
|
+
opentelemetry-instrumentation-flask==0.57b0
|
|
173
|
+
# via azure-monitor-opentelemetry
|
|
174
|
+
opentelemetry-instrumentation-psycopg2==0.57b0
|
|
175
|
+
# via azure-monitor-opentelemetry
|
|
176
|
+
opentelemetry-instrumentation-requests==0.57b0
|
|
177
|
+
# via azure-monitor-opentelemetry
|
|
178
|
+
opentelemetry-instrumentation-urllib==0.57b0
|
|
179
|
+
# via azure-monitor-opentelemetry
|
|
180
|
+
opentelemetry-instrumentation-urllib3==0.57b0
|
|
181
|
+
# via azure-monitor-opentelemetry
|
|
182
|
+
opentelemetry-instrumentation-wsgi==0.57b0
|
|
183
|
+
# via
|
|
184
|
+
# opentelemetry-instrumentation-django
|
|
185
|
+
# opentelemetry-instrumentation-flask
|
|
186
|
+
opentelemetry-proto==1.36.0
|
|
187
|
+
# via
|
|
188
|
+
# opentelemetry-exporter-otlp-proto-common
|
|
189
|
+
# opentelemetry-exporter-otlp-proto-grpc
|
|
190
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
191
|
+
opentelemetry-resource-detector-azure==0.1.5
|
|
192
|
+
# via azure-monitor-opentelemetry
|
|
193
|
+
opentelemetry-sdk==1.36.0
|
|
194
|
+
# via
|
|
195
|
+
# azure-monitor-opentelemetry
|
|
196
|
+
# azure-monitor-opentelemetry-exporter
|
|
197
|
+
# isar (pyproject.toml)
|
|
198
|
+
# opentelemetry-exporter-otlp-proto-grpc
|
|
199
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
200
|
+
# opentelemetry-resource-detector-azure
|
|
201
|
+
opentelemetry-semantic-conventions==0.57b0
|
|
202
|
+
# via
|
|
203
|
+
# opentelemetry-instrumentation
|
|
204
|
+
# opentelemetry-instrumentation-asgi
|
|
205
|
+
# opentelemetry-instrumentation-dbapi
|
|
206
|
+
# opentelemetry-instrumentation-django
|
|
207
|
+
# opentelemetry-instrumentation-fastapi
|
|
208
|
+
# opentelemetry-instrumentation-flask
|
|
209
|
+
# opentelemetry-instrumentation-requests
|
|
210
|
+
# opentelemetry-instrumentation-urllib
|
|
211
|
+
# opentelemetry-instrumentation-urllib3
|
|
212
|
+
# opentelemetry-instrumentation-wsgi
|
|
213
|
+
# opentelemetry-sdk
|
|
214
|
+
opentelemetry-util-http==0.57b0
|
|
215
|
+
# via
|
|
216
|
+
# opentelemetry-instrumentation-asgi
|
|
217
|
+
# opentelemetry-instrumentation-django
|
|
218
|
+
# opentelemetry-instrumentation-fastapi
|
|
219
|
+
# opentelemetry-instrumentation-flask
|
|
220
|
+
# opentelemetry-instrumentation-requests
|
|
221
|
+
# opentelemetry-instrumentation-urllib
|
|
222
|
+
# opentelemetry-instrumentation-urllib3
|
|
223
|
+
# opentelemetry-instrumentation-wsgi
|
|
224
|
+
packaging==25.0
|
|
225
|
+
# via
|
|
226
|
+
# opentelemetry-instrumentation
|
|
227
|
+
# opentelemetry-instrumentation-flask
|
|
228
|
+
paho-mqtt==2.1.0
|
|
229
|
+
# via isar (pyproject.toml)
|
|
230
|
+
protobuf==6.31.1
|
|
231
|
+
# via
|
|
232
|
+
# googleapis-common-protos
|
|
233
|
+
# opentelemetry-proto
|
|
234
|
+
psutil==7.0.0
|
|
235
|
+
# via azure-monitor-opentelemetry-exporter
|
|
236
|
+
pycparser==2.22
|
|
237
|
+
# via cffi
|
|
238
|
+
pydantic==2.11.7
|
|
239
|
+
# via
|
|
240
|
+
# fastapi
|
|
241
|
+
# isar (pyproject.toml)
|
|
242
|
+
# pydantic-settings
|
|
243
|
+
pydantic-core==2.33.2
|
|
244
|
+
# via pydantic
|
|
245
|
+
pydantic-settings==2.10.1
|
|
246
|
+
# via isar (pyproject.toml)
|
|
247
|
+
pyjwt[crypto]==2.10.1
|
|
248
|
+
# via
|
|
249
|
+
# fastapi-azure-auth
|
|
250
|
+
# isar (pyproject.toml)
|
|
251
|
+
# msal
|
|
252
|
+
python-dotenv==1.1.1
|
|
253
|
+
# via
|
|
254
|
+
# isar (pyproject.toml)
|
|
255
|
+
# pydantic-settings
|
|
256
|
+
pyyaml==6.0.2
|
|
257
|
+
# via isar (pyproject.toml)
|
|
258
|
+
requests==2.32.4
|
|
259
|
+
# via
|
|
260
|
+
# azure-core
|
|
261
|
+
# isar (pyproject.toml)
|
|
262
|
+
# msal
|
|
263
|
+
# msrest
|
|
264
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
265
|
+
# requests-oauthlib
|
|
266
|
+
# requests-toolbelt
|
|
267
|
+
requests-oauthlib==2.0.0
|
|
268
|
+
# via msrest
|
|
269
|
+
requests-toolbelt==1.0.0
|
|
270
|
+
# via isar (pyproject.toml)
|
|
271
|
+
scipy==1.16.1
|
|
272
|
+
# via alitra
|
|
273
|
+
six==1.17.0
|
|
274
|
+
# via
|
|
275
|
+
# azure-core
|
|
276
|
+
# transitions
|
|
277
|
+
sniffio==1.3.1
|
|
278
|
+
# via anyio
|
|
279
|
+
starlette==0.47.2
|
|
280
|
+
# via fastapi
|
|
281
|
+
transitions==0.9.3
|
|
282
|
+
# via isar (pyproject.toml)
|
|
283
|
+
typing-extensions==4.14.1
|
|
284
|
+
# via
|
|
285
|
+
# azure-core
|
|
286
|
+
# azure-identity
|
|
287
|
+
# azure-keyvault-secrets
|
|
288
|
+
# azure-storage-blob
|
|
289
|
+
# fastapi
|
|
290
|
+
# opentelemetry-api
|
|
291
|
+
# opentelemetry-exporter-otlp-proto-grpc
|
|
292
|
+
# opentelemetry-exporter-otlp-proto-http
|
|
293
|
+
# opentelemetry-sdk
|
|
294
|
+
# opentelemetry-semantic-conventions
|
|
295
|
+
# pydantic
|
|
296
|
+
# pydantic-core
|
|
297
|
+
# typing-inspection
|
|
298
|
+
typing-inspection==0.4.1
|
|
299
|
+
# via
|
|
300
|
+
# pydantic
|
|
301
|
+
# pydantic-settings
|
|
302
|
+
urllib3==2.5.0
|
|
303
|
+
# via requests
|
|
304
|
+
uvicorn==0.35.0
|
|
305
|
+
# via isar (pyproject.toml)
|
|
306
|
+
wrapt==1.17.2
|
|
307
|
+
# via
|
|
308
|
+
# opentelemetry-instrumentation
|
|
309
|
+
# opentelemetry-instrumentation-dbapi
|
|
310
|
+
# opentelemetry-instrumentation-urllib3
|
|
311
|
+
zipp==3.23.0
|
|
312
|
+
# via importlib-metadata
|
|
@@ -8,35 +8,23 @@ from typing import List, Union
|
|
|
8
8
|
|
|
9
9
|
import click
|
|
10
10
|
import uvicorn
|
|
11
|
-
from
|
|
12
|
-
from fastapi import FastAPI, Request, Security
|
|
11
|
+
from fastapi import FastAPI, Security
|
|
13
12
|
from fastapi.middleware.cors import CORSMiddleware
|
|
14
13
|
from fastapi.routing import APIRouter
|
|
15
|
-
from opencensus.ext.azure.trace_exporter import AzureExporter
|
|
16
|
-
from opencensus.trace.attributes_helper import COMMON_ATTRIBUTES
|
|
17
|
-
from opencensus.trace.samplers import ProbabilitySampler
|
|
18
|
-
from opencensus.trace.span import SpanKind
|
|
19
|
-
from opencensus.trace.tracer import Tracer
|
|
20
14
|
from pydantic import AnyHttpUrl
|
|
21
15
|
|
|
22
16
|
from isar.apis.models.models import ControlMissionResponse, StartMissionResponse
|
|
23
17
|
from isar.apis.robot_control.robot_controller import RobotController
|
|
24
18
|
from isar.apis.schedule.scheduling_controller import SchedulingController
|
|
25
19
|
from isar.apis.security.authentication import Authenticator
|
|
26
|
-
from isar.config.configuration_error import ConfigurationError
|
|
27
|
-
from isar.config.keyvault.keyvault_error import KeyvaultError
|
|
28
20
|
from isar.config.keyvault.keyvault_service import Keyvault
|
|
29
21
|
from isar.config.settings import settings
|
|
30
22
|
from robot_interface.telemetry.mqtt_client import MqttClientInterface
|
|
31
23
|
from robot_interface.telemetry.payloads import StartUpMessagePayload
|
|
32
24
|
from robot_interface.utilities.json_service import EnhancedJSONEncoder
|
|
33
25
|
|
|
34
|
-
HTTP_URL = COMMON_ATTRIBUTES["HTTP_URL"]
|
|
35
|
-
HTTP_STATUS_CODE = COMMON_ATTRIBUTES["HTTP_STATUS_CODE"]
|
|
36
|
-
|
|
37
26
|
|
|
38
27
|
class API:
|
|
39
|
-
@inject
|
|
40
28
|
def __init__(
|
|
41
29
|
self,
|
|
42
30
|
authenticator: Authenticator,
|
|
@@ -45,7 +33,6 @@ class API:
|
|
|
45
33
|
keyvault: Keyvault,
|
|
46
34
|
mqtt_publisher: MqttClientInterface,
|
|
47
35
|
port: int = settings.API_PORT,
|
|
48
|
-
azure_ai_logging_enabled: bool = settings.LOG_HANDLER_APPLICATION_INSIGHTS_ENABLED,
|
|
49
36
|
) -> None:
|
|
50
37
|
self.authenticator: Authenticator = authenticator
|
|
51
38
|
self.scheduling_controller: SchedulingController = scheduling_controller
|
|
@@ -53,7 +40,6 @@ class API:
|
|
|
53
40
|
self.keyvault: Keyvault = keyvault
|
|
54
41
|
self.host: str = "0.0.0.0" # Locking uvicorn to use 0.0.0.0
|
|
55
42
|
self.port: int = port
|
|
56
|
-
self.azure_ai_logging_enabled: bool = azure_ai_logging_enabled
|
|
57
43
|
self.mqtt_publisher: MqttClientInterface = mqtt_publisher
|
|
58
44
|
|
|
59
45
|
self.logger: Logger = logging.getLogger("api")
|
|
@@ -113,9 +99,6 @@ class API:
|
|
|
113
99
|
allow_headers=["*"],
|
|
114
100
|
)
|
|
115
101
|
|
|
116
|
-
if self.azure_ai_logging_enabled:
|
|
117
|
-
self._add_request_logging_middleware(app)
|
|
118
|
-
|
|
119
102
|
app.include_router(router=self._create_scheduler_router())
|
|
120
103
|
|
|
121
104
|
app.include_router(router=self._create_info_router())
|
|
@@ -210,9 +193,15 @@ class API:
|
|
|
210
193
|
"description": "Mission succesfully stopped",
|
|
211
194
|
"model": ControlMissionResponse,
|
|
212
195
|
},
|
|
196
|
+
HTTPStatus.UNPROCESSABLE_ENTITY.value: {
|
|
197
|
+
"description": "Invalid body - The JSON is incorrect",
|
|
198
|
+
},
|
|
213
199
|
HTTPStatus.CONFLICT.value: {
|
|
214
200
|
"description": "Conflict - Invalid command in the current state",
|
|
215
201
|
},
|
|
202
|
+
HTTPStatus.BAD_REQUEST.value: {
|
|
203
|
+
"description": "Bad request - Robot does not have the capabilities to perform the mission",
|
|
204
|
+
},
|
|
216
205
|
HTTPStatus.INTERNAL_SERVER_ERROR.value: {
|
|
217
206
|
"description": "Internal Server Error - Current state of state machine unknown",
|
|
218
207
|
},
|
|
@@ -336,39 +325,6 @@ class API:
|
|
|
336
325
|
extra={"color_message": color_message},
|
|
337
326
|
)
|
|
338
327
|
|
|
339
|
-
def _add_request_logging_middleware(self, app: FastAPI) -> None:
|
|
340
|
-
connection_string: str
|
|
341
|
-
try:
|
|
342
|
-
connection_string = self.keyvault.get_secret(
|
|
343
|
-
"application-insights-connection-string"
|
|
344
|
-
).value
|
|
345
|
-
except KeyvaultError:
|
|
346
|
-
message: str = (
|
|
347
|
-
"Missing connection string for Application Insights in key vault. "
|
|
348
|
-
)
|
|
349
|
-
self.logger.critical(message)
|
|
350
|
-
raise ConfigurationError(message)
|
|
351
|
-
|
|
352
|
-
@app.middleware("http")
|
|
353
|
-
async def middlewareOpencensus(request: Request, call_next):
|
|
354
|
-
tracer = Tracer(
|
|
355
|
-
exporter=AzureExporter(connection_string=connection_string),
|
|
356
|
-
sampler=ProbabilitySampler(1.0),
|
|
357
|
-
)
|
|
358
|
-
with tracer.span("main") as span:
|
|
359
|
-
span.span_kind = SpanKind.SERVER
|
|
360
|
-
|
|
361
|
-
response = await call_next(request)
|
|
362
|
-
|
|
363
|
-
tracer.add_attribute_to_current_span(
|
|
364
|
-
attribute_key=HTTP_STATUS_CODE, attribute_value=response.status_code
|
|
365
|
-
)
|
|
366
|
-
tracer.add_attribute_to_current_span(
|
|
367
|
-
attribute_key=HTTP_URL, attribute_value=str(request.url)
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
return response
|
|
371
|
-
|
|
372
328
|
def _publish_startup_message(self) -> None:
|
|
373
329
|
if not self.mqtt_publisher:
|
|
374
330
|
return
|
|
@@ -58,6 +58,10 @@ class StartMissionDefinition(BaseModel):
|
|
|
58
58
|
start_pose: Optional[InputPose] = None
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
class StopMissionDefinition(BaseModel):
|
|
62
|
+
mission_id: Optional[str] = None
|
|
63
|
+
|
|
64
|
+
|
|
61
65
|
def to_isar_mission(
|
|
62
66
|
start_mission_definition: StartMissionDefinition,
|
|
63
67
|
) -> Mission:
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from dependency_injector.wiring import inject
|
|
4
3
|
from fastapi import HTTPException
|
|
5
4
|
|
|
6
5
|
from isar.apis.models.models import RobotInfoResponse
|
|
@@ -10,7 +9,6 @@ from robot_interface.models.robots.media import MediaConfig
|
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
class RobotController:
|
|
13
|
-
@inject
|
|
14
12
|
def __init__(
|
|
15
13
|
self,
|
|
16
14
|
robot_utilities: RobotUtilities,
|
|
@@ -2,7 +2,6 @@ import logging
|
|
|
2
2
|
from http import HTTPStatus
|
|
3
3
|
from threading import Lock
|
|
4
4
|
|
|
5
|
-
from dependency_injector.wiring import inject
|
|
6
5
|
from fastapi import Body, HTTPException, Path
|
|
7
6
|
|
|
8
7
|
from isar.apis.models.models import (
|
|
@@ -12,6 +11,7 @@ from isar.apis.models.models import (
|
|
|
12
11
|
)
|
|
13
12
|
from isar.apis.models.start_mission_definition import (
|
|
14
13
|
StartMissionDefinition,
|
|
14
|
+
StopMissionDefinition,
|
|
15
15
|
to_isar_mission,
|
|
16
16
|
)
|
|
17
17
|
from isar.config.settings import robot_settings, settings
|
|
@@ -23,7 +23,6 @@ from robot_interface.models.mission.task import TASKS, InspectionTask, MoveArm
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class SchedulingController:
|
|
26
|
-
@inject
|
|
27
26
|
def __init__(
|
|
28
27
|
self,
|
|
29
28
|
scheduling_utilities: SchedulingUtilities,
|
|
@@ -179,7 +178,16 @@ class SchedulingController:
|
|
|
179
178
|
)
|
|
180
179
|
return resume_mission_response
|
|
181
180
|
|
|
182
|
-
def stop_mission(
|
|
181
|
+
def stop_mission(
|
|
182
|
+
self,
|
|
183
|
+
mission_id: StopMissionDefinition = Body(
|
|
184
|
+
default=None,
|
|
185
|
+
embed=True,
|
|
186
|
+
title="Mission ID to stop",
|
|
187
|
+
description="The mission ID of the mission being stopped, in json format",
|
|
188
|
+
),
|
|
189
|
+
) -> ControlMissionResponse:
|
|
190
|
+
|
|
183
191
|
self.logger.info("Received request to stop current mission")
|
|
184
192
|
|
|
185
193
|
state: States = self.scheduling_utilities.get_state()
|
|
@@ -198,7 +206,7 @@ class SchedulingController:
|
|
|
198
206
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
199
207
|
|
|
200
208
|
stop_mission_response: ControlMissionResponse = (
|
|
201
|
-
self.scheduling_utilities.stop_mission()
|
|
209
|
+
self.scheduling_utilities.stop_mission(mission_id.mission_id)
|
|
202
210
|
)
|
|
203
211
|
return stop_mission_response
|
|
204
212
|
|
|
@@ -3,30 +3,21 @@ import logging.config
|
|
|
3
3
|
from importlib.resources import as_file, files
|
|
4
4
|
|
|
5
5
|
import yaml
|
|
6
|
-
from opencensus.ext.azure.log_exporter import AzureLogHandler
|
|
7
6
|
from uvicorn.logging import ColourizedFormatter
|
|
8
7
|
|
|
9
|
-
from isar.config.configuration_error import ConfigurationError
|
|
10
|
-
from isar.config.keyvault.keyvault_error import KeyvaultError
|
|
11
8
|
from isar.config.keyvault.keyvault_service import Keyvault
|
|
12
9
|
from isar.config.settings import settings
|
|
13
10
|
|
|
14
11
|
|
|
15
12
|
def setup_loggers(keyvault: Keyvault) -> None:
|
|
16
13
|
log_levels: dict = settings.LOG_LEVELS
|
|
17
|
-
|
|
18
|
-
with as_file(source) as f:
|
|
19
|
-
log_config = yaml.safe_load(open(f))
|
|
14
|
+
log_config = load_log_config()
|
|
20
15
|
|
|
21
16
|
logging.config.dictConfig(log_config)
|
|
22
17
|
|
|
23
18
|
handlers = []
|
|
24
19
|
if settings.LOG_HANDLER_LOCAL_ENABLED:
|
|
25
20
|
handlers.append(configure_console_handler(log_config=log_config))
|
|
26
|
-
if settings.LOG_HANDLER_APPLICATION_INSIGHTS_ENABLED:
|
|
27
|
-
handlers.append(
|
|
28
|
-
configure_azure_handler(log_config=log_config, keyvault=keyvault)
|
|
29
|
-
)
|
|
30
21
|
|
|
31
22
|
for log_handler in handlers:
|
|
32
23
|
for loggers in log_config["loggers"].keys():
|
|
@@ -35,6 +26,13 @@ def setup_loggers(keyvault: Keyvault) -> None:
|
|
|
35
26
|
logging.getLogger().addHandler(log_handler)
|
|
36
27
|
|
|
37
28
|
|
|
29
|
+
def load_log_config():
|
|
30
|
+
source = files("isar").joinpath("config").joinpath("logging.conf")
|
|
31
|
+
with as_file(source) as f:
|
|
32
|
+
log_config = yaml.safe_load(open(f))
|
|
33
|
+
return log_config
|
|
34
|
+
|
|
35
|
+
|
|
38
36
|
def configure_console_handler(log_config: dict) -> logging.Handler:
|
|
39
37
|
handler = logging.StreamHandler()
|
|
40
38
|
handler.setLevel(log_config["root"]["level"])
|
|
@@ -46,22 +44,3 @@ def configure_console_handler(log_config: dict) -> logging.Handler:
|
|
|
46
44
|
)
|
|
47
45
|
)
|
|
48
46
|
return handler
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def configure_azure_handler(log_config: dict, keyvault: Keyvault) -> logging.Handler:
|
|
52
|
-
connection_string: str
|
|
53
|
-
try:
|
|
54
|
-
connection_string = keyvault.get_secret(
|
|
55
|
-
"application-insights-connection-string"
|
|
56
|
-
).value
|
|
57
|
-
except KeyvaultError:
|
|
58
|
-
message: str = (
|
|
59
|
-
"CRITICAL ERROR: Missing connection string for"
|
|
60
|
-
f" Application Insights in key vault '{keyvault.name}'."
|
|
61
|
-
)
|
|
62
|
-
print(f"\n{message} \n")
|
|
63
|
-
raise ConfigurationError(message)
|
|
64
|
-
|
|
65
|
-
handler = AzureLogHandler(connection_string=connection_string)
|
|
66
|
-
handler.setLevel(log_config["root"]["level"])
|
|
67
|
-
return handler
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from azure.monitor.opentelemetry.exporter import (
|
|
4
|
+
AzureMonitorLogExporter,
|
|
5
|
+
AzureMonitorTraceExporter,
|
|
6
|
+
)
|
|
7
|
+
from fastapi import FastAPI
|
|
8
|
+
from opentelemetry import trace
|
|
9
|
+
from opentelemetry._logs import set_logger_provider
|
|
10
|
+
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
11
|
+
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
|
|
12
|
+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
|
|
13
|
+
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
|
|
14
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
15
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
16
|
+
|
|
17
|
+
from isar.config.log import load_log_config
|
|
18
|
+
from isar.config.settings import settings
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def setup_open_telemetry(app: FastAPI) -> None:
|
|
22
|
+
if not settings.LOG_HANDLER_APPLICATION_INSIGHTS_ENABLED:
|
|
23
|
+
return
|
|
24
|
+
trace_exporter, log_exporter = get_azure_monitor_exporters()
|
|
25
|
+
|
|
26
|
+
service_name = settings.OPEN_TELEMETRY_SERVICE_NAME
|
|
27
|
+
resource = Resource.create({SERVICE_NAME: service_name})
|
|
28
|
+
|
|
29
|
+
tracer_provider = TracerProvider(resource=resource)
|
|
30
|
+
tracer_provider.add_span_processor(BatchSpanProcessor(trace_exporter))
|
|
31
|
+
trace.set_tracer_provider(tracer_provider)
|
|
32
|
+
|
|
33
|
+
log_provider = LoggerProvider(resource=resource)
|
|
34
|
+
set_logger_provider(log_provider)
|
|
35
|
+
log_provider.add_log_record_processor(BatchLogRecordProcessor(log_exporter))
|
|
36
|
+
|
|
37
|
+
handler = LoggingHandler(logger_provider=log_provider)
|
|
38
|
+
attach_loggers_for_open_telemetry(handler)
|
|
39
|
+
|
|
40
|
+
FastAPIInstrumentor.instrument_app(app, tracer_provider=tracer_provider)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def attach_loggers_for_open_telemetry(handler: LoggingHandler):
|
|
44
|
+
log_config = load_log_config()
|
|
45
|
+
|
|
46
|
+
for logger_name in log_config["loggers"].keys():
|
|
47
|
+
logger = logging.getLogger(logger_name)
|
|
48
|
+
logger.addHandler(handler)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_azure_monitor_exporters() -> (
|
|
52
|
+
tuple[AzureMonitorTraceExporter, AzureMonitorLogExporter]
|
|
53
|
+
):
|
|
54
|
+
"""
|
|
55
|
+
If connection string is defined in environment variables, then use it to create Azure Monitor Exporters.
|
|
56
|
+
Else use Azure Managed Identity to create Azure Monitor Exporters.
|
|
57
|
+
"""
|
|
58
|
+
connection_string = settings.APPLICATIONINSIGHTS_CONNECTION_STRING
|
|
59
|
+
trace_exporter = AzureMonitorTraceExporter(connection_string=connection_string)
|
|
60
|
+
log_exporter = AzureMonitorLogExporter(connection_string=connection_string)
|
|
61
|
+
|
|
62
|
+
return trace_exporter, log_exporter
|