import { Text } from '@mantine/core' import { MonitorState, MonitorTarget } from '@/uptime.types' import { IconAlertCircle, IconCircleCheck } from '@tabler/icons-react' import DetailChart from './DetailChart' import DetailBar from './DetailBar' function getColor(percent: number | string, darker: boolean): string { percent = Number(percent) if (percent >= 99.9) { return darker ? '#059669' : '#3bd671' } else if (percent >= 99) { return darker ? '#3bd671' : '#9deab8' } else if (percent >= 95) { return '#f29030' } else { return '#df484a' } } export default function MonitorDetail({ monitor, state, }: { monitor: MonitorTarget state: MonitorState }) { if (!state.latency[monitor.id]) return ( <> {monitor.name} No data available, please make sure you have deployed your workers with latest config and check your worker status! ) const statusIcon = state.incident[monitor.id].slice(-1)[0].end === undefined ? ( ) : ( ) let totalTime = Date.now() / 1000 - state.incident[monitor.id][0].start[0] let downTime = 0 for (let incident of state.incident[monitor.id]) { downTime += (incident.end ?? Date.now() / 1000) - incident.start[0] } console.log(totalTime) console.log(downTime) const uptimePercent = ( ((totalTime - downTime) / totalTime) * 100 ).toPrecision(4) return ( <>
{statusIcon} {monitor.name} Overall: {uptimePercent}%
) }