From d510e3a7b223b75b5187470432f909665b6cd967 Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 5 Nov 2026 02:14:44 +0100 Subject: dashboard: swarm-wide epoch shine --- src/api/dashboard/mod.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/api/dashboard/mod.rs') diff --git a/src/api/dashboard/mod.rs b/src/api/dashboard/mod.rs index 6682cbd..c82ce76 100644 --- a/src/api/dashboard/mod.rs +++ b/src/api/dashboard/mod.rs @@ -340,15 +340,22 @@ async fn build(state: &AppState, graph: &Graph, live: bool) -> JsonValue { .into_iter() .filter(|(_, age, _)| *age <= LINKS_KEPT_FOR) .collect(); + // With each its epoch: the page shows who entered a new one. + let epochs = state.links.epochs(); + let epoch_json = |epoch: Option| { + epoch.map(|epoch| json!(crate::document::replica::EpochRecord::from(epoch))) + }; let mut measured = Map::new(); measured.insert( local.to_owned(), - json!({ "secsAgo": 0, "links": links_json(&own) }), + json!({ "secsAgo": 0, "links": links_json(&own), + "epoch": epoch_json(Some(state.local_epoch())) }), ); for (member, age, member_links) in &replies { measured.insert( member.clone(), - json!({ "secsAgo": age.as_secs(), "links": links_json(member_links) }), + json!({ "secsAgo": age.as_secs(), "links": links_json(member_links), + "epoch": epoch_json(epochs.get(member).copied()) }), ); } let clocks = clocks::swarm( -- cgit v1.3.1