wlan_telemetry/processors/
sme_timeout.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.
4
5use crate::util::cobalt_logger::log_cobalt_batch;
6use fidl_fuchsia_metrics::{MetricEvent, MetricEventLoggerProxy, MetricEventPayload};
7
8use wlan_legacy_metrics_registry as metrics;
9
10pub struct SmeTimeoutLogger {
11    cobalt_proxy: MetricEventLoggerProxy,
12}
13
14impl SmeTimeoutLogger {
15    pub fn new(cobalt_proxy: MetricEventLoggerProxy) -> Self {
16        Self { cobalt_proxy }
17    }
18
19    pub async fn handle_sme_timeout_event(&self) {
20        let metric_events = vec![MetricEvent {
21            metric_id: metrics::SME_OPERATION_TIMEOUT_2_METRIC_ID,
22            event_codes: vec![],
23            payload: MetricEventPayload::Count(1),
24        }];
25        log_cobalt_batch!(self.cobalt_proxy, &metric_events, "handle_sme_timeout_event");
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use super::*;
32    use crate::testing::{setup_test, TestHelper};
33    use futures::task::Poll;
34    use std::pin::pin;
35
36    fn run_handle_sme_timeout_event(
37        test_helper: &mut TestHelper,
38        sme_timeout_logger: &SmeTimeoutLogger,
39    ) {
40        let mut test_fut = pin!(sme_timeout_logger.handle_sme_timeout_event());
41        assert_eq!(
42            test_helper.run_until_stalled_drain_cobalt_events(&mut test_fut),
43            Poll::Ready(())
44        );
45    }
46
47    #[fuchsia::test]
48    fn test_handle_sme_timeout_event() {
49        let mut test_helper = setup_test();
50        let sme_timeout_logger = SmeTimeoutLogger::new(test_helper.cobalt_proxy.clone());
51
52        run_handle_sme_timeout_event(&mut test_helper, &sme_timeout_logger);
53
54        let metrics = test_helper.get_logged_metrics(metrics::SME_OPERATION_TIMEOUT_2_METRIC_ID);
55        assert_eq!(metrics.len(), 1);
56        assert_eq!(metrics[0].payload, MetricEventPayload::Count(1));
57    }
58}