mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-10-25 07:39:22 +08:00 
			
		
		
		
	add alerta service
This commit is contained in:
		
							
								
								
									
										67
									
								
								server/notification-providers/alerta.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								server/notification-providers/alerta.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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) { | ||||
|   | ||||
							
								
								
									
										14
									
								
								src/components/notifications/Alerta.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/components/notifications/Alerta.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -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', | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user