use std::sync::OnceLock;
use std::time::Duration;
use crate::cdp_conn::snapshot_live_conns;
const SAMPLE_INTERVAL: Duration = Duration::from_secs(60);
static STARTED: OnceLock<()> = OnceLock::new();
pub fn spawn_once() {
if tokio::runtime::Handle::try_current().is_err() {
return;
}
if STARTED.set(()).is_err() {
return;
}
tokio::spawn(async move {
let mut tick = tokio::time::interval(SAMPLE_INTERVAL);
tick.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay);
tick.tick().await;
loop {
tick.tick().await;
let (live, pending, subs) = snapshot_live_conns();
let m = crw_core::metrics::metrics();
m.cdp_live_connections.set(live as i64);
m.cdp_pending_requests.set(pending as i64);
tracing::info!(
cdp_live = live,
pending_total = pending,
subscribers_total = subs,
"cdp_telemetry"
);
}
});
}