use crate::authenticated::discovery::metrics;
use commonware_runtime::Metrics as RuntimeMetrics;
use prometheus_client::metrics::{counter::Counter, family::Family, gauge::Gauge};
#[derive(Default)]
pub struct Metrics {
pub tracked: Gauge,
pub blocked: Family<metrics::Peer, Gauge>,
pub reserved: Gauge,
pub connected: Family<metrics::Peer, Gauge>,
pub limits: Family<metrics::Peer, Counter>,
pub updates: Family<metrics::Peer, Counter>,
}
impl Metrics {
pub fn init<E: RuntimeMetrics>(context: E) -> Self {
let metrics = Self::default();
context.register(
"tracked",
"Total number of unique peers in all peer sets being tracked",
metrics.tracked.clone(),
);
context.register(
"blocked",
"Blocked peers (value = expiry time as epoch millis)",
metrics.blocked.clone(),
);
context.register(
"reserved",
"Total number of outstanding reservations",
metrics.reserved.clone(),
);
context.register(
"connected",
"Unix timestamp in milliseconds when each connected peer became active",
metrics.connected.clone(),
);
context.register(
"limits",
"Count of the number of rate-limited reservation events for each peer",
metrics.limits.clone(),
);
context.register(
"updates",
"Count of the number of updates for each peer",
metrics.updates.clone(),
);
metrics
}
}