core will auto prune images daily on servers with feature enabled

This commit is contained in:
mbecker20
2023-01-09 05:53:20 +00:00
parent 7c5cd1553d
commit 5dc335595e
3 changed files with 40 additions and 0 deletions

View File

@@ -1,7 +1,10 @@
use std::{collections::HashMap, sync::Arc};
use async_timing_util::{ONE_HOUR_MS, wait_until_timelength, Timelength, unix_timestamp_ms};
use axum::Extension;
use db::DbClient;
use futures_util::future::join_all;
use mungos::doc;
use periphery::PeripheryClient;
use tokio::sync::Mutex;
use types::{BuildActionState, CoreConfig, DeploymentActionState, ServerActionState};
@@ -40,6 +43,8 @@ impl State {
let state = Arc::new(state);
let state_clone = state.clone();
tokio::spawn(async move { state_clone.collect_server_stats().await });
let state_clone = state.clone();
tokio::spawn(async move { state_clone.daily_image_prune().await });
if state.slack.is_some() {
let state_clone = state.clone();
tokio::spawn(async move { state_clone.daily_update().await });
@@ -54,4 +59,28 @@ impl State {
pub async fn extension(config: CoreConfig) -> StateExtension {
Extension(State::new(config).await)
}
async fn daily_image_prune(&self) {
let offset = self.config.daily_offset_hours as u128 * ONE_HOUR_MS;
loop {
wait_until_timelength(Timelength::OneDay, offset).await;
let servers = self
.db
.servers
.get_some(doc! { "enabled": true, "auto_prune": true }, None)
.await;
if let Err(e) = &servers {
eprintln!(
"{} | failed to get servers for daily prune | {e:#?}",
unix_timestamp_ms()
);
continue;
}
let futures = servers.unwrap().into_iter().map(|server| async move {
let _ = self.periphery.image_prune(&server).await;
let _ = self.periphery.container_prune(&server).await;
});
join_all(futures).await;
}
}
}

View File

@@ -18,6 +18,12 @@ pub async fn servers_collection(
coll.create_unique_index("name")
.await
.context("failed at creating name index")?;
coll.create_index("enabled")
.await
.context("failed to create enabled index")?;
coll.create_index("auto_prune")
.await
.context("failed to create auto_prune index")?;
Ok(coll)
}

View File

@@ -41,6 +41,10 @@ pub struct Server {
#[diff(attr(#[serde(skip_serializing_if = "vec_diff_no_change")]))]
pub to_notify: Vec<String>, // slack users to notify
#[serde(default)]
#[diff(attr(#[serde(skip_serializing_if = "Option::is_none")]))]
pub auto_prune: bool,
#[serde(default = "default_cpu_alert")]
#[diff(attr(#[serde(skip_serializing_if = "f32_diff_no_change")]))]
pub cpu_alert: f32,
@@ -81,6 +85,7 @@ impl Default for Server {
address: Default::default(),
permissions: Default::default(),
enabled: true,
auto_prune: false,
to_notify: Default::default(),
cpu_alert: default_cpu_alert(),
mem_alert: default_mem_alert(),