use commonware_cryptography::PublicKey;
use commonware_runtime::{
telemetry::metrics::{histogram, status, Counter, EncodeStruct, GaugeFamily, 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 sequencer_heights: GaugeFamily<Sequencer<P>>,
pub acks: status::Counter,
pub nodes: status::Counter,
pub verify: status::Counter,
pub certificates: Counter,
pub propose: status::Counter,
pub rebroadcast: status::Counter,
pub verify_duration: histogram::Timed,
pub e2e_duration: histogram::Timed,
}
impl<P: PublicKey> Metrics<P> {
pub fn init<E: RuntimeMetrics>(context: &E) -> Self {
let sequencer_heights = context.family("sequencer_heights", "Height per sequencer tracked");
let acks = context.family("acks", "Number of acks processed by status");
let nodes = context.family("nodes", "Number of nodes processed by status");
let verify = context.family("verify", "Number of application verifications by status");
let certificates = context.counter("certificates", "Number of certificates produced");
let propose = context.family("propose", "Number of propose attempts by status");
let rebroadcast = context.family("rebroadcast", "Number of rebroadcast attempts by status");
let verify_duration = context.histogram(
"verify_duration",
"Histogram of application verification durations",
histogram::Buckets::LOCAL,
);
let e2e_duration = context.histogram(
"e2e_duration",
"Histogram of time from new proposal to certificate generation",
histogram::Buckets::NETWORK,
);
Self {
sequencer_heights,
acks,
nodes,
verify,
certificates,
propose,
rebroadcast,
verify_duration: histogram::Timed::new(verify_duration),
e2e_duration: histogram::Timed::new(e2e_duration),
}
}
}