feat: surface ecc2 daemon auto-merge activity

This commit is contained in:
Affaan Mustafa
2026-04-08 15:27:16 -07:00
parent d8c8178f92
commit dada133784
4 changed files with 267 additions and 7 deletions

View File

@@ -1912,6 +1912,18 @@ impl Dashboard {
}
}
if let Some(last_auto_merge_at) = self.daemon_activity.last_auto_merge_at.as_ref() {
lines.push(format!(
"Last daemon auto-merge {} merged / {} active / {} conflicted / {} dirty / {} failed @ {}",
self.daemon_activity.last_auto_merge_merged,
self.daemon_activity.last_auto_merge_active_skipped,
self.daemon_activity.last_auto_merge_conflicted_skipped,
self.daemon_activity.last_auto_merge_dirty_skipped,
self.daemon_activity.last_auto_merge_failed,
self.short_timestamp(&last_auto_merge_at.to_rfc3339())
));
}
if let Some(route_preview) = self.selected_route_preview.as_ref() {
lines.push(format!("Next route {route_preview}"));
}
@@ -2774,6 +2786,12 @@ mod tests {
last_rebalance_at: Some(now + chrono::Duration::seconds(2)),
last_rebalance_rerouted: 1,
last_rebalance_leads: 1,
last_auto_merge_at: Some(now + chrono::Duration::seconds(3)),
last_auto_merge_merged: 2,
last_auto_merge_active_skipped: 1,
last_auto_merge_conflicted_skipped: 1,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();
@@ -2782,6 +2800,9 @@ mod tests {
assert!(text.contains("Last daemon dispatch 4 routed / 2 deferred across 2 lead(s)"));
assert!(text.contains("Last daemon recovery dispatch 1 handoff(s) across 1 lead(s)"));
assert!(text.contains("Last daemon rebalance 1 handoff(s) across 1 lead(s)"));
assert!(
text.contains("Last daemon auto-merge 2 merged / 1 active / 1 conflicted / 0 dirty / 0 failed")
);
}
#[test]
@@ -2809,6 +2830,12 @@ mod tests {
last_rebalance_at: Some(Utc::now()),
last_rebalance_rerouted: 1,
last_rebalance_leads: 1,
last_auto_merge_at: None,
last_auto_merge_merged: 0,
last_auto_merge_active_skipped: 0,
last_auto_merge_conflicted_skipped: 0,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();
@@ -2840,6 +2867,12 @@ mod tests {
last_rebalance_at: Some(Utc::now()),
last_rebalance_rerouted: 1,
last_rebalance_leads: 1,
last_auto_merge_at: None,
last_auto_merge_merged: 0,
last_auto_merge_active_skipped: 0,
last_auto_merge_conflicted_skipped: 0,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();
@@ -2873,6 +2906,12 @@ mod tests {
last_rebalance_at: Some(Utc::now()),
last_rebalance_rerouted: 0,
last_rebalance_leads: 1,
last_auto_merge_at: None,
last_auto_merge_merged: 0,
last_auto_merge_active_skipped: 0,
last_auto_merge_conflicted_skipped: 0,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();
@@ -2907,6 +2946,12 @@ mod tests {
last_rebalance_at: Some(now),
last_rebalance_rerouted: 1,
last_rebalance_leads: 1,
last_auto_merge_at: None,
last_auto_merge_merged: 0,
last_auto_merge_active_skipped: 0,
last_auto_merge_conflicted_skipped: 0,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();
@@ -2956,6 +3001,12 @@ mod tests {
last_rebalance_at: Some(now),
last_rebalance_rerouted: 1,
last_rebalance_leads: 1,
last_auto_merge_at: None,
last_auto_merge_merged: 0,
last_auto_merge_active_skipped: 0,
last_auto_merge_conflicted_skipped: 0,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();
@@ -3052,6 +3103,12 @@ mod tests {
last_rebalance_at: Some(now),
last_rebalance_rerouted: 1,
last_rebalance_leads: 1,
last_auto_merge_at: None,
last_auto_merge_merged: 0,
last_auto_merge_active_skipped: 0,
last_auto_merge_conflicted_skipped: 0,
last_auto_merge_dirty_skipped: 0,
last_auto_merge_failed: 0,
};
let text = dashboard.selected_session_metrics_text();