summaryrefslogtreecommitdiffstats
path: root/server/notification-providers/notification-provider.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/notification-providers/notification-provider.js')
-rw-r--r--server/notification-providers/notification-provider.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/server/notification-providers/notification-provider.js b/server/notification-providers/notification-provider.js
new file mode 100644
index 0000000..b9fb3d8
--- /dev/null
+++ b/server/notification-providers/notification-provider.js
@@ -0,0 +1,73 @@
+class NotificationProvider {
+
+ /**
+ * Notification Provider Name
+ * @type {string}
+ */
+ name = undefined;
+
+ /**
+ * Send a notification
+ * @param {BeanModel} notification Notification to send
+ * @param {string} msg General Message
+ * @param {?object} monitorJSON Monitor details (For Up/Down only)
+ * @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
+ * @returns {Promise<string>} Return Successful Message
+ * @throws Error with fail msg
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ 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.
+ */
+ extractAddress(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
+ * @returns {void}
+ * @throws {any} The error specified
+ */
+ throwGeneralAxiosError(error) {
+ let msg = "Error: " + error + " ";
+
+ if (error.response && error.response.data) {
+ if (typeof error.response.data === "string") {
+ msg += error.response.data;
+ } else {
+ msg += JSON.stringify(error.response.data);
+ }
+ }
+
+ throw new Error(msg);
+ }
+}
+
+module.exports = NotificationProvider;