From 2d58d356a69e4130dbdeb76b9d6b75b7d2fc8d87 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Wed, 2 Apr 2025 06:41:21 +0000 Subject: [PATCH] feat: add configurable minimum age for lost servers --- .../services/cluster/src/ops/server/lost_list.rs | 12 ++++++++---- .../cluster/src/ops/server/prune_with_filter.rs | 3 +++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/core/services/cluster/src/ops/server/lost_list.rs b/packages/core/services/cluster/src/ops/server/lost_list.rs index c41e77be4e..9c0a279e36 100644 --- a/packages/core/services/cluster/src/ops/server/lost_list.rs +++ b/packages/core/services/cluster/src/ops/server/lost_list.rs @@ -22,6 +22,8 @@ struct Linode { #[derive(Debug)] pub struct Input { pub filter: Filter, + /// Minimum age of servers to consider lost (in minutes, default: 720 [12 hours]) + pub min_age: Option, } #[derive(Debug)] @@ -30,7 +32,7 @@ pub struct Output { } /// Fetches deleted servers directly from the cloud providers own APIs and returns existing servers older -/// than 12 hours. +/// than the specified minimum age (defaults to 720 minutes [12 hours]). #[operation] #[timeout = 300] pub async fn cluster_server_lost_list(ctx: &OperationCtx, input: &Input) -> GlobalResult { @@ -78,7 +80,7 @@ pub async fn cluster_server_lost_list(ctx: &OperationCtx, input: &Input) -> Glob } Provider::Linode => { servers.extend( - run_for_linode_account(ctx, &input.filter, &api_token, &headers).await?, + run_for_linode_account(ctx, &input.filter, &api_token, &headers, input.min_age).await?, ); } } @@ -92,6 +94,7 @@ async fn run_for_linode_account( filter: &Filter, api_token: &str, headers: &header::HeaderMap, + min_age: Option, ) -> GlobalResult> { // Build HTTP client let client = client::Client::new_with_headers(api_token.to_string(), headers.clone()).await?; @@ -110,12 +113,13 @@ async fn run_for_linode_account( tracing::info!("{} servers in account", res.data.len()); let server_config = ctx.config().server()?; + let min_age_minutes = min_age.unwrap_or(720) as i64; // Default 720 minutes (12 hours) let server_ids = res .data .into_iter() - // Filter out servers younger than 12 hours + // Filter out servers younger than min_age .filter(|linode| { - linode.created.and_utc().timestamp_millis() < ctx.ts() - util::duration::hours(12) + linode.created.and_utc().timestamp_millis() < ctx.ts() - util::duration::minutes(min_age_minutes) }) // Parse server ID from linode label .filter_map(|linode| { diff --git a/packages/core/services/cluster/src/ops/server/prune_with_filter.rs b/packages/core/services/cluster/src/ops/server/prune_with_filter.rs index 80e746e9da..6cb0a2d514 100644 --- a/packages/core/services/cluster/src/ops/server/prune_with_filter.rs +++ b/packages/core/services/cluster/src/ops/server/prune_with_filter.rs @@ -13,6 +13,8 @@ use crate::{ #[derive(Debug)] pub struct Input { pub filter: Filter, + /// Minimum age of servers to consider lost (in minutes, default: 720 [12 hours]) + pub min_age: Option, } #[derive(Debug)] @@ -27,6 +29,7 @@ pub async fn cluster_server_prune_with_filter( let servers_res = ctx .op(crate::ops::server::lost_list::Input { filter: input.filter.clone(), + min_age: input.min_age, }) .await?;