//! Background retention task that periodically prunes old records. use tokio::task::JoinHandle; use tracing::info; use pom::db; use super::CheckInterval; 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 ticks = CheckInterval::new(86400, cancel); while ticks.next().await { 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, {} backup checks, {} systemd checks", r.health, r.tests, r.test_details, r.heartbeats, r.alerts, r.tls, r.incidents, r.routes, r.dns, r.whois, r.backups, r.systemd ), Err(e) => tracing::error!("Prune failed: {e}"), } } }) }