Add configurable retention for successful routine operations

This commit is contained in:
2026-10-05 13:09:44 -04:00
parent 2d069907f2
commit e6912ceb57
14 changed files with 590 additions and 32 deletions
+10 -4
View File
@@ -1,5 +1,6 @@
export interface FleetSettings {
deployKeepDays: number;
observationKeepDays: number;
restartConcurrency: number;
createConcurrency: number;
destroyConcurrency: number;
@@ -7,6 +8,7 @@ export interface FleetSettings {
export const defaultFleetSettings: FleetSettings = {
deployKeepDays: 7,
observationKeepDays: 1,
restartConcurrency: 1,
createConcurrency: 1,
destroyConcurrency: 1
@@ -14,6 +16,7 @@ export const defaultFleetSettings: FleetSettings = {
export const fleetSettingLabels: Record<keyof FleetSettings, string> = {
deployKeepDays: 'Campaign history retention',
observationKeepDays: 'Routine operation history retention',
restartConcurrency: 'Concurrent restarts',
createConcurrency: 'Concurrent server startups',
destroyConcurrency: 'Concurrent server destructions'
@@ -27,11 +30,14 @@ export function validateFleetSettings(input: unknown): FleetSettings {
}
for (const key of Object.keys(defaultFleetSettings) as (keyof FleetSettings)[]) {
const value = values[key];
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {
throw new Error(`${fleetSettingLabels[key]} must be a positive whole number.`);
const minimum = key === 'observationKeepDays' ? 0 : 1;
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum) {
throw new Error(`${fleetSettingLabels[key]} must be ${minimum === 0 ? 'zero or a positive whole number' : 'a positive whole number'}.`);
}
if ((key === 'deployKeepDays' || key === 'observationKeepDays') && value > 36500) {
throw new Error(`${fleetSettingLabels[key]} must be at most 36500 days.`);
}
if (key === 'deployKeepDays' && value > 36500) throw new Error('Campaign history retention must be at most 36500 days.');
}
return { deployKeepDays: values.deployKeepDays as number, restartConcurrency: values.restartConcurrency as number,
return { deployKeepDays: values.deployKeepDays as number, observationKeepDays: values.observationKeepDays as number, restartConcurrency: values.restartConcurrency as number,
createConcurrency: values.createConcurrency as number, destroyConcurrency: values.destroyConcurrency as number };
}