use std::sync::Arc;
use std::time::Duration;
use assay_domain::events::EngineEventBus;
pub async fn run_events_cleanup(bus: Arc<dyn EngineEventBus>, cadence: Duration, ttl_secs: u64) {
let mut tick = tokio::time::interval(cadence);
tick.tick().await; loop {
tick.tick().await;
let cutoff = now_secs() - ttl_secs as f64;
match bus.prune(cutoff).await {
Ok(n) if n > 0 => tracing::info!(pruned = n, "engine_events cleanup swept"),
Ok(_) => tracing::debug!("engine_events cleanup: nothing to prune"),
Err(e) => tracing::warn!(?e, "engine_events prune failed; will retry next tick"),
}
}
}
fn now_secs() -> f64 {
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_secs_f64()
}