refactor(observability): initialize metrics collection earlier in the startup sequence

Move the metrics thread and error channel initialization before the settling period and peer setup to ensure early telemetry is captured.
This commit is contained in:
Nils Andreas Svee committed 2026-04-13 17:34:17 +07:00
1 parent 699c8782d9
commit 1d7fd5800b
1 file changed
+16 -17
+16 -17
View File
@@ -80,6 +80,7 @@ fn main() -> anyhow::Result<()> {
} }
let (baseliner_stats_tx, baseliner_stats_rx) = channel(); let (baseliner_stats_tx, baseliner_stats_rx) = channel();
let (error_tx, error_rx) = channel::<anyhow::Error>();
let (reselect_tx, reselect_rx) = channel(); let (reselect_tx, reselect_rx) = channel();
let (metrics_tx, metrics_rx) = if config.observability_enabled { let (metrics_tx, metrics_rx) = if config.observability_enabled {
@@ -89,6 +90,21 @@ fn main() -> anyhow::Result<()> {
(None, None) (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 let ping_metrics_tx = metrics_tx
.as_ref() .as_ref()
.filter(|_| config.observability_export_ping_metrics) .filter(|_| config.observability_export_ping_metrics)
@@ -157,8 +173,6 @@ fn main() -> anyhow::Result<()> {
); );
sleep(settle_sleep_time); sleep(settle_sleep_time);
let (error_tx, error_rx) = channel::<anyhow::Error>();
let err_tx = error_tx.clone(); let err_tx = error_tx.clone();
let reflector_peers_lock_clone = reflector_peers_lock.clone(); let reflector_peers_lock_clone = reflector_peers_lock.clone();
thread::Builder::new() 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 original sender so recv() unblocks if all threads exit cleanly
drop(error_tx); drop(error_tx);