enhance(backend): 古いバージョンで作成され現在使われなくなったrepeatableジョブをクリーンアップするように

This commit is contained in:
syuilo 2025-07-31 20:57:36 +09:00
parent a45e89c300
commit 862a6fae79
1 changed files with 45 additions and 78 deletions

View File

@ -53,6 +53,33 @@ export const QUEUE_TYPES = [
'systemWebhookDeliver', 'systemWebhookDeliver',
] as const; ] as const;
const REPEATABLE_SYSTEM_JOB_DEF = [{
name: 'tickCharts',
pattern: '55 * * * *',
}, {
name: 'resyncCharts',
pattern: '0 0 * * *',
}, {
name: 'cleanCharts',
pattern: '0 0 * * *',
}, {
name: 'aggregateRetention',
pattern: '0 0 * * *',
}, {
name: 'clean',
pattern: '0 0 * * *',
}, {
name: 'checkExpiredMutings',
pattern: '*/5 * * * *',
}, {
name: 'bakeBufferedReactions',
pattern: '0 0 * * *',
}, {
name: 'checkModeratorsActivity',
// 毎時30分に起動
pattern: '30 * * * *',
}];
@Injectable() @Injectable()
export class QueueService { export class QueueService {
constructor( constructor(
@ -69,85 +96,25 @@ export class QueueService {
@Inject('queue:userWebhookDeliver') public userWebhookDeliverQueue: UserWebhookDeliverQueue, @Inject('queue:userWebhookDeliver') public userWebhookDeliverQueue: UserWebhookDeliverQueue,
@Inject('queue:systemWebhookDeliver') public systemWebhookDeliverQueue: SystemWebhookDeliverQueue, @Inject('queue:systemWebhookDeliver') public systemWebhookDeliverQueue: SystemWebhookDeliverQueue,
) { ) {
this.systemQueue.upsertJobScheduler('tickCharts', { for (const def of REPEATABLE_SYSTEM_JOB_DEF) {
pattern: '55 * * * *', this.systemQueue.upsertJobScheduler(def.name, {
}, { pattern: def.pattern,
name: 'tickCharts', }, {
opts: { name: def.name,
removeOnComplete: 10, opts: {
removeOnFail: 30, removeOnComplete: 10,
}, removeOnFail: 30,
}); },
});
}
this.systemQueue.upsertJobScheduler('resyncCharts', { // 古いバージョンで作成され現在使われなくなったrepeatableジョブをクリーンアップ
pattern: '0 0 * * *', this.systemQueue.getJobSchedulers().then(schedulers => {
}, { for (const scheduler of schedulers) {
name: 'resyncCharts', if (!REPEATABLE_SYSTEM_JOB_DEF.some(def => def.name === scheduler.key)) {
opts: { this.systemQueue.removeJobScheduler(scheduler.key);
removeOnComplete: 10, }
removeOnFail: 30, }
},
});
this.systemQueue.upsertJobScheduler('cleanCharts', {
pattern: '0 0 * * *',
}, {
name: 'cleanCharts',
opts: {
removeOnComplete: 10,
removeOnFail: 30,
},
});
this.systemQueue.upsertJobScheduler('aggregateRetention', {
pattern: '0 0 * * *',
}, {
name: 'aggregateRetention',
opts: {
removeOnComplete: 10,
removeOnFail: 30,
},
});
this.systemQueue.upsertJobScheduler('clean', {
pattern: '0 0 * * *',
}, {
name: 'clean',
opts: {
removeOnComplete: 10,
removeOnFail: 30,
},
});
this.systemQueue.upsertJobScheduler('checkExpiredMutings', {
pattern: '*/5 * * * *',
}, {
name: 'checkExpiredMutings',
opts: {
removeOnComplete: 10,
removeOnFail: 30,
},
});
this.systemQueue.upsertJobScheduler('bakeBufferedReactions', {
pattern: '0 0 * * *',
}, {
name: 'bakeBufferedReactions',
opts: {
removeOnComplete: 10,
removeOnFail: 30,
},
});
this.systemQueue.upsertJobScheduler('checkModeratorsActivity', {
// 毎時30分に起動
pattern: '30 * * * *',
}, {
name: 'checkModeratorsActivity',
opts: {
removeOnComplete: 10,
removeOnFail: 30,
},
}); });
} }