use commonware_runtime::{
telemetry::metrics::{status, MetricsExt, Registered},
Metrics as MetricsTrait,
};
use prometheus_client::metrics::{counter::Counter, gauge::Gauge};
#[derive(Clone)]
pub(super) struct Metrics {
pub pending_requests: Registered<Gauge>,
pub fetch_requests: Registered<Counter>,
pub cancel_requests: Registered<Counter>,
pub deliveries: status::Counter,
pub serve_requests: status::Counter,
pub has_database: Registered<Gauge>,
}
impl Metrics {
pub fn new(context: &impl MetricsTrait) -> Self {
let pending_requests = context.register(
"pending_requests",
"Current in-flight fetch request keys",
Gauge::default(),
);
let fetch_requests = context.register(
"fetch_requests",
"Total fetch requests dispatched to the P2P engine",
Counter::default(),
);
let cancel_requests = context.register(
"cancel_requests",
"Total cancelled requests",
Counter::default(),
);
let deliveries = context.family("deliveries", "Deliveries from peers by outcome");
let serve_requests = context.family("serve_requests", "Incoming serve requests by outcome");
let has_database = context.register(
"has_database",
"Whether a database is currently attached",
Gauge::default(),
);
Self {
pending_requests,
fetch_requests,
cancel_requests,
deliveries,
serve_requests,
has_database,
}
}
}