diff --git a/src/main.rs b/src/main.rs index f893d76..ffbf3cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -80,6 +80,7 @@ fn main() -> anyhow::Result<()> { } let (baseliner_stats_tx, baseliner_stats_rx) = channel(); + let (error_tx, error_rx) = channel::(); let (reselect_tx, reselect_rx) = channel(); let (metrics_tx, metrics_rx) = if config.observability_enabled { @@ -89,6 +90,21 @@ fn main() -> anyhow::Result<()> { (None, None) }; + if let Some(rx) = metrics_rx { + let metrics = Metrics { + config: config.clone(), + metrics_rx: rx, + }; + let err_tx = error_tx.clone(); + thread::Builder::new() + .name("metrics".to_string()) + .spawn(move || { + if let Err(e) = metrics.run() { + let _ = err_tx.send(e); + } + })?; + } + let ping_metrics_tx = metrics_tx .as_ref() .filter(|_| config.observability_export_ping_metrics) @@ -157,8 +173,6 @@ fn main() -> anyhow::Result<()> { ); sleep(settle_sleep_time); - let (error_tx, error_rx) = channel::(); - let err_tx = error_tx.clone(); let reflector_peers_lock_clone = reflector_peers_lock.clone(); thread::Builder::new() @@ -266,21 +280,6 @@ fn main() -> anyhow::Result<()> { } })?; - if let Some(rx) = metrics_rx { - let metrics = Metrics { - config, - metrics_rx: rx, - }; - let err_tx = error_tx.clone(); - thread::Builder::new() - .name("metrics".to_string()) - .spawn(move || { - if let Err(e) = metrics.run() { - let _ = err_tx.send(e); - } - })?; - } - // Drop original sender so recv() unblocks if all threads exit cleanly drop(error_tx);