Skip to main content

hyperi_rustlib/metrics/dfe_groups/
backpressure.rs

1// Project:   hyperi-rustlib
2// File:      src/metrics/dfe_groups/backpressure.rs
3// Purpose:   DFE backpressure metrics group
4// Language:  Rust
5//
6// License:   FSL-1.1-ALv2
7// Copyright: (c) 2026 HYPERI PTY LIMITED
8
9//! Backpressure metrics.
10
11use metrics::Counter;
12
13use super::super::MetricsManager;
14
15/// Backpressure event tracking.
16///
17/// Counts backpressure activations and cumulative pause duration.
18#[derive(Clone)]
19pub struct BackpressureMetrics {
20    pub events: Counter,
21    pub duration: Counter,
22}
23
24impl BackpressureMetrics {
25    #[must_use]
26    pub fn new(manager: &MetricsManager) -> Self {
27        Self {
28            events: manager.counter_with_labels(
29                "backpressure_events_total",
30                "Backpressure activation events",
31                &[],
32                "backpressure",
33            ),
34            duration: manager.counter_with_labels(
35                "backpressure_duration_seconds_total",
36                "Cumulative time paused by backpressure",
37                &[],
38                "backpressure",
39            ),
40        }
41    }
42
43    #[inline]
44    pub fn record_event(&self) {
45        self.events.increment(1);
46    }
47
48    /// Record backpressure pause duration in seconds.
49    #[inline]
50    pub fn record_duration(&self, seconds: f64) {
51        // Duration is always non-negative and fits in u64 for practical values.
52        #[allow(clippy::cast_sign_loss, clippy::cast_possible_truncation)]
53        self.duration.increment(seconds as u64);
54    }
55}