import { BenchmarkResult } from "@/types/benchmark"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { CheckCircle2, XCircle } from "lucide-react"; interface BenchmarkTableProps { results: BenchmarkResult[]; } export const BenchmarkTable = ({ results }: BenchmarkTableProps) => { // Sort by average response time (fastest first) const sortedResults = [...results].sort((a, b) => { if (a.status === "error" && b.status === "success") return 1; if (a.status === "success" && b.status === "error") return -1; return a.avgResponseTime - b.avgResponseTime; }); // Calculate overall average across all successful attempts const allSuccessfulAttempts = sortedResults.flatMap((r) => r.attempts.filter((a) => a.status === "success") ); const overallAvg = allSuccessfulAttempts.length > 0 ? allSuccessfulAttempts.reduce((sum, a) => sum + a.responseTime, 0) / allSuccessfulAttempts.length : 0; return (
{/* Overall Average */} {overallAvg > 0 && (
Overall Average Response Time {overallAvg.toFixed(0)}ms
)} {/* Results Table */}
URL Implementation #1 #2 #3 #4 #5 Average Status {sortedResults.map((result, index) => ( {result.mirrorUrl} {result.implementation} {result.attempts.map((attempt, attemptIndex) => ( {attempt.status === "success" ? ( {attempt.responseTime.toFixed(0)}ms ) : ( )} ))} {result.status === "success" ? ( {result.avgResponseTime.toFixed(0)}ms ) : } {result.status === "success" ? ( Success ) : ( Error )} ))}
{sortedResults.length === 0 && (
No results yet. Enter a DID and run the benchmark.
)}
); };