use commonware_cryptography::PublicKey;
use commonware_runtime::{
telemetry::metrics::{status, CounterFamily, EncodeStruct, Gauge, MetricsExt as _},
Metrics as RuntimeMetrics,
};
#[derive(Clone, Debug, Hash, PartialEq, Eq, EncodeStruct)]
pub struct Sequencer<P: PublicKey> {
pub sequencer: P,
}
pub struct Metrics<P: PublicKey> {
pub peer: CounterFamily<Sequencer<P>>,
pub receive: status::Counter,
pub subscribe: status::Counter,
pub get: status::Counter,
pub waiters: Gauge,
}
impl<P: PublicKey> Metrics<P> {
pub fn init<E: RuntimeMetrics>(context: &E) -> Self {
Self {
peer: context.family("peer", "Number of broadcasts received by peer"),
receive: context.family("receive", "Number of received messages by status"),
subscribe: context.family("subscribe", "Number of `subscribe` requests by status"),
get: context.family("get", "Number of `get` requests by status"),
waiters: context.gauge("waiters", "Number of digests being awaited"),
}
}
}