fix(notifications): route Rocket.Chat links by monitor type

Build title_link from the monitor type (hardware -> infrastructure,
pagespeed -> pagespeed, uptime types -> uptime) and omit it when
clientHost is not configured, instead of always linking to the
infrastructure page.
This commit is contained in:
Marcos Paulo Diniz committed 2026-08-13 11:56:28 -03:00
1 parent 8d1fd61bb4
commit d4eaad6170
2 files changed
+52 -2

No files matched your search

@@ -1,4 +1,5 @@
const SERVICE_NAME = "RocketChatProvider";
import { supportsUptimeDetails, type MonitorType } from "@/domain/monitors/monitor.type.js";
import type { Notification, NotificationMessage } from "@/domain/notifications/notification.type.js";
import { NotificationProvider } from "@/domain/notifications/providers/INotificationProvider.js";
import { getTestMessage } from "@/domain/notifications/providers/utils.js";
@@ -84,6 +85,7 @@ export class RocketChatProvider extends NotificationProvider {
}
private buildPayload(message: NotificationMessage): RocketChatPayload {
const monitorUrl = this.monitorUrl(message);
const fields: RocketChatField[] = [
{ title: "Monitor", value: message.monitor.name, short: true },
{ title: "Type", value: message.monitor.type, short: true },
@@ -123,7 +125,7 @@ export class RocketChatProvider extends NotificationProvider {
{
color: this.severityColor(message.severity),
title: message.content.title,
title_link: `${message.clientHost}/infrastructure/${message.monitor.id}`,
...(monitorUrl ? { title_link: monitorUrl } : {}),
fields,
ts: message.content.timestamp.toISOString(),
},
@@ -131,6 +133,27 @@ export class RocketChatProvider extends NotificationProvider {
};
}
private monitorUrl(message: NotificationMessage): string | undefined {
const clientHost = message.clientHost?.trim();
if (!clientHost || clientHost === "Host not defined") {
return undefined;
}
if (message.monitor.type === "hardware") {
return `${clientHost}/infrastructure/${message.monitor.id}`;
}
if (message.monitor.type === "pagespeed") {
return `${clientHost}/pagespeed/${message.monitor.id}`;
}
if (supportsUptimeDetails(message.monitor.type as MonitorType)) {
return `${clientHost}/uptime/${message.monitor.id}`;
}
return undefined;
}
private severityColor(severity: NotificationMessage["severity"]): string {
switch (severity) {
case "critical":