use tokio::task::JoinHandle; use tracing::info; use pom::db; pub(crate) fn spawn_prune_task( pool: &sqlx::SqlitePool, prune_days: i64, cancel: &tokio_util::sync::CancellationToken, ) -> JoinHandle<()> { let pool = pool.clone(); let cancel = cancel.clone(); tokio::spawn(async move { let mut interval = tokio::time::interval( std::time::Duration::from_secs(86400), ); interval.tick().await; // consume immediate first tick loop { tokio::select! { _ = cancel.cancelled() => break, _ = interval.tick() => {} } match db::prune_old_records(&pool, prune_days).await { Ok(r) => info!("Pruned {} health checks, {} test runs, {} test details, {} peer heartbeats, {} alerts, {} TLS checks, {} incidents, {} route checks, {} DNS checks, {} WHOIS checks", r.health, r.tests, r.test_details, r.heartbeats, r.alerts, r.tls, r.incidents, r.routes, r.dns, r.whois), Err(e) => tracing::error!("Prune failed: {e}"), } } }) }