summaryrefslogtreecommitdiffstats
path: root/src/api/stats.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-24 06:29:59 +0200
committertv <tv@krebsco.de>2026-10-24 06:29:59 +0200
commit19bc0fbf4e148430064bd040bfe0db25ab137555 (patch)
tree746c6ceed8be2f52ac6f4a5b673e5b1d8cdfc011 /src/api/stats.rs
parenta5fb523c9a0a23913e4219c6334f5e872b585872 (diff)
add per peer incident stats
Diffstat (limited to 'src/api/stats.rs')
-rw-r--r--src/api/stats.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/api/stats.rs b/src/api/stats.rs
index f4a368b..e426c7a 100644
--- a/src/api/stats.rs
+++ b/src/api/stats.rs
@@ -4,7 +4,7 @@ use axum::{Json, extract::State};
use serde::Serialize;
use super::peers::EpochInfo;
-use crate::state::AppState;
+use crate::state::{AppState, Incidents};
use crate::swarm::{members, stability, topology};
use crate::transport::traffic::PeerTraffic;
@@ -22,6 +22,8 @@ pub(crate) struct StatsResponse {
stale_hello_replies: u64,
/// All peers together, including ones no longer listed in /peers.
traffic: PeerTraffic,
+ /// The peers listed in /peers together (a forgotten peer's are gone).
+ incidents: Incidents,
}
#[derive(Debug, Serialize)]
@@ -96,6 +98,12 @@ pub(crate) async fn get_stats(State(state): State<AppState>) -> Json<StatsRespon
let (connected_fraction, observed) = stability::measured(&state);
+ let mut incidents = Incidents::default();
+ let peers: Vec<_> = state.peer_states.read().await.values().cloned().collect();
+ for peer_state in peers {
+ incidents.add(&peer_state.lock().await.incidents);
+ }
+
Json(StatsResponse {
uptime_secs: node.uptime.as_secs(),
ready: state.is_ready().await,
@@ -130,5 +138,6 @@ pub(crate) async fn get_stats(State(state): State<AppState>) -> Json<StatsRespon
},
stale_hello_replies: node.stale_hello_replies,
traffic: state.traffic.total(),
+ incidents,
})
}