mirror of https://github.com/louislam/uptime-kuma
				
				
				
			add alerta service
							parent
							
								
									ab61acab63
								
							
						
					
					
						commit
						cefe43800f
					
				| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
const NotificationProvider = require("./notification-provider");
 | 
			
		||||
const { DOWN, UP } = require("../../src/util");
 | 
			
		||||
const axios = require("axios");
 | 
			
		||||
 | 
			
		||||
class Alerta extends NotificationProvider {
 | 
			
		||||
 | 
			
		||||
    name = "alerta";
 | 
			
		||||
 | 
			
		||||
    async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
 | 
			
		||||
        let okMsg = "Sent Successfully.";
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            let alertaUrl = `${notification.alertaApiEndpoint}`;
 | 
			
		||||
            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 testdata = Object.assign( {
 | 
			
		||||
                    event: "test",
 | 
			
		||||
                    text: "Testing Successful.",
 | 
			
		||||
                    group: "uptimekuma-test",
 | 
			
		||||
                    resource: "Test",
 | 
			
		||||
                }, data );
 | 
			
		||||
                await axios.post(alertaUrl, testdata, config);
 | 
			
		||||
            } else {
 | 
			
		||||
                let datadup = Object.assign( {
 | 
			
		||||
                    correlate: ["service_up", "service_down"],
 | 
			
		||||
                    group: "uptimekuma-" + monitorJSON["type"],
 | 
			
		||||
                    resource: monitorJSON["name"],
 | 
			
		||||
                }, data );
 | 
			
		||||
 | 
			
		||||
                if (heartbeatJSON["status"] == DOWN) {
 | 
			
		||||
                    datadup.severity = notification.alertaAlertState; // critical
 | 
			
		||||
                    datadup.event = "service_state";
 | 
			
		||||
                    datadup.text = "Service is down.";
 | 
			
		||||
                    await axios.post(alertaUrl, datadup, config);
 | 
			
		||||
                } else if (heartbeatJSON["status"] == UP) {
 | 
			
		||||
                    datadup.severity = notification.alertaRecoverState; // cleaner
 | 
			
		||||
                    datadup.event = "service_state";
 | 
			
		||||
                    datadup.text = "Service is up.";
 | 
			
		||||
                    await axios.post(alertaUrl, datadup, config);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return okMsg;
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            this.throwGeneralAxiosError(error);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = Alerta;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,6 +27,7 @@ const SerwerSMS = require("./notification-providers/serwersms");
 | 
			
		|||
const Stackfield = require("./notification-providers/stackfield");
 | 
			
		||||
const WeCom = require("./notification-providers/wecom");
 | 
			
		||||
const GoogleChat = require("./notification-providers/google-chat");
 | 
			
		||||
const Alerta = require("./notification-providers/alerta");
 | 
			
		||||
 | 
			
		||||
class Notification {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +66,8 @@ class Notification {
 | 
			
		|||
            new SerwerSMS(),
 | 
			
		||||
            new Stackfield(),
 | 
			
		||||
            new WeCom(),
 | 
			
		||||
            new GoogleChat()
 | 
			
		||||
            new GoogleChat(),
 | 
			
		||||
            new Alerta(),
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        for (let item of list) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div class="mb-3">
 | 
			
		||||
        <label for="alerta-api-endpoint" class="form-label">{{ $t("alertaApiEndpoint") }}</label>
 | 
			
		||||
        <input id="alerta-api-endpoint" v-model="$parent.notification.alertaApiEndpoint" type="text" class="form-control" required>
 | 
			
		||||
        <label for="alerta-environment" class="form-label">{{ $t("alertaEnvironment") }}</label>
 | 
			
		||||
        <input id="alerta-environment" v-model="$parent.notification.alertaEnvironment" type="text" class="form-control" required>
 | 
			
		||||
        <label for="alerta-api-key" class="form-label">{{ $t("alertaApiKey") }}</label>
 | 
			
		||||
        <input id="alerta-api-key" v-model="$parent.notification.alertaApiKey" type="text" class="form-control" required>
 | 
			
		||||
        <label for="alerta-alert-state" class="form-label">{{ $t("alertaAlertState") }}</label>
 | 
			
		||||
        <input id="alerta-alert-state" v-model="$parent.notification.alertaAlertState" type="text" class="form-control" placeholder="critical" required>
 | 
			
		||||
        <label for="alerta-recover-state" class="form-label">{{ $t("alertaRecoverState") }}</label>
 | 
			
		||||
        <input id="alerta-recover-state" v-model="$parent.notification.alertaRecoverState" type="text" class="form-control" placeholder="cleared" required>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -26,6 +26,7 @@ import SerwerSMS from "./SerwerSMS.vue";
 | 
			
		|||
import Stackfield from './Stackfield.vue';
 | 
			
		||||
import WeCom from "./WeCom.vue";
 | 
			
		||||
import GoogleChat from "./GoogleChat.vue";
 | 
			
		||||
import Alerta from "./Alerta.vue";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manage all notification form.
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +61,8 @@ const NotificationFormList = {
 | 
			
		|||
    "serwersms": SerwerSMS,
 | 
			
		||||
    "stackfield": Stackfield,
 | 
			
		||||
    "WeCom": WeCom,
 | 
			
		||||
    "GoogleChat": GoogleChat
 | 
			
		||||
    "GoogleChat": GoogleChat,
 | 
			
		||||
    "alerta": Alerta,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default NotificationFormList;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -361,4 +361,10 @@ export default {
 | 
			
		|||
    smtpDkimHashAlgo: "Hash Algorithm (Optional)",
 | 
			
		||||
    smtpDkimheaderFieldNames: "Header Keys to sign (Optional)",
 | 
			
		||||
    smtpDkimskipFields: "Header Keys not to sign (Optional)",
 | 
			
		||||
    alerta: 'Alerta',
 | 
			
		||||
    alertaApiEndpoint: 'API Endpoint',
 | 
			
		||||
    alertaEnvironment: 'Environment',
 | 
			
		||||
    alertaApiKey: 'API Key',
 | 
			
		||||
    alertaAlertState: 'Alert State',
 | 
			
		||||
    alertaRecoverState: 'Recover State',
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -304,4 +304,9 @@ export default {
 | 
			
		|||
    steamApiKeyDescription: "Pour surveiller un serveur Steam, vous avez besoin  d'une clé Steam Web-API. Vous pouvez enregistrer votre clé ici : ",
 | 
			
		||||
    "Current User": "Utilisateur actuel",
 | 
			
		||||
    recent: "Récent",
 | 
			
		||||
    alertaApiEndpoint: 'API Endpoint',
 | 
			
		||||
    alertaEnvironment: 'Environement',
 | 
			
		||||
    alertaApiKey: "Clé de l'API",
 | 
			
		||||
    alertaAlertState: "État de l'Alerte",
 | 
			
		||||
    alertaRecoverState: 'État de récupération',
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue