feat(FilterManager): integrate network configuration gateways for enhanced filtering; implement async loading of gateways from /network-config endpoint
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m37s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m37s
This commit is contained in:
@@ -753,6 +753,8 @@ function FilterManager() {
|
||||
const [baseAS, setBaseAS] = useState('65001');
|
||||
// Inventory servers (from /servers endpoint)
|
||||
const [inventoryServers, setInventoryServers] = useState([]);
|
||||
// Network config gateways (from /network-config endpoint)
|
||||
const [networkConfigGateways, setNetworkConfigGateways] = useState([]);
|
||||
|
||||
// Собираем gateways только для выбранного сервера
|
||||
const selectedServerGateways = (() => {
|
||||
@@ -765,12 +767,41 @@ function FilterManager() {
|
||||
String(srv.ip || '').trim() === selectedServer.name
|
||||
);
|
||||
|
||||
const gws = [];
|
||||
const serverDns = matchedServer?.dns || matchedServer?.hostName || selectedServer.name || '';
|
||||
const serverId = matchedServer?.id || matchedServer?.ip || selectedServer.id || selectedServer.name || '';
|
||||
const country = matchedServer?.country || '';
|
||||
const provider = matchedServer?.provider || '';
|
||||
|
||||
// Добавляем только реальные gateways из inventoryServers
|
||||
if (matchedServer && Array.isArray(matchedServer.gateways)) {
|
||||
const gws = [];
|
||||
|
||||
// ПРИОРИТЕТ 1: Gateways из NetworkConfigManager (новая страница)
|
||||
// Ищем gateways по serverId (может быть id, ip или dns)
|
||||
const networkGateways = networkConfigGateways.filter(gw => {
|
||||
if (!gw.serverId) return false;
|
||||
// Сравниваем по разным вариантам идентификатора
|
||||
return (
|
||||
gw.serverId === serverId ||
|
||||
gw.serverId === matchedServer?.ip ||
|
||||
gw.serverId === matchedServer?.dns ||
|
||||
gw.serverId === selectedServer.name ||
|
||||
gw.serverId === serverDns
|
||||
);
|
||||
});
|
||||
|
||||
networkGateways.forEach(gw => {
|
||||
gws.push({
|
||||
name: gw.name,
|
||||
ip: gw.ip || '',
|
||||
comment: gw.description || '',
|
||||
serverDns: serverDns,
|
||||
country: country,
|
||||
provider: provider,
|
||||
primary: false // В network-config нет поля primary, но можно добавить если нужно
|
||||
});
|
||||
});
|
||||
|
||||
// ПРИОРИТЕТ 2: Fallback на старые gateways из inventoryServers (если нет в network-config)
|
||||
if (gws.length === 0 && matchedServer && Array.isArray(matchedServer.gateways)) {
|
||||
matchedServer.gateways.forEach(gw => {
|
||||
// Пропускаем шлюзы, у которых имя совпадает с названием сервера (это fallback)
|
||||
if (gw.name && gw.name !== serverDns && gw.name !== selectedServer.name) {
|
||||
@@ -780,14 +811,15 @@ function FilterManager() {
|
||||
comment: gw.comment || '',
|
||||
serverDns: serverDns,
|
||||
country: country,
|
||||
provider: provider,
|
||||
primary: gw.primary
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Также проверяем gateways из selectedServer (server-configs)
|
||||
if (Array.isArray(selectedServer.gateways)) {
|
||||
// ПРИОРИТЕТ 3: Fallback на gateways из selectedServer (server-configs)
|
||||
if (gws.length === 0 && Array.isArray(selectedServer.gateways)) {
|
||||
selectedServer.gateways.forEach(gw => {
|
||||
// Пропускаем fallback шлюзы с названием сервера
|
||||
if (gw.name && gw.name !== serverDns && gw.name !== selectedServer.name && !gws.some(g => g.name === gw.name)) {
|
||||
@@ -797,6 +829,7 @@ function FilterManager() {
|
||||
comment: gw.comment || '',
|
||||
serverDns: serverDns,
|
||||
country: country,
|
||||
provider: provider,
|
||||
primary: gw.primary
|
||||
});
|
||||
}
|
||||
@@ -841,6 +874,18 @@ function FilterManager() {
|
||||
// мягко игнорируем, дополнительная информация необязательна
|
||||
}
|
||||
})();
|
||||
|
||||
// Загружаем gateways из NetworkConfigManager
|
||||
(async () => {
|
||||
try {
|
||||
const res = await api.get(`/network-config`);
|
||||
const networkConfig = res.data || {};
|
||||
setNetworkConfigGateways(Array.isArray(networkConfig.gateways) ? networkConfig.gateways : []);
|
||||
} catch (e) {
|
||||
// Если файла нет или ошибка - используем пустой массив (fallback на старую логику)
|
||||
setNetworkConfigGateways([]);
|
||||
}
|
||||
})();
|
||||
}, []);
|
||||
|
||||
const filterKey = (f) => {
|
||||
|
||||
Reference in New Issue
Block a user