diff --git a/server/notification-providers/discord.js b/server/notification-providers/discord.js index 129e334b06..ccb80bf40b 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 = { @@ -68,7 +48,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"]})`, @@ -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 9b4f0bb053..d26b791f68 100644 --- a/server/notification-providers/notification-provider.js +++ b/server/notification-providers/notification-provider.js @@ -19,6 +19,36 @@ 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 d363e95d06..9d805d7e6e 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 = this.extractAdress(monitorJSON); if (address !== "") { address = `(${address}) `; } diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index b403117b40..801e0e69de 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 1c653d1411..9074e9b76d 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 f34ba1ceda..2fcea70772 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 10381c81fb..44681b7dfe 100644 --- a/server/notification-providers/zoho-cliq.js +++ b/server/notification-providers/zoho-cliq.js @@ -13,9 +13,9 @@ class ZohoCliq extends NotificationProvider { */ _statusMessageFactory = (status, monitorName) => { if (status === DOWN) { - return `🔴 Application [${monitorName}] went down\n`; + return `🔴 [${monitorName}] went down\n`; } else if (status === UP) { - return `✅ Application [${monitorName}] is back online\n`; + return `### ✅ [${monitorName}] is back online\n`; } return "Notification\n"; }; @@ -46,16 +46,11 @@ class ZohoCliq extends NotificationProvider { monitorUrl, }) => { const payload = []; - payload.push("### Uptime Kuma\n"); payload.push(this._statusMessageFactory(status, monitorName)); payload.push(`*Description:* ${monitorMessage}`); - if (monitorName) { - payload.push(`*Monitor:* ${monitorName}`); - } - if (monitorUrl && monitorUrl !== "https://") { - payload.push(`*URL:* [${monitorUrl}](${monitorUrl})`); + payload.push(`*URL:* ${monitorUrl}`); } return payload; @@ -87,24 +82,10 @@ class ZohoCliq extends NotificationProvider { return okMsg; } - let url; - switch (monitorJSON["type"]) { - case "http": - case "keywork": - url = monitorJSON["url"]; - break; - case "docker": - url = monitorJSON["docker_host"]; - break; - default: - url = monitorJSON["hostname"]; - break; - } - const payload = this._notificationPayloadFactory({ monitorMessage: heartbeatJSON.msg, monitorName: monitorJSON.name, - monitorUrl: url, + monitorUrl: this.extractAdress(monitorJSON), status: heartbeatJSON.status });