useQueryInsightsMetrics.ts24 lines · main
1import { useMemo } from 'react'
2
3import type { QueryPerformanceRow } from '../../QueryPerformance/QueryPerformance.types'
4
5export const useQueryInsightsMetrics = (data: QueryPerformanceRow[]) => {
6 const avgP95 = useMemo(() => {
7 const rows = data.filter((r) => (r.p95_time ?? 0) > 0)
8 if (rows.length === 0) return 0
9 return Math.round(rows.reduce((sum, r) => sum + (r.p95_time ?? 0), 0) / rows.length)
10 }, [data])
11
12 const totalCalls = useMemo(() => data.reduce((sum, r) => sum + r.calls, 0), [data])
13
14 const totalRowsRead = useMemo(() => data.reduce((sum, r) => sum + r.rows_read, 0), [data])
15
16 const cacheHitRate = useMemo(() => {
17 const hits = data.reduce((sum, r) => sum + (r._total_cache_hits ?? 0), 0)
18 const misses = data.reduce((sum, r) => sum + (r._total_cache_misses ?? 0), 0)
19 const total = hits + misses
20 return total > 0 ? ((hits / total) * 100).toFixed(2) + '%' : '–'
21 }, [data])
22
23 return { avgP95, totalCalls, totalRowsRead, cacheHitRate }
24}