import { ChevronRight, HelpCircle } from 'lucide-react' import Link from 'next/link' import { Card, CardContent, Loading, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { LogsBarChart } from 'ui-patterns/LogsBarChart' import { ButtonTooltip } from '../../ui/ButtonTooltip' import type { LogsBarChartDatum } from '../ProjectHome/ProjectUsage.metrics' import type { ServiceKey } from './ObservabilityOverview.utils' type ServiceConfig = { key: ServiceKey name: string description: string reportUrl?: string logsUrl: string } type ServiceData = { total: number errorRate: number errorCount: number warningCount: number eventChartData: LogsBarChartDatum[] isLoading: boolean } export type ServiceHealthTableProps = { services: ServiceConfig[] serviceData: Record onBarClick: (logsUrl: string) => (datum: LogsBarChartDatum) => void datetimeFormat: string } const SERVICE_DESCRIPTIONS: Record = { db: 'PostgreSQL database health and performance', auth: 'Authentication and user management', functions: 'Serverless Edge Functions execution', storage: 'Object storage for files and assets', realtime: 'WebSocket connections and broadcasts', postgrest: 'Auto-generated REST API for your database', } type ServiceRowProps = { service: ServiceConfig data: ServiceData onBarClick: (datum: LogsBarChartDatum) => void datetimeFormat: string } const ServiceRow = ({ service, data, onBarClick, datetimeFormat }: ServiceRowProps) => { const errorRate = data.total > 0 ? data.errorRate : 0 const warningRate = data.total > 0 ? (data.warningCount / data.total) * 100 : 0 const reportUrl = service.reportUrl || service.logsUrl return (
{service.name}

{SERVICE_DESCRIPTIONS[service.key as ServiceKey] || service.description}

e.preventDefault()}> {data.isLoading ? (
) : ( No data
} /> )}
{data.total > 0 && (
{errorRate > 0 && (
{errorRate.toFixed(2)}% errors )} {warningRate > 0 && (
{warningRate.toFixed(2)}% warnings )} {errorRate === 0 && warningRate === 0 && (
0% errors )}
)} ) } export const ServiceHealthTable = ({ services, serviceData, onBarClick, datetimeFormat, }: ServiceHealthTableProps) => { return (

Service Health

{services.map((service) => { const data = serviceData[service.key] if (!data) return null return ( ) })}
) }