feat: auto-prune stale session artifacts on startup + daily
Session files (JSONLs, debug logs, todos, telemetry, group logs) accumulate unboundedly — especially from daily cron tasks. This adds a cleanup script that prunes old artifacts while protecting active sessions (read from DB), and wires it into the main process on a 24h interval. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,7 @@ import {
|
||||
loadSenderAllowlist,
|
||||
shouldDropMessage,
|
||||
} from './sender-allowlist.js';
|
||||
import { startSessionCleanup } from './session-cleanup.js';
|
||||
import { startSchedulerLoop } from './task-scheduler.js';
|
||||
import { Channel, NewMessage, RegisteredGroup } from './types.js';
|
||||
import { logger } from './logger.js';
|
||||
@@ -746,6 +747,7 @@ async function main(): Promise<void> {
|
||||
}
|
||||
},
|
||||
});
|
||||
startSessionCleanup();
|
||||
queue.setProcessMessagesFn(processGroupMessages);
|
||||
recoverPendingMessages();
|
||||
startMessageLoop().catch((err) => {
|
||||
|
||||
25
src/session-cleanup.ts
Normal file
25
src/session-cleanup.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { execFile } from 'child_process';
|
||||
import path from 'path';
|
||||
|
||||
import { logger } from './logger.js';
|
||||
|
||||
const CLEANUP_INTERVAL = 24 * 60 * 60 * 1000; // 24 hours
|
||||
const SCRIPT_PATH = path.resolve(process.cwd(), 'scripts/cleanup-sessions.sh');
|
||||
|
||||
function runCleanup(): void {
|
||||
execFile('/bin/bash', [SCRIPT_PATH], { timeout: 60_000 }, (err, stdout) => {
|
||||
if (err) {
|
||||
logger.error({ err }, 'Session cleanup failed');
|
||||
return;
|
||||
}
|
||||
const summary = stdout.trim().split('\n').pop();
|
||||
if (summary) logger.info(summary);
|
||||
});
|
||||
}
|
||||
|
||||
export function startSessionCleanup(): void {
|
||||
// Run once at startup (delayed 30s to not compete with init)
|
||||
setTimeout(runCleanup, 30_000);
|
||||
// Then every 24 hours
|
||||
setInterval(runCleanup, CLEANUP_INTERVAL);
|
||||
}
|
||||
Reference in New Issue
Block a user