From bdf8d6aaea935928db0903ee68a2987f259e63a5 Mon Sep 17 00:00:00 2001 From: Alexander Holliday Date: Tue, 30 Jul 2024 10:02:04 -0700 Subject: [PATCH] Feat/maintenance window check, resolves #467 (#476) * Added createMaintenanceWindow route * Added getMaintenanceWindowsByUserId * Added getMaintenaceWindowsByMonitorId method, updated routes * Exported delete methods * Add check for maintenance window before executing job --- Server/service/jobQueue.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/Server/service/jobQueue.js b/Server/service/jobQueue.js index c8ffd5e24..035cbdb4a 100644 --- a/Server/service/jobQueue.js +++ b/Server/service/jobQueue.js @@ -59,9 +59,34 @@ class JobQueue { QUEUE_NAME, async (job) => { try { - // TODO wrap this in a check to see if a maintenace window is active - // If so, don't process the job - const res = await this.networkService.getStatus(job); + // Get all maintenance windows for this monitor + const monitorId = job.data._id; + const maintenanceWindows = + await this.db.getMaintenanceWindowsByMonitorId(monitorId); + + // Check for active maintenance window: + const maintenanceWindowActive = maintenanceWindows.reduce( + (acc, window) => { + if (window.active) { + const start = new Date(window.start); + const end = new Date(window.end); + if (start < new Date() && end > new Date()) { + return true; + } + } + return acc; + }, + false + ); + + if (!maintenanceWindowActive) { + const res = await this.networkService.getStatus(job); + } else { + logger.info(`Monitor ${monitorId} is in maintenance window`, { + service: SERVICE_NAME, + monitorId, + }); + } } catch (error) { logger.error(`Error processing job ${job.id}: ${error.message}`, { service: SERVICE_NAME,