2021-09-07 16:42:46 +02:00
|
|
|
class NotificationProvider {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Notification Provider Name
|
2023-08-11 09:46:41 +02:00
|
|
|
* @type {string}
|
2021-09-07 16:42:46 +02:00
|
|
|
*/
|
|
|
|
name = undefined;
|
|
|
|
|
|
|
|
/**
|
2022-04-16 21:24:53 +02:00
|
|
|
* Send a notification
|
2023-08-11 09:46:41 +02:00
|
|
|
* @param {BeanModel} notification Notification to send
|
2022-04-16 21:24:53 +02:00
|
|
|
* @param {string} msg General Message
|
2023-08-11 09:46:41 +02:00
|
|
|
* @param {?object} monitorJSON Monitor details (For Up/Down only)
|
|
|
|
* @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
|
2021-09-07 16:42:46 +02:00
|
|
|
* @returns {Promise<string>} Return Successful Message
|
2022-04-16 21:24:53 +02:00
|
|
|
* @throws Error with fail msg
|
2021-09-07 16:42:46 +02:00
|
|
|
*/
|
|
|
|
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
|
|
|
|
throw new Error("Have to override Notification.send(...)");
|
|
|
|
}
|
|
|
|
|
2024-06-13 17:00:11 +02:00
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*/
|
2024-06-13 17:04:38 +02:00
|
|
|
extractAdress(monitorJSON) {
|
2024-06-13 17:00:11 +02:00
|
|
|
if (!monitorJSON) {
|
2024-06-13 17:04:38 +02:00
|
|
|
return "";
|
2024-06-13 17:00:11 +02:00
|
|
|
}
|
|
|
|
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"];
|
|
|
|
}
|
2024-06-13 17:04:38 +02:00
|
|
|
return monitorJSON["hostname"];
|
2024-06-13 17:00:11 +02:00
|
|
|
default:
|
|
|
|
if (![ "https://", "http://", "" ].includes(monitorJSON["url"])) {
|
|
|
|
return monitorJSON["url"];
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-16 21:24:53 +02:00
|
|
|
/**
|
|
|
|
* Throws an error
|
|
|
|
* @param {any} error The error to throw
|
2023-08-11 09:46:41 +02:00
|
|
|
* @returns {void}
|
2022-04-16 21:24:53 +02:00
|
|
|
* @throws {any} The error specified
|
|
|
|
*/
|
2021-09-07 16:42:46 +02:00
|
|
|
throwGeneralAxiosError(error) {
|
|
|
|
let msg = "Error: " + error + " ";
|
|
|
|
|
|
|
|
if (error.response && error.response.data) {
|
|
|
|
if (typeof error.response.data === "string") {
|
|
|
|
msg += error.response.data;
|
|
|
|
} else {
|
2022-04-13 18:30:32 +02:00
|
|
|
msg += JSON.stringify(error.response.data);
|
2021-09-07 16:42:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-13 18:30:32 +02:00
|
|
|
throw new Error(msg);
|
2021-09-07 16:42:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = NotificationProvider;
|