pub struct ServerSettings {
pub agent_prune_days: Option<u32>,
}Expand description
Value stored in the server_settings KV bucket under the single key
crate::kv::KEY_SERVER_SETTINGS. Operator-editable, backend-side
server configuration that isn’t per-agent (so it doesn’t belong in
agent_config’s layered scopes) and isn’t a fleet-wide switch every
agent watches (so it doesn’t belong in fleet_config). Managed via
the SPA Settings page’s “server settings” tab.
Every field is Option<_>: None (the default / the JSON value
null / the field simply absent) means unset — fall back to the
built-in default (ServerSettings::defaults), exactly like the
agent layered-config scopes. The SPA renders the built-in default as a
faint placeholder so a blank field shows what it resolves to, and when
a real default is introduced here it appears in the UI (and takes
effect for already-deployed-but-unset fleets) for free.
#[serde(default)] on the container keeps the document backward/forward
compatible: a freshly-created or missing key decodes to all-None
(pre-feature behaviour), an older backend reading a newer document
ignores unknown fields, and a newer backend reading an older document
fills the missing field with None. Keep that invariant — never add a
field whose None doesn’t mean “behave as before”.
Fields§
§agent_prune_days: Option<u32>Days a dead agent (one whose heartbeat stopped arriving) may
linger in the agents registry before the backend cleanup task
prunes its row.
None (unset) falls back to the built-in default; with no default
configured that resolves to pruning disabled (see
ServerSettings::effective_agent_prune_days). A positive value
makes the cleanup sweep delete rows whose last_heartbeat is older
than that many days. The agents table is a projection of the
heartbeat stream, so a machine that’s merely offline (not gone)
reappears on its next heartbeat (~30s cadence); only
genuinely-retired machines stay gone.
Implementations§
Source§impl ServerSettings
impl ServerSettings
Sourcepub fn defaults() -> Self
pub fn defaults() -> Self
Built-in defaults applied when a field is unset (None) in the
stored document. Currently every field is None: there’s no
fleet-meaningful default prune window, so leaving it blank means
“disabled” rather than some arbitrary number of days.
Exposed via GET /api/server-settings/defaults so the SPA renders
these as faint placeholders (mirroring the agent layered-config
page’s built-in floor). Introducing a real default later is a
one-line change here that automatically shows up in the UI and
applies to every deployment that hasn’t overridden the field.
Sourcepub fn effective_agent_prune_days(&self) -> u32
pub fn effective_agent_prune_days(&self) -> u32
The effective dead-agent prune window in days: the stored value if
set, else the built-in default, else 0 (= pruning disabled). The
final unwrap_or(0) is the absent-everywhere floor, not a
user-facing default — the cleanup task treats 0 as “don’t prune”.
Clamped to MAX_AGENT_PRUNE_DAYS so the cleanup task’s
now - Duration::days(n) can never overflow DateTime (and panic
the task), even if a value larger than the PUT handler allows was
written to the KV out-of-band.
Trait Implementations§
Source§impl Clone for ServerSettings
impl Clone for ServerSettings
Source§fn clone(&self) -> ServerSettings
fn clone(&self) -> ServerSettings
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ServerSettings
impl Debug for ServerSettings
Source§impl Default for ServerSettings
impl Default for ServerSettings
Source§fn default() -> ServerSettings
fn default() -> ServerSettings
Source§impl<'de> Deserialize<'de> for ServerSettingswhere
ServerSettings: Default,
impl<'de> Deserialize<'de> for ServerSettingswhere
ServerSettings: Default,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ServerSettings
Source§impl PartialEq for ServerSettings
impl PartialEq for ServerSettings
Source§fn eq(&self, other: &ServerSettings) -> bool
fn eq(&self, other: &ServerSettings) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for ServerSettings
impl Serialize for ServerSettings
impl StructuralPartialEq for ServerSettings
Auto Trait Implementations§
impl Freeze for ServerSettings
impl RefUnwindSafe for ServerSettings
impl Send for ServerSettings
impl Sync for ServerSettings
impl Unpin for ServerSettings
impl UnsafeUnpin for ServerSettings
impl UnwindSafe for ServerSettings
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.