diff --git a/src/pages/admin/AdminClientPerformancePage.tsx b/src/pages/admin/AdminClientPerformancePage.tsx
index b2bbf25d9..06a5acf23 100644
--- a/src/pages/admin/AdminClientPerformancePage.tsx
+++ b/src/pages/admin/AdminClientPerformancePage.tsx
@@ -3,28 +3,29 @@ import { PageSEO } from '@/components/seo/PageSEO';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
-import {
- Activity,
- Clock,
- Trash2,
- RefreshCw,
- Zap,
- BarChart3,
- Layout,
+import {
+ Activity,
+ Clock,
+ Trash2,
+ RefreshCw,
+ Zap,
+ BarChart3,
+ Layout,
Palette,
- Timer
+ Timer,
+ type LucideIcon,
} from 'lucide-react';
-import {
- LineChart,
- Line,
- XAxis,
- YAxis,
- CartesianGrid,
- Tooltip as RechartsTooltip,
+import {
+ LineChart,
+ Line,
+ XAxis,
+ YAxis,
+ CartesianGrid,
+ Tooltip as RechartsTooltip,
ResponsiveContainer,
BarChart,
Bar,
- Cell
+ Cell,
} from 'recharts';
import { performanceTracker, type PerformanceMetric } from '@/utils/performance';
import { format } from 'date-fns';
@@ -36,122 +37,124 @@ export default function AdminClientPerformancePage() {
useEffect(() => {
setMetrics(performanceTracker.getHistory());
-
+
// Auto-refresh stats every 5s if there's activity
const interval = setInterval(() => {
setMetrics(performanceTracker.getHistory());
}, 5000);
-
+
return () => clearInterval(interval);
}, [tick]);
const handleClear = () => {
performanceTracker.clear();
setMetrics([]);
- setTick(t => t + 1);
+ setTick((t) => t + 1);
};
- const routeMetrics = metrics.filter(m => m.name.startsWith('Route:'));
- const themeMetrics = metrics.filter(m => m.name.startsWith('Theme:'));
-
- const avgRouteTime = routeMetrics.length
- ? routeMetrics.reduce((acc, m) => acc + m.duration, 0) / routeMetrics.length
+ const routeMetrics = metrics.filter((m) => m.name.startsWith('Route:'));
+ const themeMetrics = metrics.filter((m) => m.name.startsWith('Theme:'));
+
+ const avgRouteTime = routeMetrics.length
+ ? routeMetrics.reduce((acc, m) => acc + m.duration, 0) / routeMetrics.length
: 0;
-
- const avgThemeTime = themeMetrics.length
- ? themeMetrics.reduce((acc, m) => acc + m.duration, 0) / themeMetrics.length
+
+ const avgThemeTime = themeMetrics.length
+ ? themeMetrics.reduce((acc, m) => acc + m.duration, 0) / themeMetrics.length
: 0;
- const chartData = metrics.map(m => ({
+ const chartData = metrics.map((m) => ({
...m,
time: format(m.timestamp, 'HH:mm:ss'),
- shortName: m.name.replace('Route: ', '').replace('Theme: ', '')
+ shortName: m.name.replace('Route: ', '').replace('Theme: ', ''),
}));
- const COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#ec4899'];
-
return (
<>
-
Métricas de experiência do usuário (UX) em tempo real
++ Métricas de experiência do usuário (UX) em tempo real +
{label}
-{value}
-{sub}
++ {label} +
+{value}
+{sub}
{message}