Openstatus www.openstatus.dev
at faccb97887890dd3a67ee3910959f4abcd169d2a 83 lines 2.7 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 }; 37 case "tcp": 38 return { 39 workspaceId: String(monitor.workspaceId), 40 monitorId: String(monitor.id), 41 uri: monitor.url, 42 status: status, 43 assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, 44 cronTimestamp: timestamp, 45 degradedAfter: monitor.degradedAfter, 46 timeout: monitor.timeout, 47 trigger: "api", 48 otelConfig: monitor.otelEndpoint 49 ? { 50 endpoint: monitor.otelEndpoint, 51 headers: transformHeaders(monitor.otelHeaders), 52 } 53 : undefined, 54 }; 55 default: 56 throw new OpenStatusApiError({ 57 code: "BAD_REQUEST", 58 message: 59 "Invalid jobType, currently only 'http' and 'tcp' are supported", 60 }); 61 } 62} 63 64export function getCheckerUrl( 65 monitor: z.infer<typeof selectMonitorSchema>, 66 opts: { trigger?: "api" | "cron"; data?: boolean } = { 67 trigger: "api", 68 data: false, 69 }, 70): string { 71 switch (monitor.jobType) { 72 case "http": 73 return `https://openstatus-checker.fly.dev/checker/http?monitor_id=${monitor.id}&trigger=${opts.trigger}&data=${opts.data}`; 74 case "tcp": 75 return `https://openstatus-checker.fly.dev/checker/tcp?monitor_id=${monitor.id}&trigger=${opts.trigger}&data=${opts.data}`; 76 default: 77 throw new OpenStatusApiError({ 78 code: "BAD_REQUEST", 79 message: 80 "Invalid jobType, currently only 'http' and 'tcp' are supported", 81 }); 82 } 83}