[wlan][policy] Log network selection decisions

Bug: 67605
Test: fx test wlancfg-tests
Change-Id: Iba531dcb06f778cad8f1393d8d938495e068fcf8
diff --git a/src/connectivity/wlan/wlancfg/src/client/network_selection.rs b/src/connectivity/wlan/wlancfg/src/client/network_selection.rs
index f98acb1..f5d7676 100644
--- a/src/connectivity/wlan/wlancfg/src/client/network_selection.rs
+++ b/src/connectivity/wlan/wlancfg/src/client/network_selection.rs
@@ -10,6 +10,7 @@
         },
         config_management::{self, Credential, SavedNetworksManager},
         mode_management::iface_manager_api::IfaceManagerApi,
+        util::telemetry::Telemetry,
     },
     async_trait::async_trait,
     fidl_fuchsia_wlan_internal as fidl_internal, fidl_fuchsia_wlan_sme as fidl_sme,
@@ -45,6 +46,7 @@
     saved_network_manager: Arc<SavedNetworksManager>,
     scan_result_cache: Arc<Mutex<ScanResultCache>>,
     cobalt_api: Arc<Mutex<CobaltSender>>,
+    telemetry: impl ConnectionTrackerApi,
 }
 
 struct ScanResultCache {
@@ -78,10 +80,24 @@
         }
         return rssi;
     }
+
+    fn to_telemetry_candidate(&self) -> telemetry::CandidateBss {
+        let channel = Channel::from_fidl(self.bss_info.channel);
+        telemetry::CandidateBss {
+            rssi: self.bss_info.rssi,
+            recent_failure_count: self.network_info.recent_failure_count,
+            band: if channel.is_5ghz() {
+                types::Band::WlanBand5Ghz
+            } else {
+                types::Band::WlanBand2Ghz
+            },
+            score: self.score(),
+        }
+    }
 }
 
 impl NetworkSelector {
-    pub fn new(saved_network_manager: Arc<SavedNetworksManager>, cobalt_api: CobaltSender) -> Self {
+    pub fn new(saved_network_manager: Arc<SavedNetworksManager>, cobalt_api: CobaltSender, telemetry: Telemetry) -> Self {
         Self {
             saved_network_manager,
             scan_result_cache: Arc::new(Mutex::new(ScanResultCache {
@@ -89,6 +105,7 @@
                 results: Vec::new(),
             })),
             cobalt_api: Arc::new(Mutex::new(cobalt_api)),
+            telemetry
         }
     }
 
diff --git a/src/connectivity/wlan/wlancfg/src/main.rs b/src/connectivity/wlan/wlancfg/src/main.rs
index 7a9a5ad..e325ff3 100644
--- a/src/connectivity/wlan/wlancfg/src/main.rs
+++ b/src/connectivity/wlan/wlancfg/src/main.rs
@@ -21,6 +21,7 @@
             create_iface_manager, iface_manager_api::IfaceManagerApi, phy_manager::PhyManager,
         },
         regulatory_manager::RegulatoryManager,
+        util::telemetry::Telemetry,
     },
     anyhow::{format_err, Context as _, Error},
     fidl_fuchsia_location_namedplace::RegulatoryRegionWatcherMarker,
@@ -214,11 +215,15 @@
         .context("failed to connect to device service")?;
     let (cobalt_api, cobalt_fut) =
         CobaltConnector::default().serve(ConnectionType::project_id(metrics::PROJECT_ID));
+    let telemetry = Telemetry::new(component::inspector().root());
 
     let saved_networks =
         Arc::new(executor.run_singlethreaded(SavedNetworksManager::new(cobalt_api.clone()))?);
-    let network_selector =
-        Arc::new(NetworkSelector::new(Arc::clone(&saved_networks), cobalt_api.clone()));
+    let network_selector = Arc::new(NetworkSelector::new(
+        Arc::clone(&saved_networks),
+        cobalt_api.clone(),
+        telemetry.clone(),
+    ));
 
     let phy_manager = Arc::new(Mutex::new(PhyManager::new(
         wlan_svc.clone(),
diff --git a/src/connectivity/wlan/wlancfg/src/util/telemetry/mod.rs b/src/connectivity/wlan/wlancfg/src/util/telemetry/mod.rs
index b347a98..74edcce 100644
--- a/src/connectivity/wlan/wlancfg/src/util/telemetry/mod.rs
+++ b/src/connectivity/wlan/wlancfg/src/util/telemetry/mod.rs
@@ -2,10 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#![allow(unused_variables)]
-#![allow(unused_imports)]
-#![allow(dead_code)]
-
 use {
     crate::client::types,
     fuchsia_inspect::{self as inspect},