diff options
| author | tv <tv@krebsco.de> | 2026-10-24 06:29:59 +0200 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-24 06:29:59 +0200 |
| commit | 19bc0fbf4e148430064bd040bfe0db25ab137555 (patch) | |
| tree | 746c6ceed8be2f52ac6f4a5b673e5b1d8cdfc011 /src/api/stats.rs | |
| parent | a5fb523c9a0a23913e4219c6334f5e872b585872 (diff) | |
add per peer incident stats
Diffstat (limited to 'src/api/stats.rs')
| -rw-r--r-- | src/api/stats.rs | 11 |
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, }) } |
