From 66b213e5414a2243a484fef0367c4abcec9ef1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Chirico=20Indreb=C3=B8?= Date: Wed, 28 Jan 2026 15:22:25 +0100 Subject: [PATCH 1/3] Add missing None check for task --- src/isar/robot/robot_monitor_mission.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/isar/robot/robot_monitor_mission.py b/src/isar/robot/robot_monitor_mission.py index 8fac3dc3..05e1fd4a 100644 --- a/src/isar/robot/robot_monitor_mission.py +++ b/src/isar/robot/robot_monitor_mission.py @@ -251,9 +251,10 @@ def _get_and_handle_task_status(self, current_task: TASKS) -> Optional[TASKS]: publish_task_status(self.mqtt_publisher, current_task, self.mission_id) return current_task - def _handle_stopped_mission(self, current_task: TASKS) -> None: - current_task.status = TaskStatus.Cancelled - publish_task_status(self.mqtt_publisher, current_task, self.mission_id) + def _handle_stopped_mission(self, current_task: Optional[TASKS]) -> None: + if current_task is not None: + current_task.status = TaskStatus.Cancelled + publish_task_status(self.mqtt_publisher, current_task, self.mission_id) publish_mission_status( self.mqtt_publisher, self.mission_id, From 2c46a7f26ccbba7e86a8c05710f69c4a086de31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Chirico=20Indreb=C3=B8?= Date: Wed, 28 Jan 2026 15:22:47 +0100 Subject: [PATCH 2/3] Fix json encoding errors --- src/isar/storage/utilities.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/isar/storage/utilities.py b/src/isar/storage/utilities.py index 94f46110..0fe0b2dd 100644 --- a/src/isar/storage/utilities.py +++ b/src/isar/storage/utilities.py @@ -35,7 +35,9 @@ def construct_metadata_file( "inspection_id": inspection.id, "mission_id": mission.id, "mission_name": mission.name, - "mission_date": datetime.now(timezone.utc).date(), + "mission_date": datetime.now(timezone.utc) + .date() + .strftime("%Y-%m-%dT%H:%M:%S.%f"), "plant_name": settings.PLANT_NAME, "isar_id": settings.ISAR_ID, "robot_name": settings.ROBOT_NAME, @@ -47,14 +49,18 @@ def construct_metadata_file( "y": inspection.metadata.robot_pose.position.y, "z": inspection.metadata.robot_pose.position.z, }, - "orientation": inspection.metadata.robot_pose.orientation.to_quat_array(), + "orientation": str( + inspection.metadata.robot_pose.orientation.to_quat_array() + ), }, "target_position": { "x": inspection.metadata.target_position.x, "y": inspection.metadata.target_position.y, "z": inspection.metadata.target_position.z, }, - "timestamp": inspection.metadata.start_time, + "timestamp": inspection.metadata.start_time.strftime( + "%Y-%m-%dT%H:%M:%S.%f" + ), }, "data_files": [ { From 41b1add1fe4145c5ae521b098a83f6d8316eabeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Chirico=20Indreb=C3=B8?= Date: Wed, 28 Jan 2026 15:41:17 +0100 Subject: [PATCH 3/3] Report task status on cancelled mission --- src/isar/robot/robot_monitor_mission.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/isar/robot/robot_monitor_mission.py b/src/isar/robot/robot_monitor_mission.py index 05e1fd4a..c2ab4bc4 100644 --- a/src/isar/robot/robot_monitor_mission.py +++ b/src/isar/robot/robot_monitor_mission.py @@ -303,6 +303,16 @@ def run(self) -> None: not in [MissionStatus.NotStarted, MissionStatus.InProgress] and current_task is None # We wait for all task statuses ): + if ( + new_mission_status == MissionStatus.Cancelled + and current_task is not None + and current_task.status == TaskStatus.InProgress + ): + current_task.status = TaskStatus.Cancelled + publish_task_status( + self.mqtt_publisher, current_task, self.mission_id + ) + # Standardises final mission status report new_mission_status = self._get_mission_status_based_on_task_status() if self.error_message is None and new_mission_status in [