fix: decouple analytics retention from generated client

This commit is contained in:
hectorzhao
2026-09-01 10:34:15 +08:00
parent f048312fc2
commit 6f1cf41043
+3 -2
View File
@@ -7,7 +7,8 @@ const eventBefore=new Date(Date.now()-days('ANALYTICS_EVENT_RETENTION_DAYS',30)*
const stateBefore=new Date(Date.now()-days('ANALYTICS_STATE_RETENTION_DAYS',90)*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); const bucketBefore=new Date(Date.now()-days('ANALYTICS_BUCKET_RETENTION_DAYS',400)*86400000);
try{ 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}}})}; const count=async rows=>Number(rows[0]?.n??0);
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}); const counts={events:await count(await db.$queryRaw`SELECT COUNT(*) AS n FROM caller_analysis_events WHERE created_at<${eventBefore}`),states:await count(await db.$queryRaw`SELECT COUNT(*) AS n FROM caller_analysis_states WHERE started_at<${stateBefore}`),buckets:await count(await db.$queryRaw`SELECT COUNT(*) AS n FROM caller_analysis_minute_buckets WHERE started_at<${bucketBefore}`),deadLetters:await count(await db.$queryRaw`SELECT COUNT(*) AS n FROM caller_analysis_dead_letters WHERE status<>'OPEN' AND created_at<${stateBefore}`),gaps:await count(await db.$queryRaw`SELECT COUNT(*) AS n FROM caller_analysis_gaps WHERE status<>'OPEN' AND started_at<${stateBefore}`)};
if(apply)await db.$transaction(async tx=>{await tx.$executeRaw`DELETE FROM caller_analysis_events WHERE created_at<${eventBefore}`;await tx.$executeRaw`DELETE FROM caller_analysis_minute_buckets WHERE started_at<${bucketBefore}`;await tx.$executeRaw`DELETE FROM caller_analysis_states WHERE started_at<${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.$executeRaw`DELETE FROM caller_analysis_dead_letters WHERE status<>'OPEN' AND created_at<${stateBefore}`;await tx.$executeRaw`DELETE FROM caller_analysis_gaps WHERE status<>'OPEN' AND started_at<${stateBefore}`;},{timeout:60000});
console.log(JSON.stringify({apply,cutoffs:{eventBefore,stateBefore,bucketBefore},counts})); console.log(JSON.stringify({apply,cutoffs:{eventBefore,stateBefore,bucketBefore},counts}));
}finally{await db.$disconnect();} }finally{await db.$disconnect();}