feat(network-config-manager): add function to identify unknown OSPF interface names and display active status in templates
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m54s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m54s
This commit is contained in:
@@ -127,6 +127,14 @@ const GATEWAY_TEMPLATES = [
|
|||||||
|
|
||||||
const OSPF_COST_STEP = 10;
|
const OSPF_COST_STEP = 10;
|
||||||
|
|
||||||
|
function isUnknownOspfInterfaceName(name) {
|
||||||
|
const value = String(name || '').trim();
|
||||||
|
if (!value) return true;
|
||||||
|
if (value.startsWith('*')) return true; // служебные ссылки RouterOS вида *50
|
||||||
|
if (value.toLowerCase() === 'unknown') return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) {
|
function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) {
|
||||||
const serverById = new Map((servers || []).map((s) => [String(s.id || s.ip || s.dns || ''), s]));
|
const serverById = new Map((servers || []).map((s) => [String(s.id || s.ip || s.dns || ''), s]));
|
||||||
const byComposite = new Map();
|
const byComposite = new Map();
|
||||||
@@ -144,10 +152,10 @@ function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) {
|
|||||||
|
|
||||||
templates.forEach((tpl) => {
|
templates.forEach((tpl) => {
|
||||||
const interfaceName = String(tpl?.interfaceName || '').trim();
|
const interfaceName = String(tpl?.interfaceName || '').trim();
|
||||||
|
if (isUnknownOspfInterfaceName(interfaceName)) return;
|
||||||
const area = String(tpl?.area || '').trim() || 'backbone';
|
const area = String(tpl?.area || '').trim() || 'backbone';
|
||||||
const numericCost = Number(tpl?.cost);
|
const numericCost = Number(tpl?.cost);
|
||||||
const cost = Number.isFinite(numericCost) && numericCost >= 0 ? numericCost : OSPF_COST_STEP;
|
const cost = Number.isFinite(numericCost) && numericCost >= 0 ? numericCost : OSPF_COST_STEP;
|
||||||
if (!interfaceName) return;
|
|
||||||
|
|
||||||
const compositeKey = `${identity.key}::${area.toLowerCase()}::${interfaceName.toUpperCase()}`;
|
const compositeKey = `${identity.key}::${area.toLowerCase()}::${interfaceName.toUpperCase()}`;
|
||||||
if (byComposite.has(compositeKey)) return;
|
if (byComposite.has(compositeKey)) return;
|
||||||
@@ -161,6 +169,7 @@ function buildOspfTemplatesFromRouterResults(routerResults = [], servers = []) {
|
|||||||
interfaceName,
|
interfaceName,
|
||||||
area,
|
area,
|
||||||
cost,
|
cost,
|
||||||
|
active: !Boolean(tpl?.disabled),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -4006,6 +4015,12 @@ function NetworkConfigManager() {
|
|||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2">
|
||||||
<span className="text-muted small">::</span>
|
<span className="text-muted small">::</span>
|
||||||
<code>{template.interfaceName}</code>
|
<code>{template.interfaceName}</code>
|
||||||
|
<span
|
||||||
|
className={`badge ${template.active ? 'bg-green-lt text-green' : 'bg-secondary-lt text-secondary'}`}
|
||||||
|
title={template.active ? 'Интерфейс активен в OSPF template' : 'Интерфейс отключен в OSPF template'}
|
||||||
|
>
|
||||||
|
{template.active ? 'Активен' : 'Неактивен'}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span className="badge bg-primary-lt text-primary">
|
<span className="badge bg-primary-lt text-primary">
|
||||||
cost {template.cost}
|
cost {template.cost}
|
||||||
|
|||||||
Reference in New Issue
Block a user