Files
supabase/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionMetricTooltipDetails.tsx
Saxon Fletcher e21088144d Edge function overview (#44009)
<img width="1575" height="1134" alt="image"
src="https://github.com/user-attachments/assets/994b1113-717f-44a2-89a4-13bc0182db20"
/>

Attempts to improve our edge function overview pages to provide stronger
insights into the health of a function, including reliability (error
rates), performance (execution times) and usage (cpu and memory).

As part of this work it refactors existing charts to use our new chart
components.

main consideration is the collective performance of error queries
https://github.com/supabase/supabase/pull/44009/changes#diff-2a79cf61c5397a8ef363c333229fa7729a2efc90a4d8e0806e49c212d5aa97e7

## To test:
1. Create an edge function that errors out randomly across requests. You
can use cron to poll this function every second.
2. View the edge function and on the overview page confirm that errors
are showing and grouped correctly in recent failed invocations sections.

---------

Co-authored-by: Ali Waseem <waseema393@gmail.com>
2026-04-01 14:59:12 +10:00

94 lines
2.3 KiB
TypeScript

import type { ChartLineProps } from 'ui-patterns/Chart'
import type { EdgeFunctionChartDatum } from './EdgeFunctionOverview.utils'
import { formatReferenceDelta, getMemoryTooltipDetail } from './EdgeFunctionOverview.utils'
export const ExecutionTooltipDetail = ({
averageExecutionTime,
metricKey,
value,
}: {
averageExecutionTime: number
metricKey: string
value: unknown
}) => {
if (metricKey !== 'max_execution_time') return null
return (
<span className="text-foreground">
{formatReferenceDelta(Number(value ?? 0), averageExecutionTime)}
</span>
)
}
export const CpuTooltipDetail = ({
averageCpuTime,
value,
}: {
averageCpuTime: number
value: unknown
}) => {
return (
<span className="text-foreground">
{formatReferenceDelta(Number(value ?? 0), averageCpuTime)}
</span>
)
}
export const MemoryTooltipDetail = ({
averageMemoryUsage,
datum,
value,
}: {
averageMemoryUsage: number
datum: EdgeFunctionChartDatum
value: unknown
}) => {
return (
<>
<span className="text-foreground">
{formatReferenceDelta(Number(value ?? 0), averageMemoryUsage)}
</span>
<span className="text-foreground-light">
{getMemoryTooltipDetail(datum.avg_heap_memory_used, datum.avg_external_memory_used)}
</span>
</>
)
}
export const getExecutionTooltipDetails = (
averageExecutionTime: number
): NonNullable<ChartLineProps['tooltipDetails']> => {
return function renderExecutionTooltipDetails(_, key, value) {
return (
<ExecutionTooltipDetail
averageExecutionTime={averageExecutionTime}
metricKey={key}
value={value}
/>
)
}
}
export const getCpuTooltipDetails = (
averageCpuTime: number
): NonNullable<ChartLineProps['tooltipDetails']> => {
return function renderCpuTooltipDetails(_, __, value) {
return <CpuTooltipDetail averageCpuTime={averageCpuTime} value={value} />
}
}
export const getMemoryTooltipDetails = (
averageMemoryUsage: number
): NonNullable<ChartLineProps['tooltipDetails']> => {
return function renderMemoryTooltipDetails(datum, _, value) {
return (
<MemoryTooltipDetail
averageMemoryUsage={averageMemoryUsage}
datum={datum as EdgeFunctionChartDatum}
value={value}
/>
)
}
}