diff --git a/server/src/config/services.js b/server/src/config/services.js index 004acc885..03caa5241 100644 --- a/server/src/config/services.js +++ b/server/src/config/services.js @@ -173,6 +173,7 @@ export const initializeServices = async ({ logger, envSettings, settingsService const notificationUtils = new NotificationUtils({ stringService, emailService, + settingsService, }); const notificationService = new NotificationService({ diff --git a/server/src/service/v1/infrastructure/notificationUtils.js b/server/src/service/v1/infrastructure/notificationUtils.js index 879ad927c..106c8f349 100644 --- a/server/src/service/v1/infrastructure/notificationUtils.js +++ b/server/src/service/v1/infrastructure/notificationUtils.js @@ -3,9 +3,10 @@ const SERVICE_NAME = "NotificationUtils"; class NotificationUtils { static SERVICE_NAME = SERVICE_NAME; - constructor({ stringService, emailService }) { + constructor({ stringService, emailService, settingsService }) { this.stringService = stringService; this.emailService = emailService; + this.settingsService = settingsService; } get serviceName() { @@ -101,6 +102,8 @@ class NotificationUtils { const metrics = networkResponse?.payload?.data; const { cpu: { usage_percent: cpuUsage = -1 } = {}, memory: { usage_percent: memoryUsage = -1 } = {}, disk = [] } = metrics; + const { clientHost } = this.settingsService.getSettings(); + const alerts = { cpu: cpuThreshold !== -1 && cpuUsage > cpuThreshold ? true : false, memory: memoryThreshold !== -1 && memoryUsage > memoryThreshold ? true : false, @@ -113,12 +116,13 @@ class NotificationUtils { { name: "Monitor", value: monitor.name, inline: true }, { name: "URL", value: monitor.url, inline: false }, ]; + const goToIncidentField = { name: `Go to incident`, value: `${clientHost}/infrastructure/${monitor._id}` }; const formatDiscordAlert = { cpu: () => ({ title: "CPU alert", description: `Your current CPU usage (${(cpuUsage * 100).toFixed(0)}%) is above your threshold (${(cpuThreshold * 100).toFixed(0)}%)`, color: 15548997, - fields: monitorInfoFields, + fields: [...monitorInfoFields, goToIncidentField], footer: { text: "Checkmate" }, }), @@ -126,7 +130,7 @@ class NotificationUtils { title: "Memory alert", description: `Your current memory usage (${(memoryUsage * 100).toFixed(0)}%) is above your threshold (${(memoryThreshold * 100).toFixed(0)}%)`, color: 15548997, - fields: monitorInfoFields, + fields: [...monitorInfoFields, goToIncidentField], footer: { text: "Checkmate" }, }), @@ -142,6 +146,7 @@ class NotificationUtils { value: `${(d?.usage_percent * 100).toFixed(0)}%`, inline: true, })), + goToIncidentField, ], }), }; @@ -184,8 +189,10 @@ class NotificationUtils { }; buildHardwareNotificationMessage = (alerts, monitor) => { + const { clientHost } = this.settingsService.getSettings(); const alertsHeader = [`Monitor: ${monitor.name}`, `URL: ${monitor.url}`]; - const alertText = alerts.length > 0 ? [...alertsHeader, ...alerts] : []; + const alertFooter = [`Go to incident: ${clientHost}/infrastructure/${monitor._id}`]; + const alertText = alerts.length > 0 ? [...alertsHeader, ...alerts, ...alertFooter] : []; return alertText.map((alert) => alert).join("\n"); }; buildHardwareWebhookBody = (alerts, monitor) => {