mirror of https://github.com/louislam/uptime-kuma
				
				
				
			
						commit
						14d8095f12
					
				| 
						 | 
				
			
			@ -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 postData = Object.assign({
 | 
			
		||||
                    event: "msg",
 | 
			
		||||
                    text: msg,
 | 
			
		||||
                    group: "uptimekuma-msg",
 | 
			
		||||
                    resource: "Message",
 | 
			
		||||
                }, data);
 | 
			
		||||
 | 
			
		||||
                await axios.post(alertaUrl, postData, config);
 | 
			
		||||
            } else {
 | 
			
		||||
                let datadup = Object.assign( {
 | 
			
		||||
                    correlate: ["service_up", "service_down"],
 | 
			
		||||
                    event: monitorJSON["type"],
 | 
			
		||||
                    group: "uptimekuma-" + monitorJSON["type"],
 | 
			
		||||
                    resource: monitorJSON["name"],
 | 
			
		||||
                }, data );
 | 
			
		||||
 | 
			
		||||
                if (heartbeatJSON["status"] == DOWN) {
 | 
			
		||||
                    datadup.severity = notification.alertaAlertState; // critical
 | 
			
		||||
                    datadup.text = "Service " + monitorJSON["type"] + " is down.";
 | 
			
		||||
                    await axios.post(alertaUrl, datadup, config);
 | 
			
		||||
                } else if (heartbeatJSON["status"] == UP) {
 | 
			
		||||
                    datadup.severity = notification.alertaRecoverState; // cleaned
 | 
			
		||||
                    datadup.text = "Service " + monitorJSON["type"] + " is up.";
 | 
			
		||||
                    await axios.post(alertaUrl, datadup, config);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return okMsg;
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            this.throwGeneralAxiosError(error);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = Alerta;
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ const Stackfield = require("./notification-providers/stackfield");
 | 
			
		|||
const WeCom = require("./notification-providers/wecom");
 | 
			
		||||
const GoogleChat = require("./notification-providers/google-chat");
 | 
			
		||||
const Gorush = require("./notification-providers/gorush");
 | 
			
		||||
const Alerta = require("./notification-providers/alerta");
 | 
			
		||||
 | 
			
		||||
class Notification {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +68,8 @@ class Notification {
 | 
			
		|||
            new Stackfield(),
 | 
			
		||||
            new WeCom(),
 | 
			
		||||
            new GoogleChat(),
 | 
			
		||||
            new Gorush()
 | 
			
		||||
            new Gorush(),
 | 
			
		||||
            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>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,6 +27,7 @@ import Stackfield from './Stackfield.vue';
 | 
			
		|||
import WeCom from "./WeCom.vue";
 | 
			
		||||
import GoogleChat from "./GoogleChat.vue";
 | 
			
		||||
import Gorush from "./Gorush.vue";
 | 
			
		||||
import Alerta from "./Alerta.vue";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manage all notification form.
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +63,8 @@ const NotificationFormList = {
 | 
			
		|||
    "stackfield": Stackfield,
 | 
			
		||||
    "WeCom": WeCom,
 | 
			
		||||
    "GoogleChat": GoogleChat,
 | 
			
		||||
    "gorush": Gorush
 | 
			
		||||
    "gorush": Gorush,
 | 
			
		||||
    "alerta": Alerta,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default NotificationFormList;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -362,4 +362,10 @@ export default {
 | 
			
		|||
    smtpDkimheaderFieldNames: "Header Keys to sign (Optional)",
 | 
			
		||||
    smtpDkimskipFields: "Header Keys not to sign (Optional)",
 | 
			
		||||
    gorush: "Gorush",
 | 
			
		||||
    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