wlan_telemetry/processors/
recovery.rs

1// Copyright 2025 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4use crate::util::cobalt_logger::log_cobalt_batch;
5use fidl_fuchsia_metrics::{MetricEvent, MetricEventLoggerProxy, MetricEventPayload};
6
7use wlan_legacy_metrics_registry as metrics;
8
9pub struct RecoveryLogger {
10    cobalt_proxy: MetricEventLoggerProxy,
11}
12
13impl RecoveryLogger {
14    pub fn new(cobalt_proxy: MetricEventLoggerProxy) -> Self {
15        Self { cobalt_proxy }
16    }
17
18    pub async fn handle_recovery_event(&self) {
19        let metric_events = vec![MetricEvent {
20            metric_id: metrics::RECOVERY_OCCURRENCE_2_METRIC_ID,
21            event_codes: vec![],
22            payload: MetricEventPayload::Count(1),
23        }];
24        log_cobalt_batch!(self.cobalt_proxy, &metric_events, "handle_recovery_event");
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31    use crate::testing::{setup_test, TestHelper};
32    use futures::task::Poll;
33    use std::pin::pin;
34
35    fn run_handle_recovery_event(test_helper: &mut TestHelper, recovery_logger: &RecoveryLogger) {
36        let mut test_fut = pin!(recovery_logger.handle_recovery_event());
37        assert_eq!(
38            test_helper.run_until_stalled_drain_cobalt_events(&mut test_fut),
39            Poll::Ready(())
40        );
41    }
42
43    #[fuchsia::test]
44    fn test_handle_recovery_event() {
45        let mut test_helper = setup_test();
46        let recovery_logger = RecoveryLogger::new(test_helper.cobalt_proxy.clone());
47
48        run_handle_recovery_event(&mut test_helper, &recovery_logger);
49
50        let metrics = test_helper.get_logged_metrics(metrics::RECOVERY_OCCURRENCE_2_METRIC_ID);
51        assert_eq!(metrics.len(), 1);
52        assert_eq!(metrics[0].payload, MetricEventPayload::Count(1));
53    }
54}