From 1bde8fdb868924646b636e0647aa047dccb1838d Mon Sep 17 00:00:00 2001 From: Alexander Holliday Date: Tue, 3 Sep 2024 09:30:43 -0700 Subject: [PATCH] Revert "Add indeterminate state to monitors, resolves #765" --- Client/src/Components/Label/index.jsx | 8 +-- .../src/Pages/Monitors/Home/monitorData.jsx | 9 +++ Server/controllers/monitorController.js | 1 - Server/models/Monitor.js | 4 +- Server/service/jobQueue.js | 1 + Server/service/networkService.js | 64 +++++++------------ 6 files changed, 37 insertions(+), 50 deletions(-) diff --git a/Client/src/Components/Label/index.jsx b/Client/src/Components/Label/index.jsx index 96468ffd6..0799a87d7 100644 --- a/Client/src/Components/Label/index.jsx +++ b/Client/src/Components/Label/index.jsx @@ -126,7 +126,6 @@ ColoredLabel.propTypes = { */ const StatusLabel = ({ status, text, customStyles }) => { - console.log(status); const theme = useTheme(); const colors = { up: { @@ -139,11 +138,6 @@ const StatusLabel = ({ status, text, customStyles }) => { bgColor: theme.palette.error.bg, borderColor: theme.palette.error.light, }, - unknown: { - dotColor: theme.palette.unresolved.main, - bgColor: theme.palette.unresolved.bg, - borderColor: theme.palette.unresolved.light, - }, "cannot resolve": { dotColor: theme.palette.unresolved.main, bgColor: theme.palette.unresolved.bg, @@ -176,7 +170,7 @@ const StatusLabel = ({ status, text, customStyles }) => { }; StatusLabel.propTypes = { - status: PropTypes.oneOf(["up", "down", "unknown", "cannot resolve"]), + status: PropTypes.oneOf(["up", "down", "cannot resolve"]), text: PropTypes.string, customStyles: PropTypes.object, }; diff --git a/Client/src/Pages/Monitors/Home/monitorData.jsx b/Client/src/Pages/Monitors/Home/monitorData.jsx index d84496923..1942e5a9c 100644 --- a/Client/src/Pages/Monitors/Home/monitorData.jsx +++ b/Client/src/Pages/Monitors/Home/monitorData.jsx @@ -48,6 +48,15 @@ export const buildData = (monitors, isAdmin, navigate) => { monitor.uptimePercentage === 0 ? "0" : (monitor.uptimePercentage * 100).toFixed(2); + + percentageColor = + monitor.uptimePercentage < 0.25 + ? theme.palette.percentage.uptimePoor + : monitor.uptimePercentage < 0.5 + ? theme.palette.percentage.uptimeFair + : monitor.uptimePercentage < 0.75 + ? theme.palette.percentage.uptimeGood + : theme.palette.percentage.uptimeExcellent; } const params = { diff --git a/Server/controllers/monitorController.js b/Server/controllers/monitorController.js index 702b28be4..f33ddcf10 100644 --- a/Server/controllers/monitorController.js +++ b/Server/controllers/monitorController.js @@ -359,7 +359,6 @@ const pauseMonitor = async (req, res, next) => { await req.jobQueue.addJob(monitor._id, monitor); } monitor.isActive = !monitor.isActive; - monitor.status = undefined; monitor.save(); return res.status(200).json({ success: true, diff --git a/Server/models/Monitor.js b/Server/models/Monitor.js index d91275e23..fdc147d1b 100644 --- a/Server/models/Monitor.js +++ b/Server/models/Monitor.js @@ -24,7 +24,7 @@ const MonitorSchema = mongoose.Schema( }, status: { type: Boolean, - default: undefined, + default: true, }, type: { type: String, @@ -46,7 +46,7 @@ const MonitorSchema = mongoose.Schema( }, uptimePercentage: { type: Number, - default: undefined, + default: undefined, }, notifications: [ { diff --git a/Server/service/jobQueue.js b/Server/service/jobQueue.js index 5248c88fa..ed15e0f94 100644 --- a/Server/service/jobQueue.js +++ b/Server/service/jobQueue.js @@ -238,6 +238,7 @@ class JobQueue { console.log("Adding job", payload.url); // Execute job immediately await this.queue.add(jobName, payload); + await this.queue.add(jobName, payload, { repeat: { every: payload.interval, diff --git a/Server/service/networkService.js b/Server/service/networkService.js index 863349dbf..f5c333a60 100644 --- a/Server/service/networkService.js +++ b/Server/service/networkService.js @@ -15,59 +15,43 @@ class NetworkService { this.NETWORK_ERROR = 5000; } - async handleNotification(monitor, isAlive) { - try { - let template = - isAlive === true ? "serverIsUpTemplate" : "serverIsDownTemplate"; - let status = isAlive === true ? "up" : "down"; - - const notifications = await this.db.getNotificationsByMonitorId( - monitor._id - ); - for (const notification of notifications) { - if (notification.type === "email") { - await this.emailService.buildAndSendEmail( - template, - { monitorName: monitor.name, monitorUrl: monitor.url }, - notification.address, - `Monitor ${monitor.name} is ${status}` - ); - } - } - } catch (error) { - logger.error(error.message, { - method: "handleNotification", - service: this.SERVICE_NAME, - monitorId: monitor._id, - }); - } - } - - async handleStatusUpdate(job, isAlive) { + async handleNotification(job, isAlive) { try { const { _id } = job.data; const monitor = await this.db.getMonitorById(_id); - if (monitor === null || monitor === undefined) { logger.error(`Null Monitor: ${_id}`, { - method: "handleStatusUpdate", + method: "handleNotification", service: this.SERVICE_NAME, jobId: job.id, }); return; } - if (monitor.status === undefined || monitor.status !== isAlive) { - const oldStatus = monitor.status; - monitor.status = isAlive; + + // If monitor status changes, update monitor status and send notification + if (monitor.status !== isAlive) { + monitor.status = !monitor.status; await monitor.save(); - if (oldStatus !== undefined && oldStatus !== isAlive) { - this.handleNotification(monitor, isAlive); + let template = + isAlive === true ? "serverIsUpTemplate" : "serverIsDownTemplate"; + let status = isAlive === true ? "up" : "down"; + + const notifications = await this.db.getNotificationsByMonitorId(_id); + for (const notification of notifications) { + if (notification.type === "email") { + await this.emailService.buildAndSendEmail( + template, + { monitorName: monitor.name, monitorUrl: monitor.url }, + notification.address, + `Monitor ${monitor.name} is ${status}` + ); + } } } } catch (error) { logger.error(error.message, { - method: "handleStatusUpdate", + method: "handleNotification", service: this.SERVICE_NAME, jobId: job.id, }); @@ -129,7 +113,7 @@ class NetworkService { }; return await this.logAndStoreCheck(checkData, this.db.createCheck); } finally { - this.handleStatusUpdate(job, isAlive); + this.handleNotification(job, isAlive); } } @@ -177,7 +161,7 @@ class NetworkService { return await this.logAndStoreCheck(checkData, this.db.createCheck); } finally { - this.handleStatusUpdate(job, isAlive); + this.handleNotification(job, isAlive); } } @@ -257,7 +241,7 @@ class NetworkService { }; this.logAndStoreCheck(checkData, this.db.createPageSpeedCheck); } finally { - this.handleStatusUpdate(job, isAlive); + this.handleNotification(job, isAlive); } }