Files
oott/backend/src/retention.rs
T
rzuastiandClaude Sonnet 4.6 c7e1678407 Add retention policy for device_events and notifications
Purges records older than a configurable window (default 365d) once per day.
Also adds a composite index on device_events(mac_address, created_on DESC) for
efficient scan history queries at scale, and fixes a non-deterministic pagination
order by adding id as a tiebreaker to ORDER BY.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:00:36 -04:00

34 lines
1.1 KiB
Rust

use crate::db;
use crate::settings::get_settings;
use chrono::Utc;
use log::{error, info};
use tokio::time::{Duration, sleep};
pub async fn run() {
loop {
let window: std::time::Duration = get_settings().retention.window.into();
let cutoff = match chrono::Duration::from_std(window) {
Ok(d) => Utc::now() - d,
Err(e) => {
error!("Retention: invalid window duration: {}", e);
sleep(Duration::from_secs(24 * 60 * 60)).await;
continue;
}
};
info!("Retention: purging records older than {}", cutoff);
match db::device_events::purge_older_than(cutoff) {
Ok(count) => info!("Retention: purged {} device event(s)", count),
Err(e) => error!("Retention: error purging device events: {}", e),
}
match db::notifications::purge_older_than(cutoff) {
Ok(count) => info!("Retention: purged {} notification(s)", count),
Err(e) => error!("Retention: error purging notifications: {}", e),
}
sleep(Duration::from_secs(24 * 60 * 60)).await;
}
}