feat(NetworkMapDashboard): improve ping functionality by utilizing internal tunnel IPs for enhanced connectivity checks
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m3s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m3s
This commit is contained in:
@@ -56,12 +56,18 @@ export default function NetworkMapDashboard() {
|
|||||||
const s1 = getServer(iface.serverId);
|
const s1 = getServer(iface.serverId);
|
||||||
const s2 = getServer(iface.serverId2);
|
const s2 = getServer(iface.serverId2);
|
||||||
if (!s1 || !s2 || s1.ip === s2.ip) return;
|
if (!s1 || !s2 || s1.ip === s2.ip) return;
|
||||||
|
const s1Key = s1.id || s1.dns || s1.ip;
|
||||||
|
const s2Key = s2.id || s2.dns || s2.ip;
|
||||||
|
if (!s1Key || !s2Key) return;
|
||||||
connList.push({
|
connList.push({
|
||||||
from: s1.ip,
|
from: s1.ip,
|
||||||
to: s2.ip,
|
to: s2.ip,
|
||||||
tunnelType: iface.type || 'GRE',
|
tunnelType: iface.type || 'GRE',
|
||||||
ipA: iface.localIp,
|
// Внутренние IP туннеля: с сервера 1 до сервера 2 и обратно
|
||||||
ipB: iface.remoteIp,
|
fromKey: s1Key,
|
||||||
|
toKey: s2Key,
|
||||||
|
internalFromTo: iface.remoteIp || null, // ping: server1 -> remoteIp
|
||||||
|
internalToFrom: iface.localIp || null, // ping: server2 -> localIp
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -91,17 +97,20 @@ export default function NetworkMapDashboard() {
|
|||||||
if (!from || !to || from === to) return;
|
if (!from || !to || from === to) return;
|
||||||
const srcFrom = servers.find((s) => s.ip === from);
|
const srcFrom = servers.find((s) => s.ip === from);
|
||||||
const srcTo = servers.find((s) => s.ip === to);
|
const srcTo = servers.find((s) => s.ip === to);
|
||||||
const canPingFrom = srcFrom && ['jumphost', 'home'].includes(String(srcFrom.type || '').toLowerCase());
|
const canPingFrom =
|
||||||
const canPingTo = srcTo && ['jumphost', 'home'].includes(String(srcTo.type || '').toLowerCase());
|
srcFrom && ['jumphost', 'home'].includes(String(srcFrom.type || '').toLowerCase()) && c.internalFromTo;
|
||||||
|
const canPingTo =
|
||||||
|
srcTo && ['jumphost', 'home'].includes(String(srcTo.type || '').toLowerCase()) && c.internalToFrom;
|
||||||
|
|
||||||
// Пингуем только с jumphost/home, иначе бекенд возвращает E_PING (сервер не найден)
|
// Пингуем по ВНУТРЕННИМ адресам туннеля из /network-config:
|
||||||
|
// server1 -> remoteIp, server2 -> localIp. serverId — ключ (id/dns/ip) как в servers.json.
|
||||||
if (canPingFrom) {
|
if (canPingFrom) {
|
||||||
tasks.push(async () => {
|
tasks.push(async () => {
|
||||||
if (pingAbortRef.current) return;
|
if (pingAbortRef.current) return;
|
||||||
try {
|
try {
|
||||||
const { data } = await api.post('/mikrotik/ping', {
|
const { data } = await api.post('/mikrotik/ping', {
|
||||||
serverId: from,
|
serverId: c.fromKey,
|
||||||
target: to,
|
target: c.internalFromTo,
|
||||||
count: 3,
|
count: 3,
|
||||||
});
|
});
|
||||||
const ms = typeof data?.avgMs === 'number' ? Math.round(data.avgMs) : null;
|
const ms = typeof data?.avgMs === 'number' ? Math.round(data.avgMs) : null;
|
||||||
@@ -117,8 +126,8 @@ export default function NetworkMapDashboard() {
|
|||||||
if (pingAbortRef.current) return;
|
if (pingAbortRef.current) return;
|
||||||
try {
|
try {
|
||||||
const { data } = await api.post('/mikrotik/ping', {
|
const { data } = await api.post('/mikrotik/ping', {
|
||||||
serverId: to,
|
serverId: c.toKey,
|
||||||
target: from,
|
target: c.internalToFrom,
|
||||||
count: 3,
|
count: 3,
|
||||||
});
|
});
|
||||||
const ms = typeof data?.avgMs === 'number' ? Math.round(data.avgMs) : null;
|
const ms = typeof data?.avgMs === 'number' ? Math.round(data.avgMs) : null;
|
||||||
|
|||||||
Reference in New Issue
Block a user