commonware-consensus 2026.5.0

Order opaque messages in a Byzantine environment.
Documentation
use commonware_runtime::{
    telemetry::metrics::{histogram, status, Counter, Gauge, MetricsExt as _},
    Metrics as RuntimeMetrics,
};

/// Metrics for the [super::Engine].
pub struct Metrics {
    /// Lowest height without a certificate
    pub tip: Gauge,
    /// Number of digests returned by the automaton by status
    pub digest: status::Counter,
    /// Number of [super::types::Ack] messages processed by status
    pub acks: status::Counter,
    /// Number of certificates produced
    pub certificates: Counter,
    /// Histogram of application digest durations
    pub digest_duration: histogram::Timed,
}

impl Metrics {
    /// Create and return a new set of metrics, registered with the given context.
    pub fn init(context: &impl RuntimeMetrics) -> Self {
        let tip = context.gauge("tip", "Lowest height without a certificate");
        let digest = context.family(
            "digest",
            "Number of digests returned by the automaton by status",
        );
        let acks = context.family("acks", "Number of Ack messages processed by status");
        let certificates = context.counter("certificates", "Number of certificates produced");
        let digest_duration = context.histogram(
            "digest_duration",
            "Histogram of application digest durations",
            histogram::Buckets::LOCAL,
        );

        Self {
            tip,
            digest,
            acks,
            certificates,
            digest_duration: histogram::Timed::new(digest_duration),
        }
    }
}