"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Progress } from "@/components/ui/progress" import { Activity, Database, Server, Cpu, HardDrive, Clock, RefreshCw, CheckCircle, XCircle, AlertTriangle } from "lucide-react" interface DatabaseStatus { name: string connected: boolean latency: number documents: number size: string } interface SystemHealth { mongodb: { connected: boolean totalUsers: number latency: number databases: string[] } api: { status: string uptime: number requests24h: number } } export default function SystemHealthPage() { const [isRefreshing, setIsRefreshing] = useState(false) const [lastUpdate, setLastUpdate] = useState(new Date()) const [health, setHealth] = useState(null) const [databases] = useState([ { name: "KR", connected: true, latency: 15, documents: 14360000, size: "16.3 GB" }, { name: "KR_腾讯", connected: true, latency: 18, documents: 705000000, size: "117.1 GB" }, { name: "KR_京东", connected: true, latency: 22, documents: 142000000, size: "31.0 GB" }, { name: "KR_微博", connected: true, latency: 20, documents: 217000000, size: "12.8 GB" }, { name: "KR_酒店", connected: true, latency: 25, documents: 96670000, size: "114.5 GB" }, { name: "KR_顺丰", connected: true, latency: 19, documents: 39200000, size: "12.8 GB" }, { name: "KR_存客宝", connected: true, latency: 12, documents: 216426, size: "0.5 GB" }, { name: "KR_户口", connected: true, latency: 16, documents: 9550000, size: "2.1 GB" }, ]) useEffect(() => { fetchHealth() }, []) const fetchHealth = async () => { try { const res = await fetch("/api/ai-chat") const data = await res.json() setHealth({ mongodb: { connected: data.database?.connected || false, totalUsers: data.database?.totalUsers || 0, latency: data.database?.latency || 0, databases: ["KR", "KR_腾讯", "KR_京东", "KR_微博", "KR_存客宝"], }, api: { status: data.status || "unknown", uptime: 99.9, requests24h: 125680, }, }) } catch (error) { console.error("Failed to fetch health:", error) } } const refresh = async () => { setIsRefreshing(true) await fetchHealth() setLastUpdate(new Date()) setIsRefreshing(false) } const formatNumber = (num: number): string => { if (num >= 1000000000) return `${(num / 1000000000).toFixed(2)}B` if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M` if (num >= 1000) return `${(num / 1000).toFixed(1)}K` return num.toString() } return (
{/* Header */}

系统健康

MongoDB数据库与API服务状态监控

更新于 {lastUpdate.toLocaleTimeString()}
{/* Overall Status */}
MongoDB {health?.mongodb.connected ? ( ) : ( )}
{health?.mongodb.latency || '--'}ms 延迟
API服务 {health?.api.status === 'online' ? ( ) : ( )}
{health?.api.uptime || '--'}% 可用
{formatNumber(health?.mongodb.totalUsers || 0)}
总文档数
{formatNumber(health?.api.requests24h || 0)}
24h请求
{/* Database Details */} 数据库详情
{databases.map((db, i) => (
{db.name}
{db.size}
{formatNumber(db.documents)}
文档
{db.latency}ms
延迟
{db.connected ? '正常' : '异常'}
))}
) }