Openstatus www.openstatus.dev
at 4c0f4c00a38753a5d0dfd7e7b7b7706dec6f1503 87 lines 2.9 kB view raw
1import { OpenStatusApiError } from "@/libs/errors"; 2import type { z } from "@hono/zod-openapi"; 3import type { selectMonitorSchema } from "@openstatus/db/src/schema"; 4import { 5 type httpPayloadSchema, 6 type tpcPayloadSchema, 7 transformHeaders, 8} from "@openstatus/utils"; 9 10export function getCheckerPayload( 11 monitor: z.infer<typeof selectMonitorSchema>, 12 status: z.infer<typeof selectMonitorSchema>["status"], 13): z.infer<typeof httpPayloadSchema> | z.infer<typeof tpcPayloadSchema> { 14 const timestamp = new Date().getTime(); 15 switch (monitor.jobType) { 16 case "http": 17 return { 18 workspaceId: String(monitor.workspaceId), 19 monitorId: String(monitor.id), 20 url: monitor.url, 21 method: monitor.method || "GET", 22 cronTimestamp: timestamp, 23 body: monitor.body, 24 headers: monitor.headers, 25 status: status, 26 assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, 27 degradedAfter: monitor.degradedAfter, 28 timeout: monitor.timeout, 29 trigger: "api", 30 otelConfig: monitor.otelEndpoint 31 ? { 32 endpoint: monitor.otelEndpoint, 33 headers: transformHeaders(monitor.otelHeaders), 34 } 35 : undefined, 36 retry: monitor.retry ?? 0, 37 followRedirects: monitor.followRedirects ?? false, 38 }; 39 case "tcp": 40 return { 41 workspaceId: String(monitor.workspaceId), 42 monitorId: String(monitor.id), 43 uri: monitor.url, 44 status: status, 45 assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, 46 cronTimestamp: timestamp, 47 degradedAfter: monitor.degradedAfter, 48 timeout: monitor.timeout, 49 trigger: "api", 50 otelConfig: monitor.otelEndpoint 51 ? { 52 endpoint: monitor.otelEndpoint, 53 headers: transformHeaders(monitor.otelHeaders), 54 } 55 : undefined, 56 retry: monitor.retry ?? 0, 57 followRedirects: monitor.followRedirects ?? false, 58 }; 59 default: 60 throw new OpenStatusApiError({ 61 code: "BAD_REQUEST", 62 message: 63 "Invalid jobType, currently only 'http' and 'tcp' are supported", 64 }); 65 } 66} 67 68export function getCheckerUrl( 69 monitor: z.infer<typeof selectMonitorSchema>, 70 opts: { trigger?: "api" | "cron"; data?: boolean } = { 71 trigger: "api", 72 data: false, 73 }, 74): string { 75 switch (monitor.jobType) { 76 case "http": 77 return `https://openstatus-checker.fly.dev/checker/http?monitor_id=${monitor.id}&trigger=${opts.trigger}&data=${opts.data}`; 78 case "tcp": 79 return `https://openstatus-checker.fly.dev/checker/tcp?monitor_id=${monitor.id}&trigger=${opts.trigger}&data=${opts.data}`; 80 default: 81 throw new OpenStatusApiError({ 82 code: "BAD_REQUEST", 83 message: 84 "Invalid jobType, currently only 'http' and 'tcp' are supported", 85 }); 86 } 87}