feat(hermes): add session store maintenance controls

This commit is contained in:
晴天
2026-05-27 02:14:20 +08:00
parent d2236afc2d
commit 77ab060e9c
8 changed files with 519 additions and 14 deletions

View File

@@ -5255,6 +5255,36 @@ export function mergeHermesCronConfig(config = {}, form = {}) {
return next
}
export function buildHermesSessionsMaintenanceConfigValues(config = {}) {
const root = config && typeof config === 'object' && !Array.isArray(config) ? config : {}
const sessions = root.sessions && typeof root.sessions === 'object' && !Array.isArray(root.sessions)
? root.sessions
: {}
return {
sessionsAutoPrune: readHermesBool(sessions.auto_prune, false),
sessionsRetentionDays: parseHermesInteger(sessions.retention_days, 'sessions.retention_days', 90, 1, 36500, false),
sessionsVacuumAfterPrune: readHermesBool(sessions.vacuum_after_prune, true),
sessionsMinIntervalHours: parseHermesInteger(sessions.min_interval_hours, 'sessions.min_interval_hours', 24, 0, 87600, false),
sessionsWriteJsonSnapshots: readHermesBool(sessions.write_json_snapshots, false),
}
}
export function mergeHermesSessionsMaintenanceConfig(config = {}, form = {}) {
const next = mergeConfigsPreservingFields({}, config && typeof config === 'object' && !Array.isArray(config) ? config : {})
const currentValues = buildHermesSessionsMaintenanceConfigValues(next)
const sessions = next.sessions && typeof next.sessions === 'object' && !Array.isArray(next.sessions)
? mergeConfigsPreservingFields(next.sessions, {})
: {}
sessions.auto_prune = formHermesBool(form, 'sessionsAutoPrune', currentValues.sessionsAutoPrune)
sessions.retention_days = parseHermesInteger(Object.hasOwn(form, 'sessionsRetentionDays') ? form.sessionsRetentionDays : currentValues.sessionsRetentionDays, 'sessions.retention_days', 90, 1, 36500, true)
sessions.vacuum_after_prune = formHermesBool(form, 'sessionsVacuumAfterPrune', currentValues.sessionsVacuumAfterPrune)
sessions.min_interval_hours = parseHermesInteger(Object.hasOwn(form, 'sessionsMinIntervalHours') ? form.sessionsMinIntervalHours : currentValues.sessionsMinIntervalHours, 'sessions.min_interval_hours', 24, 0, 87600, true)
sessions.write_json_snapshots = formHermesBool(form, 'sessionsWriteJsonSnapshots', currentValues.sessionsWriteJsonSnapshots)
next.sessions = sessions
return next
}
export function buildHermesLoggingConfigValues(config = {}) {
const root = config && typeof config === 'object' && !Array.isArray(config) ? config : {}
const logging = root.logging && typeof root.logging === 'object' && !Array.isArray(root.logging)
@@ -12436,6 +12466,27 @@ const handlers = {
}
},
hermes_sessions_maintenance_config_read() {
const { configPath, exists, config } = readHermesConfigYamlObject()
return {
exists,
configPath,
values: buildHermesSessionsMaintenanceConfigValues(config),
}
},
hermes_sessions_maintenance_config_save({ form } = {}) {
const { configPath, config } = readHermesConfigYamlObject()
const next = mergeHermesSessionsMaintenanceConfig(config, form || {})
const backup = writeHermesConfigYamlObject(configPath, next)
return {
ok: true,
configPath,
backup,
values: buildHermesSessionsMaintenanceConfigValues(next),
}
},
hermes_logging_config_read() {
const { configPath, exists, config } = readHermesConfigYamlObject()
return {