Chat-With-AI / workers /cleanupWorker.ts
NathMen12's picture
Upload 56 files
ef73937 verified
Raw
History Blame Contribute Delete
2.06 kB
import { sessionRepository } from '@core/storage/repositories/sessions.js';
import { voteRepository } from '@core/storage/repositories/votes.js';
import { logRepository } from '@core/storage/repositories/logs.js';
import { scrapeQueueRepository } from '@core/storage/repositories/scrapeQueue.js';
import { config } from '@config/index.js';
import { sleep } from '@core/utils/helpers.js';
async function runCleanupWorker() {
console.log('🔄 Starting cleanup worker...');
await Promise.all([
sessionRepository.initialize(),
voteRepository.initialize(),
logRepository.initialize(),
scrapeQueueRepository.initialize(),
]);
let running = true;
process.on('SIGINT', () => { running = false; });
process.on('SIGTERM', () => { running = false; });
// Run immediately on start
await runCleanup();
// Then run every hour
while (running) {
await sleep(60 * 60 * 1000); // 1 hour
if (running) {
await runCleanup();
}
}
console.log('🛑 Cleanup worker stopped');
}
async function runCleanup() {
console.log('🧹 Running cleanup tasks...');
try {
const results = await Promise.allSettled([
sessionRepository.cleanupExpiredSessions(),
voteRepository.cleanupOldVotes?.() || Promise.resolve(0),
logRepository.cleanupOldLogs(30),
scrapeQueueRepository.cleanupOldItems(7),
]);
const [sessions, votes, logs, queueItems] = results.map(r =>
r.status === 'fulfilled' ? r.value : 0
);
console.log(`✅ Cleanup completed: ${sessions} sessions, ${votes} votes, ${logs} logs, ${queueItems} queue items removed`);
await logRepository.log({
level: 'info',
message: 'Cleanup completed',
context: { sessions, votes, logs, queueItems },
});
} catch (error) {
console.error('Cleanup worker error:', error);
await logRepository.log({
level: 'error',
message: 'Cleanup worker failed',
error: { name: 'Error', message: String(error), stack: String(error) },
});
}
}
runCleanupWorker().catch(console.error);