File size: 2,060 Bytes
ef73937
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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);