fix: Make _compute_step_summary order-independent to fix dashboard status bug
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
+14
-11
@@ -328,6 +328,9 @@ def _compute_step_summary(logs):
|
||||
Compute a step-aligned summary from logs showing queued, success, and failure counts.
|
||||
|
||||
Returns a dictionary with main step counts and upload branch counts.
|
||||
|
||||
Note: This function is order-independent - it selects the latest status per step
|
||||
based on timestamp, regardless of input log ordering.
|
||||
"""
|
||||
# Count statuses for main processing steps (not uploads)
|
||||
main_steps = [
|
||||
@@ -347,9 +350,9 @@ def _compute_step_summary(logs):
|
||||
main_counts = {"queued": 0, "in_progress": 0, "success": 0, "failure": 0}
|
||||
upload_counts = {"queued": 0, "in_progress": 0, "success": 0, "failure": 0}
|
||||
|
||||
# Track latest status for each step (logs are ordered by timestamp desc)
|
||||
main_steps_seen = {}
|
||||
upload_tasks_seen = {}
|
||||
# Track latest status for each step by comparing timestamps (order-independent)
|
||||
main_steps_seen = {} # {step_name: (timestamp, status)}
|
||||
upload_tasks_seen = {} # {step_name: (timestamp, status)}
|
||||
|
||||
for log in logs:
|
||||
step_name = log.step_name
|
||||
@@ -363,21 +366,21 @@ def _compute_step_summary(logs):
|
||||
is_upload = any(step_name.startswith(prefix) for prefix in upload_prefixes)
|
||||
|
||||
if is_upload:
|
||||
# Track latest status for each unique upload task (first seen is latest)
|
||||
if step_name not in upload_tasks_seen:
|
||||
upload_tasks_seen[step_name] = status
|
||||
# Track latest status for each unique upload task by timestamp
|
||||
if step_name not in upload_tasks_seen or log.timestamp > upload_tasks_seen[step_name][0]:
|
||||
upload_tasks_seen[step_name] = (log.timestamp, status)
|
||||
elif step_name in main_steps:
|
||||
# Track latest status for main steps (first seen is latest)
|
||||
if step_name not in main_steps_seen:
|
||||
main_steps_seen[step_name] = status
|
||||
# Track latest status for main steps by timestamp
|
||||
if step_name not in main_steps_seen or log.timestamp > main_steps_seen[step_name][0]:
|
||||
main_steps_seen[step_name] = (log.timestamp, status)
|
||||
|
||||
# Count main step statuses from latest status per step
|
||||
for task_status in main_steps_seen.values():
|
||||
for timestamp, task_status in main_steps_seen.values():
|
||||
if task_status in main_counts:
|
||||
main_counts[task_status] += 1
|
||||
|
||||
# Count upload task statuses from latest status per task
|
||||
for task_status in upload_tasks_seen.values():
|
||||
for timestamp, task_status in upload_tasks_seen.values():
|
||||
if task_status in upload_counts:
|
||||
upload_counts[task_status] += 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user