"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Progress } from "@/components/ui/progress"; import { documentNumberingService } from "@/lib/services/document-numbering.service"; import { NumberingMetrics } from "@/types/dto/numbering.dto"; export function MetricsDashboard() { const [metrics, setMetrics] = useState>({}); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchMetrics() { try { const data = await documentNumberingService.getMetrics(); setMetrics(data); } catch (error) { console.error("Failed to fetch metrics", error); } finally { setLoading(false); } } fetchMetrics(); const interval = setInterval(fetchMetrics, 30000); // Poll every 30s return () => clearInterval(interval); }, []); if (loading) return
Loading metrics...
; if (!metrics) return
No metrics available.
; // Mock data mapping if real data is missing from backend stub const utilization = metrics.audit ? 45 : 0; // Placeholder until backend returns specific metric const generationRate = 120; // Placeholder const lockWaitP95 = 0.05; // Placeholder return (
Generation Rate
{generationRate} /Hr

+20.1% from last hour

Sequence Utilization
{utilization}%

Average capacity used

Lock Wait Time (P95)
{lockWaitP95}s

Redis distributed lock latency

Recent Errors
{metrics.errors?.length || 0}

In the last 24 hours

); }