Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
3.7 kB ยท 117 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118import { emailDataSchema } from "@openstatus/db/src/schema";import type { Region } from "@openstatus/db/src/schema/constants";import { EmailClient } from "@openstatus/emails/src/client";import type { NotificationContext } from "@openstatus/notification-base";import { regionDict } from "@openstatus/regions";
import { env } from "../env";
export const sendAlert = async ({ monitor, notification, statusCode, message, cronTimestamp, latency, regions, incident,}: NotificationContext) => { // Convert regions array to single region for backwards compatibility const region = regions?.[0] as Region | undefined; const emailClient = new EmailClient({ apiKey: env.RESEND_API_KEY });
const config = emailDataSchema.safeParse(JSON.parse(notification.data));
if (!config.success) return;
await emailClient.sendMonitorAlert({ monitorId: monitor.id, name: monitor.name, type: "alert", method: monitor.jobType === "http" ? (monitor.method ?? undefined) : undefined, degradedAfter: monitor.degradedAfter ?? undefined, firstSeen: incident?.startedAt?.toISOString(), to: config.data.email, url: monitor.url, status: statusCode?.toString(), latency: latency ? `${latency} ms` : "N/A", region: region ? regionDict[region].location : "N/A", affectedRegions: regions?.length, totalRegions: monitor.regions?.length, timestamp: new Date(cronTimestamp).toISOString(), message, });};
export const sendRecovery = async ({ monitor, notification, statusCode, cronTimestamp, regions, latency, incident,}: NotificationContext) => { // Convert regions array to single region for backwards compatibility const region = regions?.[0] as Region | undefined; const emailClient = new EmailClient({ apiKey: env.RESEND_API_KEY });
const config = emailDataSchema.safeParse(JSON.parse(notification.data));
if (!config.success) return;
await emailClient.sendMonitorAlert({ monitorId: monitor.id, name: monitor.name, type: "recovery", method: monitor.jobType === "http" ? (monitor.method ?? undefined) : undefined, degradedAfter: monitor.degradedAfter ?? undefined, firstSeen: incident?.startedAt?.toISOString(), to: config.data.email, url: monitor.url, status: statusCode?.toString(), latency: latency ? `${latency} ms` : "N/A", region: region ? regionDict[region].location : "N/A", affectedRegions: regions?.length, totalRegions: monitor.regions?.length, timestamp: new Date(cronTimestamp).toISOString(), });};
export const sendDegraded = async ({ monitor, notification, statusCode, cronTimestamp, regions, latency, incident,}: NotificationContext) => { // Convert regions array to single region for backwards compatibility const region = regions?.[0] as Region | undefined; const emailClient = new EmailClient({ apiKey: env.RESEND_API_KEY });
const config = emailDataSchema.safeParse(JSON.parse(notification.data));
if (!config.success) return;
await emailClient.sendMonitorAlert({ monitorId: monitor.id, name: monitor.name, type: "degraded", method: monitor.jobType === "http" ? (monitor.method ?? undefined) : undefined, degradedAfter: monitor.degradedAfter ?? undefined, firstSeen: incident?.startedAt?.toISOString(), to: config.data.email, url: monitor.url, status: statusCode?.toString(), latency: latency ? `${latency} ms` : "N/A", region: region ? regionDict[region].location : "N/A", affectedRegions: regions?.length, totalRegions: monitor.regions?.length, timestamp: new Date(cronTimestamp).toISOString(), });};