From cfd7b53a54e6f764779652561dcb564acb0e7be3 Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 17 Feb 2026 16:21:37 +0700 Subject: [PATCH] feat(NetworkMapDashboard, NetworkMapUnifi): enhance network visualization with tunnel interface connections and draggable node layout functionality --- frontend/src/NetworkMapDashboard.jsx | 31 +++++- frontend/src/NetworkMapUnifi.jsx | 149 ++++++++++++++++++++++++--- 2 files changed, 158 insertions(+), 22 deletions(-) diff --git a/frontend/src/NetworkMapDashboard.jsx b/frontend/src/NetworkMapDashboard.jsx index 62e6713..c99ee7a 100644 --- a/frontend/src/NetworkMapDashboard.jsx +++ b/frontend/src/NetworkMapDashboard.jsx @@ -34,16 +34,37 @@ export default function NetworkMapDashboard() { const [error, setError] = useState(null); const pingAbortRef = useRef(false); + /** Связи строятся из интерфейсов раздела «Сетевые настройки» (/network-config), tunnelInterfaces */ const fetchData = useCallback(async () => { setLoading(true); setError(null); try { - const [serversRes, connRes] = await Promise.all([ + const [serversRes, configRes] = await Promise.all([ api.get('/servers'), - api.get('/server-connections'), + api.get('/network-config').catch(() => ({ data: null })), ]); const serversList = Array.isArray(serversRes?.data) ? serversRes.data : []; - const connList = Array.isArray(connRes?.data) ? connRes.data : []; + const config = configRes?.data || {}; + const tunnelInterfaces = Array.isArray(config.tunnelInterfaces) ? config.tunnelInterfaces : []; + + const getServer = (serverId) => + serversList.find((s) => s.id === serverId || s.ip === serverId || s.dns === serverId); + + const connList = []; + tunnelInterfaces.forEach((iface) => { + if (!iface.serverId || !iface.serverId2) return; + const s1 = getServer(iface.serverId); + const s2 = getServer(iface.serverId2); + if (!s1 || !s2 || s1.ip === s2.ip) return; + connList.push({ + from: s1.ip, + to: s2.ip, + tunnelType: iface.type || 'GRE', + ipA: iface.localIp, + ipB: iface.remoteIp, + }); + }); + setServers(serversList); setConnections(connList); } catch (e) { @@ -156,7 +177,7 @@ export default function NetworkMapDashboard() { } - meta="Серверы и пинг между ними (на рёбрах — задержка в мс)" + meta="Связи из раздела «Сетевые настройки» → Интерфейсы; на рёбрах — пинг (мс)" actions={ + ); }