Openstatus www.openstatus.dev
at main 111 lines 3.3 kB view raw
1"use client"; 2 3import { 4 DataTableSheet, 5 DataTableSheetContent, 6 DataTableSheetHeader, 7 DataTableSheetTitle, 8} from "@/components/data-table/data-table-sheet"; 9import type { RouterOutputs } from "@openstatus/api"; 10import { DataTableBasics } from "./data-table-basics"; 11 12type TestTCP = RouterOutputs["checker"]["testTcp"]; 13type TestHTTP = RouterOutputs["checker"]["testHttp"]; 14type TestDNS = RouterOutputs["checker"]["testDns"]; 15type Monitor = NonNullable<RouterOutputs["monitor"]["get"]>; 16 17export function DataTableSheetTest({ 18 data, 19 monitor, 20 onClose, 21}: { 22 data: TestTCP | TestHTTP | TestDNS | null; 23 monitor: Monitor; 24 onClose: () => void; 25}) { 26 if (!data) return null; 27 28 const _data = mapping(data, monitor); 29 30 if (!_data) return null; 31 32 return ( 33 <DataTableSheet defaultOpen> 34 {/* NOTE: we are using onCloseAutoFocus to reset with a delay to avoid abrupt closing of the sheet */} 35 <DataTableSheetContent className="sm:max-w-lg" onCloseAutoFocus={onClose}> 36 <DataTableSheetHeader className="px-2"> 37 <DataTableSheetTitle>Test Result</DataTableSheetTitle> 38 </DataTableSheetHeader> 39 <DataTableBasics data={_data} /> 40 </DataTableSheetContent> 41 </DataTableSheet> 42 ); 43} 44 45function mapping(data: TestTCP | TestHTTP | TestDNS, monitor: Monitor) { 46 switch (data.type) { 47 case "http": 48 return { 49 id: null, 50 trigger: null, 51 timestamp: data.timestamp, 52 cronTimestamp: data.timestamp, 53 type: data.type, 54 requestStatus: "success", 55 statusCode: data.status, 56 headers: data.headers, 57 region: data.region, 58 latency: data.latency, 59 timing: { 60 dns: data.timing.dnsDone - data.timing.dnsStart, 61 connect: data.timing.connectDone - data.timing.connectStart, 62 tls: data.timing.tlsHandshakeDone - data.timing.tlsHandshakeStart, 63 ttfb: data.timing.firstByteDone - data.timing.firstByteStart, 64 transfer: data.timing.transferDone - data.timing.transferStart, 65 }, 66 url: monitor.url, 67 workspaceId: String(monitor.workspaceId), 68 error: false, 69 monitorId: String(monitor.id), 70 assertions: monitor.assertions ?? null, 71 message: null, 72 body: data.body ?? null, 73 } as const; 74 case "tcp": 75 return { 76 id: null, 77 trigger: null, 78 timestamp: data.timestamp, 79 cronTimestamp: data.timestamp, 80 region: data.region, 81 type: data.type, 82 requestStatus: "success", 83 error: false, 84 latency: data.latency ?? 0, 85 uri: monitor.url, 86 monitorId: String(monitor.id), 87 errorMessage: null, 88 assertions: null, 89 } as const; 90 // FIXM: add DNS props 91 case "dns": 92 return { 93 id: null, 94 trigger: null, 95 timestamp: data.timestamp, 96 cronTimestamp: data.timestamp, 97 region: data.region, 98 type: data.type, 99 requestStatus: "success", 100 monitorId: String(monitor.id), 101 error: false, 102 uri: monitor.url, 103 latency: data.latency ?? 0, 104 records: data.records, 105 errorMessage: null, 106 assertions: null, 107 } as const; 108 default: 109 return null; 110 } 111}