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 Stackfield = require("./notification-providers/stackfield"); | ||||||
| const WeCom = require("./notification-providers/wecom"); | const WeCom = require("./notification-providers/wecom"); | ||||||
| const GoogleChat = require("./notification-providers/google-chat"); | const GoogleChat = require("./notification-providers/google-chat"); | ||||||
|  | const Alerta = require("./notification-providers/alerta"); | ||||||
|  |  | ||||||
| class Notification { | class Notification { | ||||||
|  |  | ||||||
| @@ -65,7 +66,8 @@ class Notification { | |||||||
|             new SerwerSMS(), |             new SerwerSMS(), | ||||||
|             new Stackfield(), |             new Stackfield(), | ||||||
|             new WeCom(), |             new WeCom(), | ||||||
|             new GoogleChat() |             new GoogleChat(), | ||||||
|  |             new Alerta(), | ||||||
|         ]; |         ]; | ||||||
|  |  | ||||||
|         for (let item of list) { |         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 Stackfield from './Stackfield.vue'; | ||||||
| import WeCom from "./WeCom.vue"; | import WeCom from "./WeCom.vue"; | ||||||
| import GoogleChat from "./GoogleChat.vue"; | import GoogleChat from "./GoogleChat.vue"; | ||||||
|  | import Alerta from "./Alerta.vue"; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Manage all notification form. |  * Manage all notification form. | ||||||
| @@ -60,7 +61,8 @@ const NotificationFormList = { | |||||||
|     "serwersms": SerwerSMS, |     "serwersms": SerwerSMS, | ||||||
|     "stackfield": Stackfield, |     "stackfield": Stackfield, | ||||||
|     "WeCom": WeCom, |     "WeCom": WeCom, | ||||||
|     "GoogleChat": GoogleChat |     "GoogleChat": GoogleChat, | ||||||
|  |     "alerta": Alerta, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| export default NotificationFormList; | export default NotificationFormList; | ||||||
|   | |||||||
| @@ -361,4 +361,10 @@ export default { | |||||||
|     smtpDkimHashAlgo: "Hash Algorithm (Optional)", |     smtpDkimHashAlgo: "Hash Algorithm (Optional)", | ||||||
|     smtpDkimheaderFieldNames: "Header Keys to sign (Optional)", |     smtpDkimheaderFieldNames: "Header Keys to sign (Optional)", | ||||||
|     smtpDkimskipFields: "Header Keys not 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 : ", |     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", |     "Current User": "Utilisateur actuel", | ||||||
|     recent: "Récent", |     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