From 7d49896ac23ea5f1bc896139e95b598216d6b650 Mon Sep 17 00:00:00 2001 From: "anthony.wen" Date: Thu, 26 Mar 2026 13:41:06 -0400 Subject: [PATCH] Improve categorized watcher duration parsing for grouped runs - relax grouped-run duration parsing so Linux categorized summaries like `12m 19.4` and `15m 42.2` are converted reliably even when the trailing `s` is split awkwardly in the parent run log - keep the categorized grouped-run summary extraction aligned with the host results already being parsed from the parent Cloud Run Finished blocks - refresh the controller watcher copy so the next categorized run uses the improved grouped duration parser --- atvm/watcher-service/atvm_run_watcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atvm/watcher-service/atvm_run_watcher.py b/atvm/watcher-service/atvm_run_watcher.py index 6b37fe6..2895e96 100644 --- a/atvm/watcher-service/atvm_run_watcher.py +++ b/atvm/watcher-service/atvm_run_watcher.py @@ -265,7 +265,7 @@ def extract_check_xml_timestamp_from_file(xml_path: Path) -> Optional[datetime]: def parse_duration_seconds(raw: str) -> Optional[float]: raw = " ".join(raw.split()) - match = re.search(r"(?:(\d+)h\s+)?(?:(\d+)m\s+)?(\d+(?:\.\d+)?)s", raw) + match = re.search(r"(?:(\d+)h\s+)?(?:(\d+)m\s+)?(\d+(?:\.\d+)?)(?:s)?", raw) if not match: return None hours = int(match.group(1) or 0)