From 47e00e5fde46b3460bf12097079e2510967c7010 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 31 Oct 2026 04:09:40 +0100 Subject: add lastSyncSecsAgo and description to /peers --- src/api/dashboard/dashboard.html | 2 +- src/api/dashboard/mod.rs | 1 + src/api/peers.rs | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/api/dashboard/dashboard.html b/src/api/dashboard/dashboard.html index 0bbd9c5..091d7ee 100644 --- a/src/api/dashboard/dashboard.html +++ b/src/api/dashboard/dashboard.html @@ -163,7 +163,7 @@ let state = null; let stateAt = 0; // Fields that grow by themselves (`GROWING` and `is_age` in the node's dashboard). -const GROWING = new Set(["uptimeSecs", "dormantForSecs", "observedSecs", +const GROWING = new Set(["uptimeSecs", "dormantForSecs", "divergedForSecs", "observedSecs", "lastFromNeighbourSecs", "oldestQuarantineSecs"]); const isAge = key => key === "secsAgo" || key.endsWith("SecsAgo") || GROWING.has(key); const elapsed = () => Math.floor((Date.now() - stateAt) / 1000); diff --git a/src/api/dashboard/mod.rs b/src/api/dashboard/mod.rs index 86f349a..ad907ed 100644 --- a/src/api/dashboard/mod.rs +++ b/src/api/dashboard/mod.rs @@ -324,6 +324,7 @@ fn links_json(links: &[Link]) -> JsonValue { const GROWING: &[&str] = &[ "uptimeSecs", "dormantForSecs", + "divergedForSecs", "observedSecs", "lastFromNeighbourSecs", "oldestQuarantineSecs", diff --git a/src/api/peers.rs b/src/api/peers.rs index da714d0..2f93a43 100644 --- a/src/api/peers.rs +++ b/src/api/peers.rs @@ -61,6 +61,11 @@ pub(crate) struct PeerStatus { handshake_complete: bool, last_seen_secs_ago: Option, dormant_for_secs: Option, + /// Since a sync message from it was applied (or the epoch changed). + last_sync_secs_ago: Option, + /// How long its heads have differed from ours with no sync message from it in + /// between; absent while they match. + diverged_for_secs: Option, has_pending_delivery: bool, /// Epoch the peer last advertised; absent until it has sent a message. epoch: Option, @@ -166,6 +171,12 @@ pub(crate) async fn peer_list(state: &AppState) -> PeerListResponse { .last_seen .map(|t| now.saturating_duration_since(t).as_secs()), dormant_for_secs, + last_sync_secs_ago: ps + .last_sync_rx + .map(|t| now.saturating_duration_since(t).as_secs()), + diverged_for_secs: ps + .diverged_since + .map(|t| now.saturating_duration_since(t).as_secs()), has_pending_delivery: ps.sync.sending.is_some() || ps.sync.retry_at.is_some(), epoch: ps.epoch.map(EpochInfo::from), same_epoch: ps.epoch.map(|epoch| epoch == local_epoch), -- cgit v1.3.1