import { useState, useEffect } from "react"; export default function App() { // Mock server data const initialServers = [ { id: 1, name: "Сервер 1 (API)", url: "api.example.com" }, { id: 2, name: "Сервер 2 (База данных)", url: "db.example.com" }, { id: 3, name: "Сервер 3 (Фронтенд)", url: "web.example.com" }, { id: 4, name: "Сервер 4 (Аутентификация)", url: "auth.example.com" }, { id: 5, name: "Сервер 5 (Хранилище)", url: "storage.example.com" }, ]; // State for server statuses const [serverStatuses, setServerStatuses] = useState( initialServers.map((server) => ({ id: server.id, delay: 0, statusCode: 0, statusText: "", lastChecked: new Date(), })) ); // Simulate server monitoring updates useEffect(() => { const interval = setInterval(() => { setServerStatuses((prev) => prev.map((status) => { // Simulate random response times (20-300ms) const delay = Math.floor(Math.random() * 280) + 20; // Simulate status codes (mostly 200, occasionally errors) let statusCode; if (Math.random() > 0.15) { statusCode = 200; } else { statusCode = [404, 500, 503][Math.floor(Math.random() * 3)]; } // Determine status text let statusText = ""; switch (statusCode) { case 200: statusText = "OK"; break; case 404: statusText = "Не найден"; break; case 500: statusText = "Внутренняя ошибка"; break; case 503: statusText = "Недоступен"; break; default: statusText = "Неизвестно"; } return { ...status, delay, statusCode, statusText, lastChecked: new Date(), }; }) ); }, 2000); return () => clearInterval(interval); }, []); // Get status color based on HTTP code const getStatusColor = (code) => { if (code === 200) return "bg-green-100 text-green-800"; if (code >= 400 && code < 500) return "bg-orange-100 text-orange-800"; if (code >= 500) return "bg-red-100 text-red-800"; return "bg-gray-100 text-gray-800"; }; // Format date to HH:mm:ss const formatTime = (date) => { return date.toLocaleTimeString("ru-RU", { hour: "2-digit", minute: "2-digit", second: "2-digit", }); }; return (
В реальном времени отслеживайте состояние серверов, время отклика и HTTP-статусы
{server.url}
Данные обновляются в реальном времени • Имитация мониторинга для демонстрации