From 186ca3050805f89aab6c88528fafffa3cd2653e1 Mon Sep 17 00:00:00 2001 From: Michael Telgkamp Date: Thu, 23 Feb 2023 17:40:39 +0100 Subject: [PATCH] Improve mattermost notifications --- server/notification-providers/mattermost.js | 162 +++++++++----------- 1 file changed, 72 insertions(+), 90 deletions(-) diff --git a/server/notification-providers/mattermost.js b/server/notification-providers/mattermost.js index 2076ad21..bade6c19 100644 --- a/server/notification-providers/mattermost.js +++ b/server/notification-providers/mattermost.js @@ -10,7 +10,7 @@ class Mattermost extends NotificationProvider { let okMsg = "Sent Successfully."; try { const mattermostUserName = notification.mattermostusername || "Uptime Kuma"; - // If heartbeatJSON is null, assume we're testing. + // If heartbeatJSON is null, assume non monitoring notification (Certificate warning) or testing. if (heartbeatJSON == null) { let mattermostTestData = { username: mattermostUserName, @@ -27,97 +27,79 @@ class Mattermost extends NotificationProvider { } const mattermostIconEmoji = notification.mattermosticonemo; - const mattermostIconUrl = notification.mattermosticonurl; + let mattermostIconEmojiOnline = ""; + let mattermostIconEmojiOffline = ""; - if (heartbeatJSON["status"] === DOWN) { - let mattermostdowndata = { - username: mattermostUserName, - text: "Uptime Kuma Alert", - channel: mattermostChannel, - icon_emoji: mattermostIconEmoji, - icon_url: mattermostIconUrl, - attachments: [ - { - fallback: - "Your " + - monitorJSON["name"] + - " service went down.", - color: "#FF0000", - title: - "❌ " + - monitorJSON["name"] + - " service went down. ❌", - title_link: monitorJSON["url"], - fields: [ - { - short: true, - title: "Service Name", - value: monitorJSON["name"], - }, - { - short: true, - title: "Time (UTC)", - value: heartbeatJSON["time"], - }, - { - short: false, - title: "Error", - value: heartbeatJSON["msg"], - }, - ], - }, - ], - }; - await axios.post( - notification.mattermostWebhookUrl, - mattermostdowndata - ); - return okMsg; - } else if (heartbeatJSON["status"] === UP) { - let mattermostupdata = { - username: mattermostUserName, - text: "Uptime Kuma Alert", - channel: mattermostChannel, - icon_emoji: mattermostIconEmoji, - icon_url: mattermostIconUrl, - attachments: [ - { - fallback: - "Your " + - monitorJSON["name"] + - " service went up!", - color: "#32CD32", - title: - "✅ " + - monitorJSON["name"] + - " service went up! ✅", - title_link: monitorJSON["url"], - fields: [ - { - short: true, - title: "Service Name", - value: monitorJSON["name"], - }, - { - short: true, - title: "Time (UTC)", - value: heartbeatJSON["time"], - }, - { - short: false, - title: "Ping", - value: heartbeatJSON["ping"] + "ms", - }, - ], - }, - ], - }; - await axios.post( - notification.mattermostWebhookUrl, - mattermostupdata - ); - return okMsg; + if (mattermostIconEmoji && typeof mattermostIconEmoji === "string") { + const emojiArray = mattermostIconEmoji.split(" "); + if (emojiArray.length >= 2) { + mattermostIconEmojiOnline = emojiArray[0]; + mattermostIconEmojiOffline = emojiArray[1]; + } } + const mattermostIconUrl = notification.mattermosticonurl; + let iconEmoji = mattermostIconEmoji; + let statusField = { + short: false, + title: "Error", + value: heartbeatJSON.msg, + }; + let statusText = "unknown"; + let color = "#000000"; + if (heartbeatJSON.status === DOWN) { + iconEmoji = mattermostIconEmojiOffline || mattermostIconEmoji; + statusField = { + short: false, + title: "Error", + value: heartbeatJSON.msg, + }; + statusText = "down."; + color = "#FF0000"; + } else if (heartbeatJSON.status === UP) { + iconEmoji = mattermostIconEmojiOnline || mattermostIconEmoji; + statusField = { + short: false, + title: "Ping", + value: heartbeatJSON.ping + "ms", + }; + statusText = "up!"; + color = "#32CD32"; + } + + let mattermostdata = { + username: monitorJSON.name + " " + mattermostUserName, + channel: mattermostChannel, + icon_emoji: iconEmoji, + icon_url: mattermostIconUrl, + attachments: [ + { + fallback: + "Your " + + monitorJSON.name + + " service went " + + statusText, + color: color, + title: + monitorJSON.name + + " service went " + + statusText, + title_link: monitorJSON.url, + fields: [ + statusField, + { + short: true, + title: "Time (UTC)", + value: heartbeatJSON.time, + }, + ], + }, + ], + }; + await axios.post( + notification.mattermostWebhookUrl, + mattermostdata + ); + return okMsg; } catch (error) { this.throwGeneralAxiosError(error); }