chore: change the quota sync to the queue 2
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { BullModule } from "@nestjs/bullmq";
|
import { BullModule } from "@nestjs/bullmq";
|
||||||
import { Module } from "@nestjs/common";
|
import { Module, OnModuleInit } from "@nestjs/common";
|
||||||
|
|
||||||
import { QUOTA_SYNC_QUEUE } from "./constants";
|
import { QUOTA_SYNC_QUEUE } from "./constants";
|
||||||
import { QuotaSyncProcessor } from "./queue/quota-sync.processor";
|
import { QuotaSyncProcessor } from "./queue/quota-sync.processor";
|
||||||
@@ -12,13 +12,16 @@ import { MailServerModule } from "../mail-server/mail-server.module";
|
|||||||
BullModule.registerQueue({
|
BullModule.registerQueue({
|
||||||
name: QUOTA_SYNC_QUEUE.QUEUE_NAME,
|
name: QUOTA_SYNC_QUEUE.QUEUE_NAME,
|
||||||
prefix: QUOTA_SYNC_QUEUE.QUEUE_PREFIX,
|
prefix: QUOTA_SYNC_QUEUE.QUEUE_PREFIX,
|
||||||
defaultJobOptions: {
|
|
||||||
removeOnComplete: true,
|
|
||||||
removeOnFail: true,
|
|
||||||
},
|
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
providers: [QuotaSyncService, QuotaSyncProcessor],
|
providers: [QuotaSyncService, QuotaSyncProcessor],
|
||||||
exports: [QuotaSyncService],
|
exports: [QuotaSyncService],
|
||||||
})
|
})
|
||||||
export class QuotaSyncModule {}
|
export class QuotaSyncModule implements OnModuleInit {
|
||||||
|
constructor(private readonly quotaSyncService: QuotaSyncService) {}
|
||||||
|
|
||||||
|
async onModuleInit() {
|
||||||
|
// Setup the cron job when the module initializes
|
||||||
|
await this.quotaSyncService.setupCronJob();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -23,11 +23,56 @@ export class QuotaSyncService {
|
|||||||
private readonly logger = new Logger(QuotaSyncService.name);
|
private readonly logger = new Logger(QuotaSyncService.name);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@InjectQueue(QUOTA_SYNC_QUEUE.QUEUE_NAME) private readonly quotaSyncQueue: Queue,
|
|
||||||
private readonly wildDuckUsersService: WildDuckUsersService,
|
private readonly wildDuckUsersService: WildDuckUsersService,
|
||||||
private readonly em: EntityManager,
|
private readonly em: EntityManager,
|
||||||
|
@InjectQueue(QUOTA_SYNC_QUEUE.QUEUE_NAME) private readonly quotaSyncQueue: Queue,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup repeatable cron job to run comprehensive quota sync every hour
|
||||||
|
*/
|
||||||
|
async setupCronJob(): Promise<void> {
|
||||||
|
try {
|
||||||
|
// Remove any existing cron jobs for this job type
|
||||||
|
await this.quotaSyncQueue.removeJobScheduler(QUOTA_SYNC_QUEUE.SYNC_COMPREHENSIVE_QUOTA_JOB);
|
||||||
|
|
||||||
|
// Add new repeatable job
|
||||||
|
await this.quotaSyncQueue.add(
|
||||||
|
QUOTA_SYNC_QUEUE.SYNC_COMPREHENSIVE_QUOTA_JOB,
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
removeOnComplete: true,
|
||||||
|
removeOnFail: false,
|
||||||
|
attempts: 3,
|
||||||
|
backoff: {
|
||||||
|
type: "exponential",
|
||||||
|
delay: 2000,
|
||||||
|
},
|
||||||
|
repeat: {
|
||||||
|
pattern: "0 * * * *", // Every hour at minute 0 (cron pattern)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
this.logger.log("Quota sync cron job scheduled to run every hour");
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error("Failed to setup quota sync cron job", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the repeatable cron job
|
||||||
|
*/
|
||||||
|
async removeCronJob(): Promise<void> {
|
||||||
|
try {
|
||||||
|
await this.quotaSyncQueue.removeJobScheduler(QUOTA_SYNC_QUEUE.SYNC_COMPREHENSIVE_QUOTA_JOB);
|
||||||
|
this.logger.log("Quota sync cron job removed");
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error("Failed to remove quota sync cron job", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a job to sync quota usage for all users
|
* Add a job to sync quota usage for all users
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user