Hourly cron that deletes expired temp_segments from S3 and DB. Implements issue #34. Registered alongside scheduler in index.js.
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
import pool from '../db/pool.js';
|
|
import { deleteObject } from '../s3/client.js';
|
|
|
|
const CLEANUP_INTERVAL_MS = 3600_000;
|
|
|
|
let _interval = null;
|
|
|
|
async function cleanup() {
|
|
const expired = await pool.query(
|
|
'SELECT * FROM temp_segments WHERE expires_at < NOW()'
|
|
);
|
|
|
|
if (expired.rows.length === 0) return;
|
|
|
|
let deleted = 0;
|
|
let errors = 0;
|
|
|
|
for (const segment of expired.rows) {
|
|
try {
|
|
await deleteObject(segment.s3_key);
|
|
await pool.query('DELETE FROM temp_segments WHERE id = $1', [segment.id]);
|
|
deleted++;
|
|
} catch (err) {
|
|
console.error('[cleanup] failed to delete segment ' + segment.id + ': ' + err.message);
|
|
errors++;
|
|
}
|
|
}
|
|
|
|
console.log(`[cleanup] temp segments: ${deleted} deleted, ${errors} errors`);
|
|
}
|
|
|
|
export function startCleanupLoop() {
|
|
if (_interval) return;
|
|
console.log(`[cleanup] temp segments loop started (interval=${CLEANUP_INTERVAL_MS}ms)`);
|
|
cleanup().catch(() => {});
|
|
_interval = setInterval(() => cleanup().catch(() => {}), CLEANUP_INTERVAL_MS);
|
|
}
|
|
|
|
export function stopCleanupLoop() {
|
|
if (_interval) { clearInterval(_interval); _interval = null; }
|
|
}
|