Skip to main content

max / pom

1.1 KB · 31 lines History Blame Raw
1 use tokio::task::JoinHandle;
2 use tracing::info;
3
4 use pom::db;
5
6 pub(crate) fn spawn_prune_task(
7 pool: &sqlx::SqlitePool,
8 prune_days: i64,
9 cancel: &tokio_util::sync::CancellationToken,
10 ) -> JoinHandle<()> {
11 let pool = pool.clone();
12 let cancel = cancel.clone();
13
14 tokio::spawn(async move {
15 let mut interval = tokio::time::interval(
16 std::time::Duration::from_secs(86400),
17 );
18 interval.tick().await; // consume immediate first tick
19 loop {
20 tokio::select! {
21 _ = cancel.cancelled() => break,
22 _ = interval.tick() => {}
23 }
24 match db::prune_old_records(&pool, prune_days).await {
25 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),
26 Err(e) => tracing::error!("Prune failed: {e}"),
27 }
28 }
29 })
30 }
31