mirror of
https://github.com/rzuasti/oott.git
synced 2026-07-08 19:21:54 +02:00
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>
34 lines
1.1 KiB
Rust
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;
|
|
}
|
|
}
|