Skip to main content

actionqueue_daemon/metrics/
mod.rs

1//! Prometheus metrics surfaces for the daemon.
2//!
3//! This module provides the daemon-scoped metrics registry and registration
4//! helpers used by the `/metrics` export route.
5
6pub mod attempts;
7pub mod recovery;
8pub mod registry;
9pub mod runs;
10pub mod wal;
11
12#[cfg_attr(not(test), allow(dead_code))]
13/// Returns authoritative daemon Unix time for metrics derivation paths.
14///
15/// This function is the required source for scheduling-lag time derivation
16/// and reads from the router state's injected authoritative clock handle.
17pub(crate) fn lag_now(state: &crate::http::RouterStateInner) -> u64 {
18    state.clock.now()
19}
20
21#[cfg(test)]
22mod tests {
23    use std::sync::Arc;
24
25    use actionqueue_storage::recovery::bootstrap::RecoveryObservations;
26    use actionqueue_storage::recovery::reducer::ReplayReducer;
27    use actionqueue_storage::wal::WalAppendTelemetry;
28
29    use super::lag_now;
30    use crate::bootstrap::{ReadyStatus, RouterConfig};
31    use crate::metrics::registry::MetricsRegistry;
32    use crate::time::clock::{MockClock, SharedDaemonClock};
33
34    #[test]
35    fn lag_now_uses_router_state_injected_clock() {
36        let clock: SharedDaemonClock = Arc::new(MockClock::new(424_242));
37        let metrics =
38            Arc::new(MetricsRegistry::new(None).expect("metrics registry should initialize"));
39        let state = crate::http::RouterStateInner::new(
40            RouterConfig { control_enabled: false, metrics_enabled: false },
41            Arc::new(std::sync::RwLock::new(ReplayReducer::new())),
42            crate::http::RouterObservability {
43                metrics,
44                wal_append_telemetry: WalAppendTelemetry::new(),
45                clock,
46                recovery_observations: RecoveryObservations::zero(),
47            },
48            ReadyStatus::ready(),
49        );
50
51        assert_eq!(lag_now(&state), 424_242);
52    }
53}