From 743fe1a098d93b62beba30fe0764dc86891be2df Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 1 Nov 2026 22:18:40 +0100 Subject: dashboard: always try showing ping/pong alias --- src/api/dashboard/mod.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/api') diff --git a/src/api/dashboard/mod.rs b/src/api/dashboard/mod.rs index fdc9b4a..2557906 100644 --- a/src/api/dashboard/mod.rs +++ b/src/api/dashboard/mod.rs @@ -191,7 +191,8 @@ impl Hub { if let Some(changed) = document_changes(&mut changes) { let _ = self.documents.send(Arc::new(changed.to_string())); } - let messages = log.after(logged, MESSAGES_AT_MOST); + let mut messages = log.after(logged, MESSAGES_AT_MOST); + by_node(&self.state, &mut messages).await; if let Some(last) = messages.last() { logged = last.seq; if let Ok(json) = serde_json::to_string(&messages) { @@ -227,6 +228,28 @@ impl Hub { } /// Paths changed in a tick listed at most; more: `all`. +/// The messages the paths layer logged under an address (its own PINGs and PONGs) under +/// the node there instead, where one is known: the address it proved itself at, or is +/// said to be at (`Transport::identities_of`), named in `address`. +async fn by_node(state: &AppState, messages: &mut [crate::transport::traffic::Logged]) { + let peers = state.peers_snapshot().await; + let known = |peer: &str| peers.iter().any(|(known, _)| known == peer); + if messages.iter().all(|message| known(&message.peer)) { + return; + } + let mut nodes: std::collections::HashMap = std::collections::HashMap::new(); + for (peer, _) in &peers { + for address in state.transport.identities_of(peer) { + nodes.entry(address).or_insert_with(|| peer.clone()); + } + } + for message in messages { + if let Some(node) = nodes.get(&message.peer) { + message.address = Some(std::mem::replace(&mut message.peer, node.clone())); + } + } +} + const MAX_CHANGED: usize = 256; /// Messages sent to the clients per tick at most, the latest (the console keeps fewer). const MESSAGES_AT_MOST: usize = 500; -- cgit v1.3.1