mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-11-04 13:46:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const NotificationProvider = require("./notification-provider");
 | 
						|
const axios = require("axios");
 | 
						|
const { UP, DOWN } = require("../../src/util");
 | 
						|
 | 
						|
const opsgenieAlertsUrlEU = "https://api.eu.opsgenie.com/v2/alerts";
 | 
						|
const opsgenieAlertsUrlUS = "https://api.opsgenie.com/v2/alerts";
 | 
						|
let okMsg = "Sent Successfully.";
 | 
						|
 | 
						|
class Opsgenie extends NotificationProvider {
 | 
						|
 | 
						|
    name = "Opsgenie";
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
 | 
						|
        let opsgenieAlertsUrl;
 | 
						|
        let priority = (notification.opsgeniePriority == "") ? 3 : notification.opsgeniePriority;
 | 
						|
        const textMsg = "Uptime Kuma Alert";
 | 
						|
 | 
						|
        try {
 | 
						|
            switch (notification.opsgenieRegion) {
 | 
						|
                case "US":
 | 
						|
                    opsgenieAlertsUrl = opsgenieAlertsUrlUS;
 | 
						|
                    break;
 | 
						|
                case "EU":
 | 
						|
                    opsgenieAlertsUrl = opsgenieAlertsUrlEU;
 | 
						|
                    break;
 | 
						|
                default:
 | 
						|
                    opsgenieAlertsUrl = opsgenieAlertsUrlUS;
 | 
						|
            }
 | 
						|
 | 
						|
            if (heartbeatJSON == null) {
 | 
						|
                let notificationTestAlias = "uptime-kuma-notification-test";
 | 
						|
                let data = {
 | 
						|
                    "message": msg,
 | 
						|
                    "alias": notificationTestAlias,
 | 
						|
                    "source": "Uptime Kuma",
 | 
						|
                    "priority": "P5"
 | 
						|
                };
 | 
						|
 | 
						|
                return this.post(notification, opsgenieAlertsUrl, data);
 | 
						|
            }
 | 
						|
 | 
						|
            if (heartbeatJSON.status === DOWN) {
 | 
						|
                let data = {
 | 
						|
                    "message": monitorJSON ? textMsg + `: ${monitorJSON.name}` : textMsg,
 | 
						|
                    "alias": monitorJSON.name,
 | 
						|
                    "description": msg,
 | 
						|
                    "source": "Uptime Kuma",
 | 
						|
                    "priority": `P${priority}`
 | 
						|
                };
 | 
						|
 | 
						|
                return this.post(notification, opsgenieAlertsUrl, data);
 | 
						|
            }
 | 
						|
 | 
						|
            if (heartbeatJSON.status === UP) {
 | 
						|
                let opsgenieAlertsCloseUrl = `${opsgenieAlertsUrl}/${encodeURIComponent(monitorJSON.name)}/close?identifierType=alias`;
 | 
						|
                let data = {
 | 
						|
                    "source": "Uptime Kuma",
 | 
						|
                };
 | 
						|
 | 
						|
                return this.post(notification, opsgenieAlertsCloseUrl, data);
 | 
						|
            }
 | 
						|
        } catch (error) {
 | 
						|
            this.throwGeneralAxiosError(error);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     *
 | 
						|
     * @param {BeanModel} notification
 | 
						|
     * @param {string} url Request url
 | 
						|
     * @param {Object} data Request body
 | 
						|
     * @returns {Promise<string>}
 | 
						|
     */
 | 
						|
    async post(notification, url, data) {
 | 
						|
        let config = {
 | 
						|
            headers: {
 | 
						|
                "Content-Type": "application/json",
 | 
						|
                "Authorization": `GenieKey ${notification.opsgenieApiKey}`,
 | 
						|
            }
 | 
						|
        };
 | 
						|
 | 
						|
        let res = await axios.post(url, data, config);
 | 
						|
        if (res.status == null) {
 | 
						|
            return "Opsgenie notification failed with invalid response!";
 | 
						|
        }
 | 
						|
        if (res.status < 200 || res.status >= 300) {
 | 
						|
            return `Opsgenie notification failed with status code ${res.status}`;
 | 
						|
        }
 | 
						|
 | 
						|
        return okMsg;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = Opsgenie;
 |