From 31868a45f0c7bf29043a0d8d0bd77f444f8814ab Mon Sep 17 00:00:00 2001 From: Blackwhitebear8 Date: Tue, 5 Aug 2025 19:15:34 +0200 Subject: [PATCH] Update static/js/pages/bgp.js --- static/js/pages/bgp.js | 54 +++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/static/js/pages/bgp.js b/static/js/pages/bgp.js index 669387b..74c9c6e 100644 --- a/static/js/pages/bgp.js +++ b/static/js/pages/bgp.js @@ -54,8 +54,10 @@ async function loadBgpTables() { ipv4Sum.innerHTML = buildSummary("IPv4", data.ipv4_info); ipv6Sum.innerHTML = buildSummary("IPv6", data.ipv6_info); - renderPeers(ipv4Body, data.ipv4_peers); - renderPeers(ipv6Body, data.ipv6_peers); + const bfdPeersSet = new Set(data.bfd_peers); + + renderPeers(ipv4Body, data.ipv4_peers, bfdPeersSet); + renderPeers(ipv6Body, data.ipv6_peers, bfdPeersSet); activatePopovers(); } catch (e) { @@ -66,19 +68,19 @@ async function loadBgpTables() { function buildSummary(label, info) { const popContent = ` - BGP Router ID: ${info.router_id}
+ BGP Router ID: ${info.router_id}
Local AS: ${info.local_as}
- VRF ID: ${info.vrf_id}
- RIB Entries: ${info.rib_entries} (using ${info.rib_memory})
+ VRF ID: ${info.vrf_id}
+ RIB Entries: ${info.rib_entries} (using ${info.rib_memory})
Peers: ${info.peers} (using ${info.peers_memory})
- BGP Table Version: ${info.table_version} + BGP Table Version: ${info.table_version} `.trim(); return `

${label} Unicast Summary

ℹ️ @@ -86,14 +88,15 @@ function buildSummary(label, info) { `; } - -function renderPeers(tbody, peers) { +function renderPeers(tbody, peers, bfdPeersSet) { tbody.innerHTML = ""; if (!peers.length) { tbody.innerHTML = `No data available.`; return; } + const ip_version = tbody.id.includes('ipv4') ? 'ipv4' : 'ipv6'; + peers.forEach((p, i) => { const popTitle = `${p.as_number} details`; const popContent = ` @@ -103,6 +106,8 @@ function renderPeers(tbody, peers) { Outbound Queue: ${p.out_queue} `.trim(); + const hasBfd = bfdPeersSet.has(p.neighbor); + const tr = document.createElement("tr"); tr.dataset.index = i; tr.innerHTML = ` @@ -112,13 +117,22 @@ function renderPeers(tbody, peers) { ${p.state_pfx_rcd} ${p.prefix_sent} ${p.description} - - + - ℹ️ + + + + + ${hasBfd ? ` + + + ` : ''} `; tbody.appendChild(tr); @@ -126,16 +140,22 @@ function renderPeers(tbody, peers) { } function activatePopovers() { - document.querySelectorAll('[data-bs-toggle="popover"]').forEach(el => { - const existing = bootstrap.Popover.getInstance(el); - if (existing) existing.dispose(); - new bootstrap.Popover(el); + const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')); + popoverTriggerList.map(function (popoverTriggerEl) { + return new bootstrap.Popover(popoverTriggerEl); + }); +} + +function activateTooltips() { + const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); + tooltipTriggerList.map(function (tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl); }); } function showError(sumEl, bodyEl, label) { sumEl.textContent = `Error fetching ${label} data.`; - bodyEl.innerHTML = `Error retrieving data.`; + bodyEl.innerHTML = `Error retrieving data.`; } function refreshBGPTable() {