import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts'; import { AlertCircle, TrendingUp, Users, Zap, CheckCircle, XCircle } from 'lucide-react'; interface ErrorSummary { error_type: string | null; occurrence_count: number | null; affected_users: number | null; avg_duration_ms: number | null; } interface ApprovalMetric { id: string; success: boolean; duration_ms: number | null; created_at: string | null; } interface ErrorAnalyticsProps { errorSummary: ErrorSummary[] | undefined; approvalMetrics: ApprovalMetric[] | undefined; } export function ErrorAnalytics({ errorSummary, approvalMetrics }: ErrorAnalyticsProps) { // Calculate error metrics const totalErrors = errorSummary?.reduce((sum, item) => sum + (item.occurrence_count || 0), 0) || 0; const totalAffectedUsers = errorSummary?.reduce((sum, item) => sum + (item.affected_users || 0), 0) || 0; const avgErrorDuration = errorSummary?.length ? errorSummary.reduce((sum, item) => sum + (item.avg_duration_ms || 0), 0) / errorSummary.length : 0; const topErrors = errorSummary?.slice(0, 5) || []; // Calculate approval metrics const totalApprovals = approvalMetrics?.length || 0; const failedApprovals = approvalMetrics?.filter(m => !m.success).length || 0; const successRate = totalApprovals > 0 ? ((totalApprovals - failedApprovals) / totalApprovals) * 100 : 0; const avgApprovalDuration = approvalMetrics?.length ? approvalMetrics.reduce((sum, m) => sum + (m.duration_ms || 0), 0) / approvalMetrics.length : 0; // Show message if no data available if ((!errorSummary || errorSummary.length === 0) && (!approvalMetrics || approvalMetrics.length === 0)) { return (

No analytics data available

); } return (
{/* Error Metrics */} {errorSummary && errorSummary.length > 0 && ( <>

Error Metrics

Total Errors
{totalErrors}

Last 30 days

Error Types
{errorSummary.length}

Unique error types

Affected Users
{totalAffectedUsers}

Users impacted

Avg Duration
{Math.round(avgErrorDuration)}ms

Before error occurs

Top 5 Errors )} {/* Approval Metrics */} {approvalMetrics && approvalMetrics.length > 0 && (

Approval Metrics

Total Approvals
{totalApprovals}

Last 24 hours

Failures
{failedApprovals}

Failed approvals

Success Rate
{successRate.toFixed(1)}%

Overall success rate

Avg Duration
{Math.round(avgApprovalDuration)}ms

Approval time

)}
); }