mirror of
https://github.com/moghtech/komodo.git
synced 2026-04-28 19:59:46 -05:00
core will auto prune images daily on servers with feature enabled
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user