visual-journal / src /lib /app-log-retention.ts
misonL's picture
Deploy 0359483 to Docker Space
11486ce verified
Raw
History Blame Contribute Delete
1.83 kB
export const APP_LOG_DEFAULT_MAX_ENTRIES = 300;
export const APP_LOG_MIN_ENTRIES = 100;
export const APP_LOG_MAX_CONFIGURED_ENTRIES = 5000;
export const APP_LOG_RETENTION_STORAGE = 'bounded_local_jsonl';
export const APP_LOG_MAX_ENTRIES_ENV = 'APP_LOG_MAX_ENTRIES';
export const APP_LOG_RETENTION_LOSS_MODES = [
'entry_evicted_by_max_entries',
'log_level_filter',
'local_log_file_missing_or_cleared'
] as const;
export type AppLogRetentionMetadata = {
storage: typeof APP_LOG_RETENTION_STORAGE;
max_entries: number;
default_max_entries: number;
min_entries: number;
max_configured_entries: number;
configured_by: typeof APP_LOG_MAX_ENTRIES_ENV;
persisted_across_process_restart: true;
loss_modes: typeof APP_LOG_RETENTION_LOSS_MODES;
};
function readConfiguredMaxLogEntries(env: Record<string, string | undefined>): number {
const configured = env[APP_LOG_MAX_ENTRIES_ENV]?.trim();
if (!configured) return APP_LOG_DEFAULT_MAX_ENTRIES;
if (!/^\d+$/.test(configured)) return APP_LOG_DEFAULT_MAX_ENTRIES;
const parsed = Number(configured);
if (!Number.isSafeInteger(parsed)) return APP_LOG_DEFAULT_MAX_ENTRIES;
return Math.min(APP_LOG_MAX_CONFIGURED_ENTRIES, Math.max(APP_LOG_MIN_ENTRIES, parsed));
}
export function readAppLogRetentionMetadata(
env: Record<string, string | undefined> = process.env
): AppLogRetentionMetadata {
return {
storage: APP_LOG_RETENTION_STORAGE,
max_entries: readConfiguredMaxLogEntries(env),
default_max_entries: APP_LOG_DEFAULT_MAX_ENTRIES,
min_entries: APP_LOG_MIN_ENTRIES,
max_configured_entries: APP_LOG_MAX_CONFIGURED_ENTRIES,
configured_by: APP_LOG_MAX_ENTRIES_ENV,
persisted_across_process_restart: true,
loss_modes: APP_LOG_RETENTION_LOSS_MODES
};
}