From 7b4f90ce9274f08f6c1c1eb56b20a7ebc773d584 Mon Sep 17 00:00:00 2001 From: Michael Telgkamp Date: Wed, 1 Mar 2023 08:37:06 +0100 Subject: [PATCH] Improve ntfy notifications - use tags `red_circle` for down and `green_circle` for up - increase priority for down alert by 1 if not already max - add monitor name and status to title - use heartbeat msg as Message - add monitor url as action --- server/notification-providers/ntfy.js | 41 +++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/server/notification-providers/ntfy.js b/server/notification-providers/ntfy.js index 521137cd..2f2c7dc5 100644 --- a/server/notification-providers/ntfy.js +++ b/server/notification-providers/ntfy.js @@ -1,5 +1,6 @@ const NotificationProvider = require("./notification-provider"); const axios = require("axios"); +const { DOWN, UP } = require("../../src/util"); class Ntfy extends NotificationProvider { @@ -14,11 +15,45 @@ class Ntfy extends NotificationProvider { "Authorization": "Basic " + Buffer.from(notification.ntfyusername + ":" + notification.ntfypassword).toString("base64"), }; } + // If heartbeatJSON is null, assume non monitoring notification (Certificate warning) or testing. + if (heartbeatJSON == null) { + let ntfyTestData = { + "topic": notification.ntfytopic, + "title": (monitorJSON?.name || notification.ntfytopic) + " [Uptime-Kuma]", + "message": msg, + "priority": notification.ntfyPriority, + "tags": [ "test_tube" ] + }; + await axios.post(`${notification.ntfyserverurl}`, ntfyTestData, { headers: headers }); + return okMsg; + } + let tags = []; + let status = "unknown"; + let priority = notification.ntfyPriority || 4; + if ("status" in heartbeatJSON) { + if (heartbeatJSON.status === DOWN) { + tags = [ "red_circle" ]; + status = "Down"; + // if priority is not 5, increase priority for down alerts + priority = priority === 5 ? priority : priority + 1; + } else if (heartbeatJSON["status"] === UP) { + tags = [ "green_circle" ]; + status = "Up"; + } + } let data = { "topic": notification.ntfytopic, - "message": msg, - "priority": notification.ntfyPriority || 4, - "title": "Uptime-Kuma", + "message": heartbeatJSON.msg, + "priority": priority, + "title": monitorJSON.name + " " + status + " [Uptime-Kuma]", + "tags": tags, + "actions": [ + { + "action": "view", + "label": "Open " + monitorJSON.name, + "url": monitorJSON.url + } + ] }; if (notification.ntfyIcon) {