Files
supabase/apps/studio/components/interfaces/HomeNew/ProjectUsage.metrics.ts
Jordi Enric a37ae0a3dc swap error rate for success rate and add tests (#39774)
* swap error rate for success rate and add tests

* rm comment

* format delta
2025-10-22 17:15:15 +02:00

45 lines
1.5 KiB
TypeScript

export type LogsBarChartDatum = {
timestamp: string
error_count: number
ok_count: number
warning_count: number
}
export const toLogsBarChartData = (
rows: Array<Record<string, unknown>> = []
): LogsBarChartDatum[] => {
return rows.map((r) => ({
timestamp: r.timestamp?.toString() ?? '',
ok_count: Number(r.ok_count) || 0,
warning_count: Number(r.warning_count) || 0,
error_count: Number(r.error_count) || 0,
}))
}
export const sumTotal = (data: LogsBarChartDatum[]): number =>
data.reduce((acc, r) => acc + r.ok_count + r.warning_count + r.error_count, 0)
export const sumWarnings = (data: LogsBarChartDatum[]): number =>
data.reduce((acc, r) => acc + r.warning_count, 0)
export const sumErrors = (data: LogsBarChartDatum[]): number =>
data.reduce((acc, r) => acc + r.error_count, 0)
export const computeSuccessAndNonSuccessRates = (
totalRequests: number,
totalWarnings: number,
totalErrors: number
): { successRate: number; nonSuccessRate: number } => {
if (totalRequests <= 0) return { successRate: 0, nonSuccessRate: 0 }
const nonSuccessRate = ((totalWarnings + totalErrors) / totalRequests) * 100
const successRate = 100 - nonSuccessRate
return { successRate, nonSuccessRate }
}
export const computeChangePercent = (current: number, previous: number): number => {
if (previous === 0) return current > 0 ? 100 : 0
return ((current - previous) / previous) * 100
}
export const formatDelta = (v: number): string => `${v >= 0 ? '+' : ''}${v.toFixed(1)}%`