import React, { useState, useEffect } from 'react'; const ServerMonitoring = () => { const [servers, setServers] = useState([]); const [monitoringData, setMonitoringData] = useState({}); const [autoRefresh, setAutoRefresh] = useState(true); useEffect(() => { loadServers(); }, []); useEffect(() => { if (autoRefresh) { const interval = setInterval(() => { servers.forEach(server => { checkServerStatus(server); }); }, 30000); return () => clearInterval(interval); } }, [autoRefresh, servers]); const loadServers = async () => { if (window.electronAPI) { const result = await window.electronAPI.loadServers(); if (result.success) { setServers(result.servers); result.servers.forEach(server => checkServerStatus(server)); } } }; const checkServerStatus = async (server) => { if (!window.electronAPI) return; // Ping проверка const pingResult = await window.electronAPI.pingServer(server); // SNMP мониторинг (если доступен) let snmpData = null; try { const snmpResult = await window.electronAPI.getSnmpData(server, 'public'); if (snmpResult.success) snmpData = snmpResult.data; } catch (error) {} // SSH мониторинг (если есть учетные данные) let sshStats = null; if (server.username && server.password) { try { const sshResult = await window.electronAPI.getSshStats(server); if (sshResult.success) sshStats = sshResult.stats; } catch (error) {} } setMonitoringData(prev => ({ ...prev, [server.id]: { ping: pingResult, snmp: snmpData, ssh: sshStats, lastUpdate: new Date() } })); }; const getStatusColor = (online) => { return online ? 'bg-green-500' : 'bg-red-500'; }; const getUsageColor = (percent) => { if (percent < 70) return 'bg-green-500'; if (percent < 90) return 'bg-yellow-500'; return 'bg-red-500'; }; return (

Мониторинг серверов

Реальное время состояние серверов

{servers.map(server => { const data = monitoringData[server.id]; const isOnline = data?.ping?.online; return (

{server.name}

{server.ip}

{isOnline ? 'Онлайн' : 'Офлайн'}
{data && (
{/* Ping информация */}
Ping:
{data.ping?.responseTime ? `${data.ping.responseTime}ms` : 'N/A'}
Потери:
{data.ping?.packetLoss ? `${data.ping.packetLoss}%` : 'N/A'}
{/* CPU Usage */} {(data.snmp?.cpuLoad || data.ssh?.cpuLoad) && (
Загрузка CPU {Math.round(data.ssh?.cpuLoad || data.snmp?.cpuLoad)}%
)} {/* Memory Usage */} {(data.ssh?.memoryUsed && data.ssh?.memoryTotal) && (
Память {Math.round((data.ssh.memoryUsed / data.ssh.memoryTotal) * 100)}%
{data.ssh.memoryUsed}MB / {data.ssh.memoryTotal}MB
)} {/* Last update */}
Обновлено: {data.lastUpdate?.toLocaleTimeString()}
)} {!data && (
Загрузка данных...
)}
); })}
{servers.length === 0 && (
📊

Нет серверов для мониторинга

Добавьте серверы в разделе "Серверы"

)}
); }; export default ServerMonitoring;