diff --git a/server/private/lib/alerts/events/healthCheckEvents.ts b/server/private/lib/alerts/events/healthCheckEvents.ts index 594e27aec..02b46e94e 100644 --- a/server/private/lib/alerts/events/healthCheckEvents.ts +++ b/server/private/lib/alerts/events/healthCheckEvents.ts @@ -46,6 +46,16 @@ export async function fireHealthCheckHealthyAlert( ...extra } }); + await processAlerts({ + eventType: "health_check_toggle", + orgId, + healthCheckId, + data: { + healthCheckId, + ...(healthCheckName != null ? { healthCheckName } : {}), + ...extra + } + }); } catch (err) { logger.error( `fireHealthCheckHealthyAlert: unexpected error for healthCheckId ${healthCheckId}`, @@ -82,6 +92,16 @@ export async function fireHealthCheckNotHealthyAlert( ...extra } }); + await processAlerts({ + eventType: "health_check_toggle", + orgId, + healthCheckId, + data: { + healthCheckId, + ...(healthCheckName != null ? { healthCheckName } : {}), + ...extra + } + }); } catch (err) { logger.error( `fireHealthCheckNotHealthyAlert: unexpected error for healthCheckId ${healthCheckId}`, diff --git a/server/private/lib/alerts/events/resourceEvents.ts b/server/private/lib/alerts/events/resourceEvents.ts index 5c9b168e8..eb84982aa 100644 --- a/server/private/lib/alerts/events/resourceEvents.ts +++ b/server/private/lib/alerts/events/resourceEvents.ts @@ -46,6 +46,16 @@ export async function fireResourceHealthyAlert( ...extra } }); + await processAlerts({ + eventType: "resource_toggle", + orgId, + resourceId, + data: { + resourceId, + ...(resourceName != null ? { resourceName } : {}), + ...extra + } + }); } catch (err) { logger.error( `fireResourceHealthyAlert: unexpected error for resourceId ${resourceId}`, @@ -82,6 +92,16 @@ export async function fireResourceUnhealthyAlert( ...extra } }); + await processAlerts({ + eventType: "resource_toggle", + orgId, + resourceId, + data: { + resourceId, + ...(resourceName != null ? { resourceName } : {}), + ...extra + } + }); } catch (err) { logger.error( `fireResourceUnhealthyAlert: unexpected error for resourceId ${resourceId}`, @@ -124,4 +144,4 @@ export async function fireResourceToggleAlert( err ); } -} \ No newline at end of file +} diff --git a/server/private/lib/alerts/events/siteEvents.ts b/server/private/lib/alerts/events/siteEvents.ts index 27c4cb8bf..aeb8a8d2c 100644 --- a/server/private/lib/alerts/events/siteEvents.ts +++ b/server/private/lib/alerts/events/siteEvents.ts @@ -46,6 +46,16 @@ export async function fireSiteOnlineAlert( ...extra } }); + await processAlerts({ + eventType: "site_toggle", + orgId, + siteId, + data: { + siteId, + ...(siteName != null ? { siteName } : {}), + ...extra + } + }); } catch (err) { logger.error( `fireSiteOnlineAlert: unexpected error for siteId ${siteId}`, @@ -82,10 +92,20 @@ export async function fireSiteOfflineAlert( ...extra } }); + await processAlerts({ + eventType: "site_toggle", + orgId, + siteId, + data: { + siteId, + ...(siteName != null ? { siteName } : {}), + ...extra + } + }); } catch (err) { logger.error( `fireSiteOfflineAlert: unexpected error for siteId ${siteId}`, err ); } -} \ No newline at end of file +} diff --git a/server/private/lib/alerts/processAlerts.ts b/server/private/lib/alerts/processAlerts.ts index 5e098a1f2..681eb3cd0 100644 --- a/server/private/lib/alerts/processAlerts.ts +++ b/server/private/lib/alerts/processAlerts.ts @@ -330,4 +330,4 @@ async function resolveEmailRecipients(emailActionId: number): Promise } return Array.from(emailSet); -} \ No newline at end of file +} diff --git a/server/routers/newt/handleNewtDisconnectingMessage.ts b/server/routers/newt/handleNewtDisconnectingMessage.ts index 02c5a95ac..302738f19 100644 --- a/server/routers/newt/handleNewtDisconnectingMessage.ts +++ b/server/routers/newt/handleNewtDisconnectingMessage.ts @@ -2,6 +2,7 @@ import { MessageHandler } from "@server/routers/ws"; import { db, Newt, sites } from "@server/db"; import { eq } from "drizzle-orm"; import logger from "@server/logger"; +import { fireSiteOfflineAlert } from "@server/lib/alerts"; /** * Handles disconnecting messages from sites to show disconnected in the ui @@ -24,12 +25,15 @@ export const handleNewtDisconnectingMessage: MessageHandler = async ( try { // Update the client's last ping timestamp - await db + const [site] = await db .update(sites) .set({ online: false }) - .where(eq(sites.siteId, newt.siteId)); + .where(eq(sites.siteId, newt.siteId)) + .returning(); + + await fireSiteOfflineAlert(site.orgId, site.siteId, site.name); } catch (error) { logger.error("Error handling disconnecting message", { error }); }