From 9bed0e21f15a4d05a9da1bc6de9afdfc0d5822d9 Mon Sep 17 00:00:00 2001 From: Collin Duncan <3679940+cgduncan7@users.noreply.github.com> Date: Tue, 12 Mar 2024 13:02:45 +0100 Subject: [PATCH] Adding monitoring queue --- src/monitoring/config.ts | 1 + src/monitoring/module.ts | 9 ++++++++- src/monitoring/worker.ts | 22 ++++++++++++++++++++++ src/reservations/worker.ts | 2 +- 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/monitoring/config.ts create mode 100644 src/monitoring/worker.ts diff --git a/src/monitoring/config.ts b/src/monitoring/config.ts new file mode 100644 index 0000000..9d3b186 --- /dev/null +++ b/src/monitoring/config.ts @@ -0,0 +1 @@ +export const MONITORING_QUEUE_NAME = 'monitoring' diff --git a/src/monitoring/module.ts b/src/monitoring/module.ts index c25c360..3d94ddd 100644 --- a/src/monitoring/module.ts +++ b/src/monitoring/module.ts @@ -1,13 +1,20 @@ +import { BullModule } from '@nestjs/bull' import { Module } from '@nestjs/common' import { TypeOrmModule } from '@nestjs/typeorm' import { LoggerModule } from '../logger/module' import { NtfyModule } from '../ntfy/module' +import { MONITORING_QUEUE_NAME } from './config' import { Monitor } from './entity' import { MonitorsService } from './service' @Module({ - imports: [LoggerModule, NtfyModule, TypeOrmModule.forFeature([Monitor])], + imports: [ + LoggerModule, + NtfyModule, + TypeOrmModule.forFeature([Monitor]), + BullModule.registerQueueAsync({ name: MONITORING_QUEUE_NAME }), + ], providers: [MonitorsService], exports: [MonitorsService], }) diff --git a/src/monitoring/worker.ts b/src/monitoring/worker.ts new file mode 100644 index 0000000..0ef8bb4 --- /dev/null +++ b/src/monitoring/worker.ts @@ -0,0 +1,22 @@ +import { Process, Processor } from '@nestjs/bull' +import { Inject } from '@nestjs/common' +import { Job } from 'bull' + +import { MONITORING_QUEUE_NAME } from './config' +import { MonitorType } from './entity' +import { MonitorsService } from './service' + +@Processor(MONITORING_QUEUE_NAME) +export class MonitoringWorker { + constructor( + @Inject(MonitorsService) + private readonly monitorsService: MonitorsService, + ) {} + + @Process() + async handleMonitoringCourtsJob( + job: Job<{ type: MonitorType; data: unknown }>, + ) { + await this.monitorsService.performMonitor(job.data.type, job.data.data) + } +} diff --git a/src/reservations/worker.ts b/src/reservations/worker.ts index 7b8de6a..b94be68 100644 --- a/src/reservations/worker.ts +++ b/src/reservations/worker.ts @@ -10,9 +10,9 @@ import { NoCourtAvailableError, } from '../runner/baanreserveren/service' import { RESERVATIONS_QUEUE_NAME } from './config' +import { DAILY_RESERVATIONS_ATTEMPTS } from './cron' import { Reservation } from './entity' import { ReservationsService } from './service' -import { DAILY_RESERVATIONS_ATTEMPTS } from './cron' @Processor(RESERVATIONS_QUEUE_NAME) export class ReservationsWorker {