import { useParams } from 'common' import Link from 'next/link' import { Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { metricColor } from './InstanceNode.utils' import { useComputeMetrics } from '@/hooks/analytics/useComputeMetrics' /** * Compute metrics row at the bottom of a primary database node card, linking * to the database report. Metrics are project-scoped, which reports the * primary on both standard and High Availability projects. */ export const ComputeMetricsFooter = ({ isConnectionsAvailable = true, }: { isConnectionsAvailable?: boolean }) => { const { ref } = useParams() const { cpu, disk, memory, connections, isLoading: isMetricsLoading, isError: isMetricsError, } = useComputeMetrics({ projectRef: ref, }) const observabilityUrl = `/project/${ref}/observability/database` const hasConnectionMetrics = isConnectionsAvailable && connections !== null && connections.max > 0 return ( {/* Stable live region: announces loading/unavailability, never the polled values */} {isMetricsLoading && 'Loading metrics'} {!isMetricsLoading && isMetricsError && 'Metrics unavailable'} {!isMetricsLoading && !isMetricsError && ( <> {cpu === null && 'CPU unavailable. '} {disk === null && 'Disk unavailable. '} {memory === null && 'RAM unavailable. '} {!hasConnectionMetrics && 'Connection metrics unavailable.'} )} {/* h-4 matches the text-xs line height so the card doesn't shift when metrics load */} {isMetricsLoading && (