import { useState, useEffect } from "react"; import { Link } from "react-router"; import { Server, CheckCircle, XCircle, Clock, TrendingUp, AlertTriangle, Activity, } from "lucide-react"; interface ServerStatus { id: string; name: string; url: string; status: "online" | "offline" | "warning"; responseTime: number; uptime: number; lastCheck: string; checkType: string; } export function Dashboard() { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [servers,setServers] = useState([ { id: "1", name: "Production APIs", url: "https://api.example.com", status: "online", responseTime: 142, uptime: 99.9, lastCheck: "2 min ago", checkType: "HTTPS", }, { id: "2", name: "Database Server", url: "db.example.com:5432", status: "online", responseTime: 45, uptime: 100, lastCheck: "1 min ago", checkType: "TCP", }, { id: "3", name: "CDN Edge Node", url: "https://cdn.example.com", status: "warning", responseTime: 890, uptime: 98.5, lastCheck: "30 sec ago", checkType: "HTTPS", }, { id: "4", name: "Mail Server", url: "mail.example.com", status: "offline", responseTime: 0, uptime: 95.2, lastCheck: "5 min ago", checkType: "SMTP", }, { id: "5", name: "Analytics Service", url: "https://analytics.example.com", status: "online", responseTime: 210, uptime: 99.7, lastCheck: "3 min ago", checkType: "HTTPS", }, { id: "6", name: "Backup Server", url: "backup.example.com:22", status: "online", responseTime: 78, uptime: 99.95, lastCheck: "1 min ago", checkType: "SSH", }, ]); useEffect(() => { const fetchData = async () => { try { setLoading(true); const response = await fetch('https://bitrix.tavres.ru/rest/1/2jkuss1wwr0vnkkt/iblock.servers'); if (!response.ok) { throw new Error('Network response was not ok'); } const result = await response.json(); setServers([...servers, ...result['result']]); setError(null); } catch (err) { setError(err.message); } finally { setLoading(false); } }; fetchData(); const intervalId = setInterval(fetchData, 5000); return () => clearInterval(intervalId); },[]) const onlineCount = servers.filter((s) => s.status === "online").length; const offlineCount = servers.filter((s) => s.status === "offline").length; const warningCount = servers.filter((s) => s.status === "warning").length; const avgResponseTime = Math.round( servers.reduce((acc, s) => acc + s.responseTime, 0) / servers.length ); const getStatusColor = (status: string) => { switch (status) { case "online": return "bg-emerald-100 text-emerald-700 border-emerald-200"; case "offline": return "bg-rose-100 text-rose-700 border-rose-200"; case "warning": return "bg-amber-100 text-amber-700 border-amber-200"; default: return "bg-gray-100 text-gray-700 border-gray-200"; } }; const getStatusIcon = (status: string) => { switch (status) { case "online": return ; case "offline": return ; case "warning": return ; default: return ; } }; return (
{/* Header */}

System Overview

Real-time monitoring of all servers and services

{/* Stats Cards */}
{onlineCount}

Online

Servers running

{offlineCount}

Offline

Servers down

{warningCount}

Warning

Need attention

{avgResponseTime}ms

Avg Response

Time

{/* Server List */}

Server Status

View All
{servers.map((server) => (
{getStatusIcon(server.status)}

{server.name}

{server.url}

{server.responseTime > 0 ? `${server.responseTime}ms` : "N/A"}

Response Time

{server.uptime}%

Uptime

{server.checkType}

{server.lastCheck}

))}
); }