import { useAuth } from "@/hooks/useAuth"; import { useLocation } from "wouter"; import { useEffect, useState } from "react"; import { useQuery } from "@tanstack/react-query"; import Header from "@/components/layout/Header"; import Sidebar from "@/components/layout/Sidebar"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Progress } from "@/components/ui/progress"; import { PageHeader } from "@/components/ui/page-header"; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, LineChart, Line, AreaChart, Area } from "recharts"; import { Activity, Server, Database, Zap, Clock, BarChart3, AlertTriangle, CheckCircle, Users, Mic, Brain, TrendingUp, Monitor, Cpu, HardDrive } from "lucide-react"; export default function SystemMonitoringPage() { const { user, isLoading } = useAuth(); const [, setLocation] = useLocation(); const [timeframe, setTimeframe] = useState<'day' | 'week' | 'month'>('day'); const [refreshInterval, setRefreshInterval] = useState(30000); // 30 seconds useEffect(() => { if (!isLoading && !user) { setLocation("/login"); } }, [user, isLoading, setLocation]); useEffect(() => { if (user && (user.role !== "admin" && user.role !== "pro")) { setLocation("/dashboard"); } }, [user, setLocation]); // Real-time system metrics const { data: systemMetrics, isLoading: metricsLoading } = useQuery({ queryKey: ["/api/admin/metrics"], refetchInterval: refreshInterval, enabled: user?.role === "admin" }); // Performance data const { data: performanceData, isLoading: performanceLoading } = useQuery({ queryKey: ["/api/admin/performance"], refetchInterval: refreshInterval, enabled: user?.role === "admin" || user?.role === "pro" }); // Usage analytics const { data: analyticsData, isLoading: analyticsLoading } = useQuery({ queryKey: ["/api/admin/analytics", timeframe], refetchInterval: 60000, // 1 minute for analytics enabled: user?.role === "admin" }); // Health check const { data: healthCheck, isLoading: healthLoading } = useQuery({ queryKey: ["/health"], refetchInterval: 15000, // 15 seconds enabled: true }); if (isLoading) { return (

Loading monitoring dashboard...

); } if (!user || (user.role !== "admin" && user.role !== "pro")) { return null; } const getStatusColor = (status: string) => { switch (status) { case 'healthy': return 'text-green-600 bg-green-100 dark:bg-green-900/20 dark:text-green-400'; case 'degraded': return 'text-yellow-600 bg-yellow-100 dark:bg-yellow-900/20 dark:text-yellow-400'; case 'unhealthy': return 'text-red-600 bg-red-100 dark:bg-red-900/20 dark:text-red-400'; default: return 'text-gray-600 bg-gray-100 dark:bg-gray-900/20 dark:text-gray-400'; } }; const formatUptime = (seconds: number) => { const days = Math.floor(seconds / 86400); const hours = Math.floor((seconds % 86400) / 3600); const minutes = Math.floor((seconds % 3600) / 60); return `${days}d ${hours}h ${minutes}m`; }; const formatBytes = (bytes: number) => { const sizes = ['Bytes', 'KB', 'MB', 'GB']; if (bytes === 0) return '0 Bytes'; const i = Math.floor(Math.log(bytes) / Math.log(1024)); return Math.round(bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i]; }; return (
{/* Header */}

System Monitoring

Real-time system health and performance metrics

Auto-refresh
{/* System Health Overview */}

System Status

{healthCheck?.status === 'healthy' ? ( ) : ( )} {healthCheck?.status || 'Unknown'}

Uptime

{healthCheck?.metrics?.uptime ? formatUptime(healthCheck.metrics.uptime) : 'N/A'}

Response Time

{performanceData?.responseTime ? `${Math.round(performanceData.responseTime)}ms` : 'N/A'}

Memory Usage

{healthCheck?.metrics?.memory ? formatBytes(healthCheck.metrics.memory.heapUsed) : 'N/A'}

{/* Services Status */} Service Health
{healthCheck?.services && Object.entries(healthCheck.services).map(([service, status]) => (

{service}

{status as string}
))}
Performance Analytics System Resources
{/* Performance Metrics */} Performance Overview
Response Time {performanceData?.responseTime ? `${Math.round(performanceData.responseTime)}ms` : 'N/A'}
Error Rate {performanceData?.errorRate ? `${performanceData.errorRate.toFixed(2)}%` : 'N/A'}
Throughput {performanceData?.throughput ? `${Math.round(performanceData.throughput)} req/s` : 'N/A'}
{/* Memory Usage Chart */} Memory Usage {healthCheck?.metrics?.memory && (

Heap Used

{formatBytes(healthCheck.metrics.memory.heapUsed)}

Heap Total

{formatBytes(healthCheck.metrics.memory.heapTotal)}

External

{formatBytes(healthCheck.metrics.memory.external)}

RSS

{formatBytes(healthCheck.metrics.memory.rss)}

)}
{user.role === "admin" && ( <>

Usage Analytics

Total Users

{analyticsData?.totalUsers || 0}

Voice Commands

{analyticsData?.voiceCommands || 0}

AI Interactions

{analyticsData?.aiInteractions || 0}

Tasks Created

{analyticsData?.totalTasks || 0}

{analyticsData?.chartData && ( Usage Trends
)} )}
Cache Statistics {systemMetrics?.cacheStats && (
Cache Type {systemMetrics.cacheStats.type}
Redis Connected {systemMetrics.cacheStats.redisConnected ? 'Yes' : 'No'}
Memory Cache Size {systemMetrics.cacheStats.memoryCacheSize} items
)}
System Metrics
User Count {systemMetrics?.userCount || 0}
Active Users {systemMetrics?.activeUsers || 0}
Total Tasks {systemMetrics?.tasksCount || 0}
Financial Records {systemMetrics?.financialRecordsCount || 0}
); }