use std::sync::Arc;
use std::sync::atomic::{AtomicU64, Ordering};
use std::time::Duration;
use tracing::warn;
use vti_common::telemetry::{SharedTelemetrySink, TelemetryEvent, TelemetryKind};
pub use vti_common::relationship_store::{
KeyspaceRelationshipKv, KeyspaceRelationshipStore as VtaRelationshipStore, maintenance_loop,
};
const DROP_TELEMETRY_INTERVAL: Duration = Duration::from_secs(60);
pub async fn drop_telemetry_loop(drop_counter: Arc<AtomicU64>, telemetry: SharedTelemetrySink) {
let mut ticker = tokio::time::interval(DROP_TELEMETRY_INTERVAL);
let mut last = 0u64;
loop {
ticker.tick().await;
let total = drop_counter.load(Ordering::Relaxed);
let delta = total.saturating_sub(last);
last = total;
if delta == 0 {
continue;
}
let event = TelemetryEvent::new(TelemetryKind::TspRelationshipDropped)
.with_field("count", serde_json::json!(delta));
if let Err(e) = telemetry.record(event).await {
warn!(error = %e, "could not record TSP relationship-drop telemetry");
}
}
}