summaryrefslogtreecommitdiffstats
path: root/server/notification-providers/alerta.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/notification-providers/alerta.js')
-rw-r--r--server/notification-providers/alerta.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/server/notification-providers/alerta.js b/server/notification-providers/alerta.js
new file mode 100644
index 0000000..f9a273b
--- /dev/null
+++ b/server/notification-providers/alerta.js
@@ -0,0 +1,68 @@
+const NotificationProvider = require("./notification-provider");
+const { DOWN, UP } = require("../../src/util");
+const axios = require("axios");
+
+class Alerta extends NotificationProvider {
+ name = "alerta";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+
+ try {
+ let config = {
+ headers: {
+ "Content-Type": "application/json;charset=UTF-8",
+ "Authorization": "Key " + notification.alertaApiKey,
+ }
+ };
+ let data = {
+ environment: notification.alertaEnvironment,
+ severity: "critical",
+ correlate: [],
+ service: [ "UptimeKuma" ],
+ value: "Timeout",
+ tags: [ "uptimekuma" ],
+ attributes: {},
+ origin: "uptimekuma",
+ type: "exceptionAlert",
+ };
+
+ if (heartbeatJSON == null) {
+ let postData = Object.assign({
+ event: "msg",
+ text: msg,
+ group: "uptimekuma-msg",
+ resource: "Message",
+ }, data);
+
+ await axios.post(notification.alertaApiEndpoint, postData, config);
+ } else {
+ let datadup = Object.assign( {
+ correlate: [ "service_up", "service_down" ],
+ event: monitorJSON["type"],
+ group: "uptimekuma-" + monitorJSON["type"],
+ resource: monitorJSON["name"],
+ }, data );
+
+ if (heartbeatJSON["status"] === DOWN) {
+ datadup.severity = notification.alertaAlertState; // critical
+ datadup.text = "Service " + monitorJSON["type"] + " is down.";
+ await axios.post(notification.alertaApiEndpoint, datadup, config);
+ } else if (heartbeatJSON["status"] === UP) {
+ datadup.severity = notification.alertaRecoverState; // cleaned
+ datadup.text = "Service " + monitorJSON["type"] + " is up.";
+ await axios.post(notification.alertaApiEndpoint, datadup, config);
+ }
+ }
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+
+ }
+}
+
+module.exports = Alerta;