14 lines
1.9 KiB
JavaScript
14 lines
1.9 KiB
JavaScript
// Retention is intentionally shorter for raw evidence than aggregate trends.
|
|
import { PrismaClient } from '@prisma/client';
|
|
import assert from 'node:assert/strict';
|
|
const apply=process.argv.includes('--apply'); const db=new PrismaClient();
|
|
const days=(name,fallback)=>{const value=Number(process.env[name]??fallback);assert(Number.isInteger(value)&&value>=7&&value<=730,`Invalid ${name}`);return value;};
|
|
const eventBefore=new Date(Date.now()-days('ANALYTICS_EVENT_RETENTION_DAYS',30)*86400000);
|
|
const stateBefore=new Date(Date.now()-days('ANALYTICS_STATE_RETENTION_DAYS',90)*86400000);
|
|
const bucketBefore=new Date(Date.now()-days('ANALYTICS_BUCKET_RETENTION_DAYS',400)*86400000);
|
|
try{
|
|
const counts={events:await db.callerAnalysisEvent.count({where:{createdAt:{lt:eventBefore}}}),states:await db.callerAnalysisState.count({where:{startedAt:{lt:stateBefore}}}),buckets:await db.callerAnalysisMinuteBucket.count({where:{startedAt:{lt:bucketBefore}}}),deadLetters:await db.callerAnalysisDeadLetter.count({where:{status:{not:'OPEN'},createdAt:{lt:stateBefore}}}),gaps:await db.callerAnalysisGap.count({where:{status:{not:'OPEN'},startedAt:{lt:stateBefore}}})};
|
|
if(apply)await db.$transaction(async tx=>{await tx.callerAnalysisEvent.deleteMany({where:{createdAt:{lt:eventBefore}}});await tx.callerAnalysisMinuteBucket.deleteMany({where:{startedAt:{lt:bucketBefore}}});await tx.callerAnalysisState.deleteMany({where:{startedAt:{lt:stateBefore}}});await tx.$executeRaw`DELETE c FROM caller_analysis_calls c LEFT JOIN caller_analysis_states s ON s.call_key=c.id WHERE s.id IS NULL AND c.updated_at<${stateBefore}`;await tx.callerAnalysisDeadLetter.deleteMany({where:{status:{not:'OPEN'},createdAt:{lt:stateBefore}}});await tx.callerAnalysisGap.deleteMany({where:{status:{not:'OPEN'},startedAt:{lt:stateBefore}}});},{timeout:60000});
|
|
console.log(JSON.stringify({apply,cutoffs:{eventBefore,stateBefore,bucketBefore},counts}));
|
|
}finally{await db.$disconnect();}
|