Skip to content

Commit

Permalink
catch error in cron task
Browse files Browse the repository at this point in the history
  • Loading branch information
fufeck committed Jan 10, 2024
1 parent 38856ec commit 343c8ab
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 26 deletions.
11 changes: 5 additions & 6 deletions apps/cron/src/cron.service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Injectable, Logger } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression, Interval } from '@nestjs/schedule';
import { FilterQuery, Model, Types } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
Expand All @@ -17,7 +17,6 @@ import { TaskQueue } from './task_queue.class';

@Injectable()
export class CronService {
private readonly logger = new Logger(CronService.name);
private queue: TaskQueue = new TaskQueue();

constructor(
Expand Down Expand Up @@ -54,23 +53,23 @@ export class CronService {

@Cron(CronExpression.EVERY_DAY_AT_2AM)
async removeSoftDeletedBALsOlderThanOneYear() {
this.logger.debug('Task start : purge old deleted BALs');
console.debug('Task start : purge old deleted BALs');
const deleteTime = subMonths(new Date(), 12);
const filter: FilterQuery<BaseLocale> = { _deleted: { $lt: deleteTime } };
await this.removeBals(filter);
this.logger.debug('Task end : purge old deleted BALs');
console.debug('Task end : purge old deleted BALs');
}

@Cron(CronExpression.EVERY_DAY_AT_3AM)
async removeDemoBALsOlderThanAMonth() {
this.logger.debug('Task start : purge demo BALs');
console.debug('Task start : purge demo BALs');
const creationTime = subMonths(new Date(), 1);
const filter: FilterQuery<BaseLocale> = {
status: StatusBaseLocalEnum.DEMO,
_created: { $lt: creationTime },
};
await this.removeBals(filter);
this.logger.debug('Task end : purge demo BALs');
console.debug('Task end : purge demo BALs');
}

private async removeBals(filter: FilterQuery<BaseLocale>) {
Expand Down
14 changes: 7 additions & 7 deletions apps/cron/src/task_queue.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import { Logger } from '@nestjs/common';
import { CronService } from './cron.service';

export type Task = {
title: string;
run(): void;
Expand All @@ -9,7 +6,6 @@ export type Task = {
export class TaskQueue {
private queue: Task[] = [];
private isTaskRunning: boolean = false;
private readonly logger = new Logger(CronService.name);

public pushTask(task: Task) {
this.queue.push(task);
Expand All @@ -23,9 +19,13 @@ export class TaskQueue {

while (this.queue.length > 0) {
const task = this.queue.shift();
this.logger.debug(`Task start: ${task.title}`);
await task.run();
this.logger.debug(`Task end: ${task.title}`);
console.debug(`Task start ${task.title}`);
try {
await task.run();
} catch (e) {
console.debug(`Task error ${task.title}`, e);
}
console.debug(`Task end ${task.title}`);
}

this.isTaskRunning = false;
Expand Down
12 changes: 3 additions & 9 deletions apps/cron/src/tasks/detect_conflict.task.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Injectable, Logger } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';

Expand All @@ -18,7 +18,6 @@ export const KEY_DETECT_CONFLICT_PUBLISHED_SINCE =

@Injectable()
export class DetectConflictTask implements Task {
private readonly logger = new Logger(DetectConflictTask.name);
title: string = 'Detect conflict';

constructor(
Expand Down Expand Up @@ -47,16 +46,11 @@ export class DetectConflictTask implements Task {
try {
await this.updateConflictStatus(codeCommune);
} catch (error) {
this.logger.error(`Unable to detect conflict for ${codeCommune}`);
this.logger.error(error);
console.error(`Unable to detect conflict for ${codeCommune}`, error);
}
}
}

private async wait(ms: number): Promise<unknown> {
return new Promise((resolve) => setTimeout(resolve, ms));
}

private async updateConflictStatus(codeCommune: string) {
const basesLocales = await this.baseLocaleModel.find({
commune: codeCommune,
Expand All @@ -73,7 +67,7 @@ export class DetectConflictTask implements Task {
await this.apiDepotService.getCurrentRevision(codeCommune);

if (!currentRevision) {
this.logger.error(
console.error(
`Comportement inattendu : pas de révision courante pour la commune ${codeCommune}`,
);
return;
Expand Down
6 changes: 2 additions & 4 deletions apps/cron/src/tasks/sync_outdated.task.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Injectable, Logger } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model, Types } from 'mongoose';
import { sub } from 'date-fns';
Expand All @@ -12,7 +12,6 @@ import { Task } from '../task_queue.class';
@Injectable()
export class SyncOutdatedTask implements Task {
title: string = 'Sync outdated';
private readonly logger = new Logger(SyncOutdatedTask.name);

constructor(
private readonly publicationService: PublicationService,
Expand All @@ -34,8 +33,7 @@ export class SyncOutdatedTask implements Task {
try {
await this.publicationService.exec(balId);
} catch (error) {
this.logger.error(`Unable to sync ${balId}`);
this.logger.error(error);
console.error(`Unable to sync ${balId}`, error);
}
}
}
Expand Down

0 comments on commit 343c8ab

Please sign in to comment.