fix undefined bug, updated server validation

This commit is contained in:
Alex Holliday
2025-08-18 15:34:15 -07:00
parent 9bd2e336a6
commit 27415aeca6
2 changed files with 18 additions and 3 deletions
@@ -117,13 +117,18 @@ class StatusService {
// Update running stats
this.updateRunningStats({ monitor, networkResponse });
// If the status window size has changed, empty
while (monitor.statusWindow.length > monitor.statusWindowSize) {
monitor.statusWindow.shift();
}
// Update status sliding window
monitor.statusWindow.push(status);
if (monitor.statusWindow.length > monitor.statusWindowSize) {
monitor.statusWindow.shift();
}
if (!monitor.status) {
if (monitor.status === undefined || monitor.status === null) {
monitor.status = status;
}
@@ -145,10 +150,16 @@ class StatusService {
// Check if threshold has been met
const failures = monitor.statusWindow.filter((s) => s === false).length;
const failureRate = failures / monitor.statusWindow.length;
const failureRate = (failures / monitor.statusWindow.length) * 100;
console.log({
failureRate,
status: monitor.status,
statusWindow: monitor.statusWindow,
});
// If threshold has been met and the monitor is not already down, mark down:
if (failureRate > monitor.statusWindowThreshold && monitor.status !== false) {
if (failureRate >= monitor.statusWindowThreshold && monitor.status !== false) {
newStatus = false;
statusChanged = true;
}
+4
View File
@@ -155,6 +155,8 @@ const createMonitorBodyValidation = joi.object({
name: joi.string().required(),
description: joi.string().required(),
type: joi.string().required(),
statusWindowSize: joi.number().min(1).max(20).default(5),
statusWindowThreshold: joi.number().min(1).max(100).default(60),
url: joi.string().required(),
ignoreTlsErrors: joi.boolean().default(false),
port: joi.number(),
@@ -183,6 +185,8 @@ const createMonitorsBodyValidation = joi.array().items(
const editMonitorBodyValidation = joi.object({
name: joi.string(),
statusWindowSize: joi.number().min(1).max(20).default(5),
statusWindowThreshold: joi.number().min(1).max(100).default(60),
description: joi.string(),
interval: joi.number(),
notifications: joi.array().items(joi.string()),