diff options
| author | tv <tv@krebsco.de> | 2026-10-24 04:50:16 +0200 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-24 04:50:16 +0200 |
| commit | aa0e5167a231916a551296ea669222fd84629298 (patch) | |
| tree | 07129c9979048576f4e1b42b39fc6ba778e84f38 /src/api | |
| parent | f1ef24f38b83bad372e07d4db5533611fa3f6ab4 (diff) | |
record RTT from keepalive messages
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/peers.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/api/peers.rs b/src/api/peers.rs index d381395..3893e0f 100644 --- a/src/api/peers.rs +++ b/src/api/peers.rs @@ -62,6 +62,9 @@ pub(crate) struct PeerStatus { heads: Option<usize>, /// We keep it alive and sync with it on our own; other peers we only answer. neighbour: bool, + /// Smoothed round-trip time in milliseconds, from PING/PONG and HELLO/HELLO_REPLY; + /// absent until measured. + rtt_ms: Option<f64>, } #[derive(Debug, Serialize, ToSchema)] @@ -109,6 +112,10 @@ pub(crate) async fn list_peers( for (public_key, peer_state_mutex) in snapshot { let neighbour = crate::swarm::topology::is_neighbour(&state, &public_key); + let rtt_ms = state + .lock_rtt() + .get(&public_key) + .map(|rtt| rtt.as_secs_f64() * 1000.0); let ps = peer_state_mutex.lock().await; let (status, dormant_for_secs) = match ps.liveness { @@ -133,6 +140,7 @@ pub(crate) async fn list_peers( same_epoch: ps.epoch.map(|epoch| epoch == local_epoch), heads: ps.reported_heads, neighbour, + rtt_ms, }); } |
