wlan_telemetry/processors/
iface.rs1use 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 IfaceLogger {
11 cobalt_proxy: MetricEventLoggerProxy,
12}
13
14impl IfaceLogger {
15 pub fn new(cobalt_proxy: MetricEventLoggerProxy) -> Self {
16 Self { cobalt_proxy }
17 }
18
19 pub async fn handle_iface_creation_failure(&self) {
20 let metric_events = vec![MetricEvent {
21 metric_id: metrics::INTERFACE_CREATION_FAILURE_METRIC_ID,
22 event_codes: vec![],
23 payload: MetricEventPayload::Count(1),
24 }];
25 log_cobalt_batch!(self.cobalt_proxy, &metric_events, "handle_iface_creation_failure");
26 }
27
28 pub async fn handle_iface_destruction_failure(&self) {
29 let metric_events = vec![MetricEvent {
30 metric_id: metrics::INTERFACE_DESTRUCTION_FAILURE_METRIC_ID,
31 event_codes: vec![],
32 payload: MetricEventPayload::Count(1),
33 }];
34 log_cobalt_batch!(self.cobalt_proxy, &metric_events, "handle_iface_destruction_failure");
35 }
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41 use crate::testing::{setup_test, TestHelper};
42 use futures::task::Poll;
43 use std::pin::pin;
44
45 fn run_handle_iface_creation_failure(test_helper: &mut TestHelper, iface_logger: &IfaceLogger) {
46 let mut test_fut = pin!(iface_logger.handle_iface_creation_failure());
47 assert_eq!(
48 test_helper.run_until_stalled_drain_cobalt_events(&mut test_fut),
49 Poll::Ready(())
50 );
51 }
52
53 fn run_handle_iface_destruction_failure(
54 test_helper: &mut TestHelper,
55 iface_logger: &IfaceLogger,
56 ) {
57 let mut test_fut = pin!(iface_logger.handle_iface_destruction_failure());
58 assert_eq!(
59 test_helper.run_until_stalled_drain_cobalt_events(&mut test_fut),
60 Poll::Ready(())
61 );
62 }
63
64 #[fuchsia::test]
65 fn test_handle_iface_creation_failure() {
66 let mut test_helper = setup_test();
67 let iface_logger = IfaceLogger::new(test_helper.cobalt_proxy.clone());
68
69 run_handle_iface_creation_failure(&mut test_helper, &iface_logger);
70
71 let metrics = test_helper.get_logged_metrics(metrics::INTERFACE_CREATION_FAILURE_METRIC_ID);
72 assert_eq!(metrics.len(), 1);
73 assert_eq!(metrics[0].payload, MetricEventPayload::Count(1));
74 }
75
76 #[fuchsia::test]
77 fn test_handle_iface_event() {
78 let mut test_helper = setup_test();
79 let iface_logger = IfaceLogger::new(test_helper.cobalt_proxy.clone());
80
81 run_handle_iface_destruction_failure(&mut test_helper, &iface_logger);
82
83 let metrics =
84 test_helper.get_logged_metrics(metrics::INTERFACE_DESTRUCTION_FAILURE_METRIC_ID);
85 assert_eq!(metrics.len(), 1);
86 assert_eq!(metrics[0].payload, MetricEventPayload::Count(1));
87 }
88}