mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-07-03 03:31:37 +00:00
misc/metrics: Track # connected nodes supporting specific protocol (#2734)
* misc/metrics: Explicitly delegate event recording to each recorder This allows delegating a single event to multiple `Recorder`s. That enables e.g. the `identify::Metrics` `Recorder` to act both on `IdentifyEvent` and `SwarmEvent`. The latter enables it to garbage collect per peer data on disconnects. * protocols/dcutr: Expose PROTOCOL_NAME * protocols/identify: Expose PROTOCOL_NAME and PUSH_PROTOCOL_NAME * protocols/ping: Expose PROTOCOL_NAME * protocols/relay: Expose HOP_PROTOCOL_NAME and STOP_PROTOCOL_NAME * misc/metrics: Track # connected nodes supporting specific protocol An example metric exposed with this patch: ``` libp2p_identify_protocols{protocol="/ipfs/ping/1.0.0"} 10 ``` This implies that 10 of the currently connected nodes support the ping protocol.
This commit is contained in:
@ -159,25 +159,21 @@ impl Metrics {
|
||||
}
|
||||
}
|
||||
|
||||
impl super::Recorder<libp2p_kad::KademliaEvent> for super::Metrics {
|
||||
impl super::Recorder<libp2p_kad::KademliaEvent> for Metrics {
|
||||
fn record(&self, event: &libp2p_kad::KademliaEvent) {
|
||||
match event {
|
||||
libp2p_kad::KademliaEvent::OutboundQueryCompleted { result, stats, .. } => {
|
||||
self.kad
|
||||
.query_result_num_requests
|
||||
self.query_result_num_requests
|
||||
.get_or_create(&result.into())
|
||||
.observe(stats.num_requests().into());
|
||||
self.kad
|
||||
.query_result_num_success
|
||||
self.query_result_num_success
|
||||
.get_or_create(&result.into())
|
||||
.observe(stats.num_successes().into());
|
||||
self.kad
|
||||
.query_result_num_failure
|
||||
self.query_result_num_failure
|
||||
.get_or_create(&result.into())
|
||||
.observe(stats.num_failures().into());
|
||||
if let Some(duration) = stats.duration() {
|
||||
self.kad
|
||||
.query_result_duration
|
||||
self.query_result_duration
|
||||
.get_or_create(&result.into())
|
||||
.observe(duration.as_secs_f64());
|
||||
}
|
||||
@ -185,36 +181,30 @@ impl super::Recorder<libp2p_kad::KademliaEvent> for super::Metrics {
|
||||
match result {
|
||||
libp2p_kad::QueryResult::GetRecord(result) => match result {
|
||||
Ok(ok) => self
|
||||
.kad
|
||||
.query_result_get_record_ok
|
||||
.observe(ok.records.len() as f64),
|
||||
Err(error) => {
|
||||
self.kad
|
||||
.query_result_get_record_error
|
||||
self.query_result_get_record_error
|
||||
.get_or_create(&error.into())
|
||||
.inc();
|
||||
}
|
||||
},
|
||||
libp2p_kad::QueryResult::GetClosestPeers(result) => match result {
|
||||
Ok(ok) => self
|
||||
.kad
|
||||
.query_result_get_closest_peers_ok
|
||||
.observe(ok.peers.len() as f64),
|
||||
Err(error) => {
|
||||
self.kad
|
||||
.query_result_get_closest_peers_error
|
||||
self.query_result_get_closest_peers_error
|
||||
.get_or_create(&error.into())
|
||||
.inc();
|
||||
}
|
||||
},
|
||||
libp2p_kad::QueryResult::GetProviders(result) => match result {
|
||||
Ok(ok) => self
|
||||
.kad
|
||||
.query_result_get_providers_ok
|
||||
.observe(ok.providers.len() as f64),
|
||||
Err(error) => {
|
||||
self.kad
|
||||
.query_result_get_providers_error
|
||||
self.query_result_get_providers_error
|
||||
.get_or_create(&error.into())
|
||||
.inc();
|
||||
}
|
||||
@ -230,16 +220,14 @@ impl super::Recorder<libp2p_kad::KademliaEvent> for super::Metrics {
|
||||
} => {
|
||||
let bucket = low.ilog2().unwrap_or(0);
|
||||
if *is_new_peer {
|
||||
self.kad
|
||||
.routing_updated
|
||||
self.routing_updated
|
||||
.get_or_create(&RoutingUpdated {
|
||||
action: RoutingAction::Added,
|
||||
bucket,
|
||||
})
|
||||
.inc();
|
||||
} else {
|
||||
self.kad
|
||||
.routing_updated
|
||||
self.routing_updated
|
||||
.get_or_create(&RoutingUpdated {
|
||||
action: RoutingAction::Updated,
|
||||
bucket,
|
||||
@ -248,8 +236,7 @@ impl super::Recorder<libp2p_kad::KademliaEvent> for super::Metrics {
|
||||
}
|
||||
|
||||
if old_peer.is_some() {
|
||||
self.kad
|
||||
.routing_updated
|
||||
self.routing_updated
|
||||
.get_or_create(&RoutingUpdated {
|
||||
action: RoutingAction::Evicted,
|
||||
bucket,
|
||||
@ -259,10 +246,7 @@ impl super::Recorder<libp2p_kad::KademliaEvent> for super::Metrics {
|
||||
}
|
||||
|
||||
libp2p_kad::KademliaEvent::InboundRequest { request } => {
|
||||
self.kad
|
||||
.inbound_requests
|
||||
.get_or_create(&request.into())
|
||||
.inc();
|
||||
self.inbound_requests.get_or_create(&request.into()).inc();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
Reference in New Issue
Block a user