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.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697import type { z } from "@hono/zod-openapi";import type { selectMonitorSchema } from "@openstatus/db/src/schema";import { type httpPayloadSchema, type tpcPayloadSchema, transformHeaders,} from "@openstatus/utils";
import { OpenStatusApiError } from "@/libs/errors";
export function getCheckerPayload( monitor: z.infer<typeof selectMonitorSchema>, status: z.infer<typeof selectMonitorSchema>["status"],): z.infer<typeof httpPayloadSchema> | z.infer<typeof tpcPayloadSchema> { const timestamp = new Date().getTime(); switch (monitor.jobType) { case "http": return { workspaceId: String(monitor.workspaceId), monitorId: String(monitor.id), url: monitor.url, method: monitor.method || "GET", cronTimestamp: timestamp, body: monitor.body, headers: monitor.headers, status: status, assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, degradedAfter: monitor.degradedAfter, timeout: monitor.timeout, trigger: "api", otelConfig: monitor.otelEndpoint ? { endpoint: monitor.otelEndpoint, headers: transformHeaders(monitor.otelHeaders), } : undefined, retry: monitor.retry ?? 0, followRedirects: monitor.followRedirects ?? false, }; case "tcp": return { workspaceId: String(monitor.workspaceId), monitorId: String(monitor.id), uri: monitor.url, status: status, assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, cronTimestamp: timestamp, degradedAfter: monitor.degradedAfter, timeout: monitor.timeout, trigger: "api", otelConfig: monitor.otelEndpoint ? { endpoint: monitor.otelEndpoint, headers: transformHeaders(monitor.otelHeaders), } : undefined, retry: monitor.retry ?? 0, followRedirects: monitor.followRedirects ?? false, }; default: throw new OpenStatusApiError({ code: "BAD_REQUEST", message: "Invalid jobType, currently only 'http' and 'tcp' are supported", }); }}
// Bounds outbound checker fetches so a slow check can't pin API requests open// indefinitely: the monitor's own timeout plus a buffer for checker overhead.export function getCheckerTimeout( monitor: z.infer<typeof selectMonitorSchema>,): number { return (monitor.timeout ?? 45_000) + 15_000;}
export function getCheckerUrl( monitor: z.infer<typeof selectMonitorSchema>, opts: { trigger?: "api" | "cron"; data?: boolean } = { trigger: "api", data: false, },): string { switch (monitor.jobType) { case "http": return `https://openstatus-checker.fly.dev/checker/http?monitor_id=${monitor.id}&trigger=${opts.trigger}&data=${opts.data}`; case "tcp": return `https://openstatus-checker.fly.dev/checker/tcp?monitor_id=${monitor.id}&trigger=${opts.trigger}&data=${opts.data}`; default: throw new OpenStatusApiError({ code: "BAD_REQUEST", message: "Invalid jobType, currently only 'http' and 'tcp' are supported", }); }}