commonware_resolver/p2p/
metrics.rs1use commonware_runtime::{
2 telemetry::metrics::{histogram, status},
3 Clock, Metrics as RuntimeMetrics,
4};
5use prometheus_client::metrics::{gauge::Gauge, histogram::Histogram};
6use std::sync::Arc;
7
8pub struct Metrics<E: RuntimeMetrics + Clock> {
10 pub fetch_pending: Gauge,
12 pub fetch_active: Gauge,
14 pub serve_processing: Gauge,
16 pub peers_blocked: Gauge,
18 pub fetch: status::Counter,
20 pub cancel: status::Counter,
22 pub serve: status::Counter,
24 pub serve_duration: histogram::Timed<E>,
26 pub fetch_duration: histogram::Timed<E>,
28}
29
30impl<E: RuntimeMetrics + Clock> Metrics<E> {
31 pub fn init(context: E) -> Self {
33 let fetch_pending = Gauge::default();
34 context.register(
35 "fetch_pending",
36 "Current number of pending fetch requests",
37 fetch_pending.clone(),
38 );
39 let fetch_active = Gauge::default();
40 context.register(
41 "fetch_active",
42 "Current number of active fetch requests",
43 fetch_active.clone(),
44 );
45 let serve_processing = Gauge::default();
46 context.register(
47 "serve_processing",
48 "Current number of serves currently processing",
49 serve_processing.clone(),
50 );
51 let peers_blocked = Gauge::default();
52 context.register(
53 "peers_blocked",
54 "Current number of blocked peers",
55 peers_blocked.clone(),
56 );
57 let fetch = status::Counter::default();
58 context.register("fetch", "Number of fetches by status", fetch.clone());
59 let cancel = status::Counter::default();
60 context.register(
61 "cancel",
62 "Number of canceled fetches by status",
63 cancel.clone(),
64 );
65 let serve = status::Counter::default();
66 context.register("serve", "Number of serves by status", serve.clone());
67 let serve_duration = Histogram::new(histogram::Buckets::LOCAL);
68 context.register(
69 "serve_duration",
70 "Histogram of successful serves",
71 serve_duration.clone(),
72 );
73 let fetch_duration = Histogram::new(histogram::Buckets::NETWORK);
74 context.register(
75 "fetch_duration",
76 "Histogram of successful fetches",
77 fetch_duration.clone(),
78 );
79 let clock = Arc::new(context);
80
81 Self {
82 fetch_pending,
83 fetch_active,
84 serve_processing,
85 peers_blocked,
86 fetch,
87 cancel,
88 serve,
89 fetch_duration: histogram::Timed::new(fetch_duration, clock.clone()),
90 serve_duration: histogram::Timed::new(serve_duration, clock),
91 }
92 }
93}