From 8050cb8e99fed911f69b78b2d99994e2f180ef14 Mon Sep 17 00:00:00 2001 From: Philipp Bischoff Date: Sat, 11 Dec 2021 23:43:12 +0100 Subject: [PATCH] implement google chat notification type --- server/notification-providers/google-chat.js | 46 ++++++++++++++++++++ server/notification.js | 2 + src/components/notifications/GoogleChat.vue | 13 ++++++ src/components/notifications/index.js | 2 + 4 files changed, 63 insertions(+) create mode 100644 server/notification-providers/google-chat.js create mode 100644 src/components/notifications/GoogleChat.vue diff --git a/server/notification-providers/google-chat.js b/server/notification-providers/google-chat.js new file mode 100644 index 000000000..f73f4b5a5 --- /dev/null +++ b/server/notification-providers/google-chat.js @@ -0,0 +1,46 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { setting } = require("../util-server"); +const { getMonitorRelativeURL } = require("../../src/util"); + +class GoogleChat extends NotificationProvider { + + name = "Google Chat"; + + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + let okMsg = "Sent Successfully."; + try { + // Google Chat message formatting: https://developers.google.com/chat/api/guides/message-formats/basic + + let textMsg = '' + if (heartbeatJSON && heartbeatJSON.status === UP) { + textMsg = `✅ Application is back online`; + } else { + textMsg = `🔴 Application went down`; + } + + if (monitorJSON && monitorJSON.name) { + textMsg += `\n*${monitorJSON.name}*`; + } + + textMsg += `\n${msg}`; + + const baseURL = await setting("primaryBaseURL"); + if (baseURL) { + textMsg += `\n${baseURL + getMonitorRelativeURL(monitorJSON.id)}`; + } + + const data = { + "text": textMsg, + }; + + await axios.post(notification.googleChatWebhookURL, data); + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + + } +} + +module.exports = GoogleChat; diff --git a/server/notification.js b/server/notification.js index 3eb5f97bf..56a7e84d8 100644 --- a/server/notification.js +++ b/server/notification.js @@ -25,6 +25,7 @@ const DingDing = require("./notification-providers/dingding"); const Bark = require("./notification-providers/bark"); const SerwerSMS = require("./notification-providers/serwersms"); const Stackfield = require("./notification-providers/stackfield"); +const GoogleChat = require("./notification-providers/google-chat"); class Notification { @@ -62,6 +63,7 @@ class Notification { new Bark(), new SerwerSMS(), new Stackfield(), + new GoogleChat() ]; for (let item of list) { diff --git a/src/components/notifications/GoogleChat.vue b/src/components/notifications/GoogleChat.vue new file mode 100644 index 000000000..c19cae0de --- /dev/null +++ b/src/components/notifications/GoogleChat.vue @@ -0,0 +1,13 @@ + diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index 155a1ab26..678106102 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -24,6 +24,7 @@ import DingDing from "./DingDing.vue"; import Bark from "./Bark.vue"; import SerwerSMS from "./SerwerSMS.vue"; import Stackfield from './Stackfield.vue'; +import GoogleChat from './GoogleChat.vue'; /** * Manage all notification form. @@ -57,6 +58,7 @@ const NotificationFormList = { "Bark": Bark, "serwersms": SerwerSMS, "stackfield": Stackfield, + "Google Chat": GoogleChat } export default NotificationFormList