refactor(main): integrate MetricsSender across application entry point

This commit is contained in:
Nils Andreas Svee committed 2026-04-13 18:57:51 +07:00
1 parent 2db63e6159
commit 60e7ffc9e7
1 file changed
+27 -37
+27 -37
View File
@@ -84,17 +84,14 @@ fn main() -> anyhow::Result<()> {
let (error_tx, error_rx) = channel::<anyhow::Error>(); 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 dropped = Arc::new(AtomicU64::new(0));
let (tx, rx) = sync_channel(1000);
(Some(tx), Some(rx))
} else {
(None, None)
};
if let Some(rx) = metrics_rx { let metrics_tx = if config.observability_enabled {
let (tx, rx) = sync_channel(1000);
let metrics = Metrics { let metrics = Metrics {
config: config.clone(), config: config.clone(),
metrics_rx: rx, metrics_rx: rx,
metrics_dropped: Arc::clone(&dropped),
}; };
let err_tx = error_tx.clone(); let err_tx = error_tx.clone();
thread::Builder::new() thread::Builder::new()
@@ -104,36 +101,29 @@ fn main() -> anyhow::Result<()> {
let _ = err_tx.send(e); let _ = err_tx.send(e);
} }
})?; })?;
} Some(tx)
} else {
None
};
if let Some(tx) = metrics_tx.clone() { let make_sender = |enabled: bool| -> MetricsSender {
let _ = tx.try_send(Metric::Event { metrics_tx
.as_ref()
.filter(|_| enabled)
.map(|tx| MetricsSender::new(tx.clone(), Arc::clone(&dropped)))
.unwrap_or_else(MetricsSender::disabled)
};
let ping_metrics = make_sender(config.observability_export_ping_metrics);
let baseline_metrics = make_sender(config.observability_export_baseline_metrics);
let event_metrics = make_sender(config.observability_export_events);
let rate_metrics = make_sender(config.observability_export_rate_metrics);
event_metrics.send(Metric::Event {
name: "starting", name: "starting",
reason: "", reason: "",
reflector: None, reflector: None,
timestamp_ns: Time::new(ClockId::Realtime).as_nanos(),
}); });
}
let ping_metrics_tx = metrics_tx
.as_ref()
.filter(|_| config.observability_export_ping_metrics)
.cloned();
let baseline_metrics_tx = metrics_tx
.as_ref()
.filter(|_| config.observability_export_baseline_metrics)
.cloned();
let event_metrics_tx = metrics_tx
.as_ref()
.filter(|_| config.observability_export_events)
.cloned();
let rate_metrics_tx = metrics_tx
.as_ref()
.filter(|_| config.observability_export_rate_metrics)
.cloned();
let (mut ping_listener, mut ping_sender) = match config.measurement_type { let (mut ping_listener, mut ping_sender) = match config.measurement_type {
MeasurementType::Icmp => ( MeasurementType::Icmp => (
@@ -156,8 +146,8 @@ fn main() -> anyhow::Result<()> {
reselect_trigger: reselect_tx.clone(), reselect_trigger: reselect_tx.clone(),
start_time: start_t, start_time: start_t,
stats_rx: baseliner_stats_rx, stats_rx: baseliner_stats_rx,
baseline_metrics_tx, baseline_metrics,
event_metrics_tx: event_metrics_tx.clone(), event_metrics: event_metrics.clone(),
}; };
let down_qdisc = Netlink::qdisc_from_ifname(config.download_interface.as_str())?; let down_qdisc = Netlink::qdisc_from_ifname(config.download_interface.as_str())?;
@@ -193,7 +183,7 @@ fn main() -> anyhow::Result<()> {
config.measurement_type, config.measurement_type,
reflector_peers_lock_clone, reflector_peers_lock_clone,
baseliner_stats_tx, baseliner_stats_tx,
ping_metrics_tx, ping_metrics,
) { ) {
let _ = err_tx.send(e); let _ = err_tx.send(e);
} }
@@ -230,7 +220,7 @@ fn main() -> anyhow::Result<()> {
reflector_peers_lock: reflector_peers_lock.clone(), reflector_peers_lock: reflector_peers_lock.clone(),
reflector_pool, reflector_pool,
trigger_channel: reselect_rx, trigger_channel: reselect_rx,
metrics_tx: event_metrics_tx, metrics: event_metrics,
}; };
let err_tx = error_tx.clone(); let err_tx = error_tx.clone();
thread::Builder::new() thread::Builder::new()
@@ -268,7 +258,7 @@ fn main() -> anyhow::Result<()> {
reselect_tx, reselect_tx,
dl_direction, dl_direction,
ul_direction, ul_direction,
rate_metrics_tx, rate_metrics,
)?; )?;
debug!( debug!(