From 4da17a5e40e34aea27a34241b4f692ae0c827f57 Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 5 Nov 2026 00:56:39 +0100 Subject: neigbours by transport --- src/swarm/topology/mod.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/swarm/topology') diff --git a/src/swarm/topology/mod.rs b/src/swarm/topology/mod.rs index afa13ee..37b2f71 100644 --- a/src/swarm/topology/mod.rs +++ b/src/swarm/topology/mod.rs @@ -117,7 +117,7 @@ pub(crate) fn is_full_mesh(state: &AppState) -> bool { } /// The current view in numbers, once known. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone)] pub(crate) struct Summary { /// Registered members, us included. pub(crate) members: usize, @@ -126,6 +126,10 @@ pub(crate) struct Summary { pub(crate) stable: usize, pub(crate) neighbours: usize, pub(crate) stable_neighbours: usize, + /// For each of our transports (address scheme), the neighbours the member list + /// gives an address on it: one on two transports counts on both, one it gives none + /// for (not listed yet, or only connecting out) on none. + pub(crate) neighbours_by_transport: BTreeMap, } pub(crate) fn summary(state: &AppState) -> Option { @@ -148,6 +152,22 @@ pub(crate) fn summary(state: &AppState) -> Option { .iter() .filter(|m| view.stable.contains(*m)) .count(), + neighbours_by_transport: view + .local_transports + .iter() + .map(|transport| { + let on_it = view + .neighbours + .iter() + .filter(|m| { + view.transports + .get(*m) + .is_some_and(|theirs| theirs.contains(transport)) + }) + .count(); + (transport.clone(), on_it) + }) + .collect(), }) } -- cgit v1.3.1