diff --git a/server/notification-providers/discord.js b/server/notification-providers/discord.js index 129e334b0..38b88fe94 100644 --- a/server/notification-providers/discord.js +++ b/server/notification-providers/discord.js @@ -33,26 +33,6 @@ class Discord extends NotificationProvider { return okMsg; } - let address; - - switch (monitorJSON["type"]) { - case "ping": - address = monitorJSON["hostname"]; - break; - case "port": - case "dns": - case "gamedig": - case "steam": - address = monitorJSON["hostname"]; - if (monitorJSON["port"]) { - address += ":" + monitorJSON["port"]; - } - break; - default: - address = monitorJSON["url"]; - break; - } - // If heartbeatJSON is not null, we go into the normal alerting loop. if (heartbeatJSON["status"] === DOWN) { let discorddowndata = { @@ -105,7 +85,7 @@ class Discord extends NotificationProvider { }, { name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL", - value: monitorJSON["type"] === "push" ? "Heartbeat" : address, + value: this.extractAdress(monitorJSON), }, { name: `Time (${heartbeatJSON["timezone"]})`, diff --git a/server/notification-providers/notification-provider.js b/server/notification-providers/notification-provider.js index 9b4f0bb05..1a3a36125 100644 --- a/server/notification-providers/notification-provider.js +++ b/server/notification-providers/notification-provider.js @@ -19,6 +19,37 @@ class NotificationProvider { throw new Error("Have to override Notification.send(...)"); } + /** + * Extracts the address from a monitor JSON object based on its type. + * + * @param {?object} monitorJSON Monitor details (For Up/Down only) + * @returns {string} The extracted address based on the monitor type. + */ + extractAdress(monitorJSON){ + if (!monitorJSON) { + return "" + } + switch (monitorJSON["type"]) { + case "push": + return "Heartbeat"; + case "ping": + return monitorJSON["hostname"]; + case "port": + case "dns": + case "gamedig": + case "steam": + if (monitorJSON["port"]) { + return monitorJSON["hostname"] + ":" + monitorJSON["port"]; + } + return monitorJSON["hostname"] + default: + if (![ "https://", "http://", "" ].includes(monitorJSON["url"])) { + return monitorJSON["url"]; + } + return ""; + } + } + /** * Throws an error * @param {any} error The error to throw diff --git a/server/notification-providers/sevenio.js b/server/notification-providers/sevenio.js index d363e95d0..e422ff1fb 100644 --- a/server/notification-providers/sevenio.js +++ b/server/notification-providers/sevenio.js @@ -32,28 +32,7 @@ class SevenIO extends NotificationProvider { return okMsg; } - let address = ""; - - switch (monitorJSON["type"]) { - case "ping": - address = monitorJSON["hostname"]; - break; - case "port": - case "dns": - case "gamedig": - case "steam": - address = monitorJSON["hostname"]; - if (monitorJSON["port"]) { - address += ":" + monitorJSON["port"]; - } - break; - default: - if (![ "https://", "http://", "" ].includes(monitorJSON["url"])) { - address = monitorJSON["url"]; - } - break; - } - + let address = extractAdress(monitorJSON); if (address !== "") { address = `(${address}) `; } diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index b403117b4..801e0e69d 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -93,12 +93,7 @@ class SMTP extends NotificationProvider { if (monitorJSON !== null) { monitorName = monitorJSON["name"]; - - if (monitorJSON["type"] === "http" || monitorJSON["type"] === "keyword" || monitorJSON["type"] === "json-query") { - monitorHostnameOrURL = monitorJSON["url"]; - } else { - monitorHostnameOrURL = monitorJSON["hostname"]; - } + monitorHostnameOrURL = this.extractAdress(monitorJSON); } let serviceStatus = "⚠️ Test"; diff --git a/server/notification-providers/squadcast.js b/server/notification-providers/squadcast.js index 1c653d141..9074e9b76 100644 --- a/server/notification-providers/squadcast.js +++ b/server/notification-providers/squadcast.js @@ -34,25 +34,7 @@ class Squadcast extends NotificationProvider { data.status = "resolve"; } - let address; - switch (monitorJSON["type"]) { - case "ping": - address = monitorJSON["hostname"]; - break; - case "port": - case "dns": - case "steam": - address = monitorJSON["hostname"]; - if (monitorJSON["port"]) { - address += ":" + monitorJSON["port"]; - } - break; - default: - address = monitorJSON["url"]; - break; - } - - data.tags["AlertAddress"] = address; + data.tags["AlertAddress"] = this.extractAdress(monitorJSON); monitorJSON["tags"].forEach(tag => { data.tags[tag["name"]] = { diff --git a/server/notification-providers/teams.js b/server/notification-providers/teams.js index f34ba1ced..2fcea7077 100644 --- a/server/notification-providers/teams.js +++ b/server/notification-providers/teams.js @@ -216,21 +216,6 @@ class Teams extends NotificationProvider { return okMsg; } - let monitorUrl; - - switch (monitorJSON["type"]) { - case "http": - case "keywork": - monitorUrl = monitorJSON["url"]; - break; - case "docker": - monitorUrl = monitorJSON["docker_host"]; - break; - default: - monitorUrl = monitorJSON["hostname"]; - break; - } - const baseURL = await setting("primaryBaseURL"); let dashboardUrl; if (baseURL) { @@ -240,7 +225,7 @@ class Teams extends NotificationProvider { const payload = this._notificationPayloadFactory({ heartbeatJSON: heartbeatJSON, monitorName: monitorJSON.name, - monitorUrl: monitorUrl, + monitorUrl: this.extractAdress(monitorJSON), dashboardUrl: dashboardUrl, }); diff --git a/server/notification-providers/zoho-cliq.js b/server/notification-providers/zoho-cliq.js index e741603ce..76a059683 100644 --- a/server/notification-providers/zoho-cliq.js +++ b/server/notification-providers/zoho-cliq.js @@ -82,25 +82,7 @@ class ZohoCliq extends NotificationProvider { return okMsg; } - let address; - switch (monitorJSON["type"]) { - case "ping": - address = monitorJSON["hostname"]; - break; - case "port": - case "dns": - case "gamedig": - case "steam": - address = monitorJSON["hostname"]; - if (monitorJSON["port"]) { - address += ":" + monitorJSON["port"]; - } - break; - default: - address = monitorJSON["url"]; - break; - } const payload = this._notificationPayloadFactory({ monitorMessage: heartbeatJSON.msg,