mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-23 02:41:08 +00:00
client/network: Expose number of entries per Kademlia bucket (#7104)
Extend `sub_libp2p_kbuckets_num_nodes` Prometheus metric to expose the number of nodes per bucket per Kademlia instance instead of only per Kademlia instance.
This commit is contained in:
@@ -211,9 +211,12 @@ impl<B: BlockT, H: ExHashT> Behaviour<B, H> {
|
|||||||
self.discovery.add_known_address(peer_id, addr)
|
self.discovery.add_known_address(peer_id, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the number of nodes that are in the Kademlia k-buckets.
|
/// Returns the number of nodes in each Kademlia kbucket for each Kademlia instance.
|
||||||
pub fn num_kbuckets_entries(&mut self) -> impl ExactSizeIterator<Item = (&ProtocolId, usize)> {
|
///
|
||||||
self.discovery.num_kbuckets_entries()
|
/// Identifies Kademlia instances by their [`ProtocolId`] and kbuckets by the base 2 logarithm
|
||||||
|
/// of their lower bound.
|
||||||
|
pub fn num_entries_per_kbucket(&mut self) -> impl ExactSizeIterator<Item = (&ProtocolId, Vec<(u32, usize)>)> {
|
||||||
|
self.discovery.num_entries_per_kbucket()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the number of records in the Kademlia record stores.
|
/// Returns the number of records in the Kademlia record stores.
|
||||||
|
|||||||
@@ -329,10 +329,18 @@ impl DiscoveryBehaviour {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the number of nodes that are in the Kademlia k-buckets.
|
/// Returns the number of nodes in each Kademlia kbucket for each Kademlia instance.
|
||||||
pub fn num_kbuckets_entries(&mut self) -> impl ExactSizeIterator<Item = (&ProtocolId, usize)> {
|
///
|
||||||
|
/// Identifies Kademlia instances by their [`ProtocolId`] and kbuckets by the base 2 logarithm
|
||||||
|
/// of their lower bound.
|
||||||
|
pub fn num_entries_per_kbucket(&mut self) -> impl ExactSizeIterator<Item = (&ProtocolId, Vec<(u32, usize)>)> {
|
||||||
self.kademlias.iter_mut()
|
self.kademlias.iter_mut()
|
||||||
.map(|(id, kad)| (id, kad.kbuckets().map(|bucket| bucket.iter().count()).sum()))
|
.map(|(id, kad)| {
|
||||||
|
let buckets = kad.kbuckets()
|
||||||
|
.map(|bucket| (bucket.range().0.ilog2().unwrap_or(0), bucket.iter().count()))
|
||||||
|
.collect();
|
||||||
|
(id, buckets)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the number of records in the Kademlia record stores.
|
/// Returns the number of records in the Kademlia record stores.
|
||||||
|
|||||||
@@ -1670,8 +1670,12 @@ impl<B: BlockT + 'static, H: ExHashT> Future for NetworkWorker<B, H> {
|
|||||||
this.is_major_syncing.store(is_major_syncing, Ordering::Relaxed);
|
this.is_major_syncing.store(is_major_syncing, Ordering::Relaxed);
|
||||||
|
|
||||||
if let Some(metrics) = this.metrics.as_ref() {
|
if let Some(metrics) = this.metrics.as_ref() {
|
||||||
for (proto, num_entries) in this.network_service.num_kbuckets_entries() {
|
for (proto, buckets) in this.network_service.num_entries_per_kbucket() {
|
||||||
metrics.kbuckets_num_nodes.with_label_values(&[&proto.as_ref()]).set(num_entries as u64);
|
for (lower_ilog2_bucket_bound, num_entries) in buckets {
|
||||||
|
metrics.kbuckets_num_nodes
|
||||||
|
.with_label_values(&[&proto.as_ref(), &lower_ilog2_bucket_bound.to_string()])
|
||||||
|
.set(num_entries as u64);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (proto, num_entries) in this.network_service.num_kademlia_records() {
|
for (proto, num_entries) in this.network_service.num_kademlia_records() {
|
||||||
metrics.kademlia_records_count.with_label_values(&[&proto.as_ref()]).set(num_entries as u64);
|
metrics.kademlia_records_count.with_label_values(&[&proto.as_ref()]).set(num_entries as u64);
|
||||||
|
|||||||
@@ -171,9 +171,9 @@ impl Metrics {
|
|||||||
kbuckets_num_nodes: prometheus::register(GaugeVec::new(
|
kbuckets_num_nodes: prometheus::register(GaugeVec::new(
|
||||||
Opts::new(
|
Opts::new(
|
||||||
"sub_libp2p_kbuckets_num_nodes",
|
"sub_libp2p_kbuckets_num_nodes",
|
||||||
"Number of nodes in the Kademlia k-buckets"
|
"Number of nodes per kbucket per Kademlia instance"
|
||||||
),
|
),
|
||||||
&["protocol"]
|
&["protocol", "lower_ilog2_bucket_bound"]
|
||||||
)?, registry)?,
|
)?, registry)?,
|
||||||
listeners_local_addresses: prometheus::register(Gauge::new(
|
listeners_local_addresses: prometheus::register(Gauge::new(
|
||||||
"sub_libp2p_listeners_local_addresses", "Number of local addresses we're listening on"
|
"sub_libp2p_listeners_local_addresses", "Number of local addresses we're listening on"
|
||||||
@@ -355,4 +355,3 @@ impl MetricSource for NumConnectedGauge {
|
|||||||
set(&[], self.0.load(Ordering::Relaxed) as u64);
|
set(&[], self.0.load(Ordering::Relaxed) as u64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user