Files
komodo/bin/core/src/helpers/prune.rs
2024-04-27 15:09:30 -07:00

65 lines
1.5 KiB
Rust

use async_timing_util::{
unix_timestamp_ms, wait_until_timelength, Timelength, ONE_DAY_MS,
};
use mungos::mongodb::bson::doc;
use crate::{config::core_config, state::db_client};
pub fn spawn_prune_loop() {
tokio::spawn(async move {
loop {
wait_until_timelength(Timelength::OneDay, 5000).await;
let (stats_res, alerts_res) =
tokio::join!(prune_stats(), prune_alerts());
if let Err(e) = stats_res {
error!("error in pruning stats | {e:#}");
}
if let Err(e) = alerts_res {
error!("error in pruning alerts | {e:#}");
}
}
});
}
async fn prune_stats() -> anyhow::Result<()> {
if core_config().keep_stats_for_days == 0 {
return Ok(());
}
let delete_before_ts = (unix_timestamp_ms()
- core_config().keep_stats_for_days as u128 * ONE_DAY_MS)
as i64;
let res = db_client()
.await
.stats
.delete_many(
doc! {
"ts": { "$lt": delete_before_ts }
},
None,
)
.await?;
info!("deleted {} stats from db", res.deleted_count);
Ok(())
}
async fn prune_alerts() -> anyhow::Result<()> {
if core_config().keep_alerts_for_days == 0 {
return Ok(());
}
let delete_before_ts = (unix_timestamp_ms()
- core_config().keep_alerts_for_days as u128 * ONE_DAY_MS)
as i64;
let res = db_client()
.await
.alerts
.delete_many(
doc! {
"ts": { "$lt": delete_before_ts }
},
None,
)
.await?;
info!("deleted {} alerts from db", res.deleted_count);
Ok(())
}