function filterTable(searchInputId,tableId){ const input=document.getElementById(searchInputId); const filter=input.value.toUpperCase(); const table=document.getElementById(tableId); const tr=table.getElementsByTagName("tr"); for(let i=1;i-1){ tr[i].style.display=""; break; } } } } } function sortTable(tableId,columnIndex,th){ const table=document.getElementById(tableId); const tbody=table.tBodies[0]; const rows=Array.from(tbody.rows); const headers=Array.from(th.parentNode.children); headers.forEach(header=>{ if(header!==th){ header.classList.remove('asc','desc'); header.setAttribute('data-sort-state','none'); } }); let currentState=th.getAttribute('data-sort-state')||'none'; let newState=currentState==='none'?'asc':currentState==='asc'?'desc':'none'; th.classList.remove('asc','desc'); if(newState!=='none')th.classList.add(newState); th.setAttribute('data-sort-state',newState); if(newState==='none'){ rows.sort((a,b)=>parseInt(a.getAttribute('data-index'))-parseInt(b.getAttribute('data-index'))); }else{ rows.sort((a,b)=>{ const aText=a.cells[columnIndex].textContent.trim(); const bText=b.cells[columnIndex].textContent.trim(); const aNum=parseFloat(aText.replace(/[^0-9.-]/g,'')); const bNum=parseFloat(bText.replace(/[^0-9.-]/g,'')); const isNumeric=!isNaN(aNum)&&!isNaN(bNum); return newState==='asc' ?(isNumeric?aNum-bNum:aText.localeCompare(bText)) :(isNumeric?bNum-aNum:bText.localeCompare(aText)); }); } rows.forEach(row=>tbody.appendChild(row)); } async function loadBgpTables(){ const ipv4SummaryEl=document.getElementById("ipv4Summary"); const ipv6SummaryEl=document.getElementById("ipv6Summary"); const ipv4Body=document.getElementById("ipv4TableBody"); const ipv6Body=document.getElementById("ipv6TableBody"); try{ const response=await fetch("/bgp/json"); const data=await response.json(); ipv4SummaryEl.innerHTML=`

BGP Router ID: ${data.ipv4_info.router_id}, Local AS Number: ${data.ipv4_info.local_as}, VRF ID: ${data.ipv4_info.vrf_id}

BGP Table Version:${data.ipv4_info.table_version}

RIB Entries:${data.ipv4_info.rib_entries},using ${data.ipv4_info.rib_memory}

Peers:${data.ipv4_info.peers},using ${data.ipv4_info.peers_memory}

`; ipv6SummaryEl.innerHTML=`

BGP Router ID: ${data.ipv6_info.router_id}, Local AS Number: ${data.ipv6_info.local_as}, VRF ID: ${data.ipv6_info.vrf_id}

BGP Table Version:${data.ipv6_info.table_version}

RIB Entries:${data.ipv6_info.rib_entries},using ${data.ipv6_info.rib_memory}

Peers:${data.ipv6_info.peers},using ${data.ipv6_info.peers_memory}

`; ipv4Body.innerHTML=""; if(data.ipv4_peers.length===0){ ipv4Body.innerHTML=`No data available.`; }else{ data.ipv4_peers.forEach((peer,index)=>{ const row=document.createElement("tr"); row.setAttribute("data-index",index); row.innerHTML=` ${peer.neighbor} ${peer.version} ${peer.as_number} ${peer.msg_received} ${peer.msg_sent} ${peer.table_version} ${peer.in_queue} ${peer.out_queue} ${peer.up_down} ${peer.state_pfx_rcd} ${peer.prefix_sent} ${peer.description} `; ipv4Body.appendChild(row); }); } ipv6Body.innerHTML=""; if(data.ipv6_peers.length===0){ ipv6Body.innerHTML=`No data available.`; }else{ data.ipv6_peers.forEach((peer,index)=>{ const row=document.createElement("tr"); row.setAttribute("data-index",index); row.innerHTML=` ${peer.neighbor} ${peer.version} ${peer.as_number} ${peer.msg_received} ${peer.msg_sent} ${peer.table_version} ${peer.in_queue} ${peer.out_queue} ${peer.up_down} ${peer.state_pfx_rcd} ${peer.prefix_sent} ${peer.description} `; ipv6Body.appendChild(row); }); } }catch(error){ ipv4SummaryEl.textContent="Error fetching IPv4 data."; ipv6SummaryEl.textContent="Error fetching IPv6 data."; ipv4Body.innerHTML=`Error retrieving data.`; ipv6Body.innerHTML=`Error retrieving data.`; } } window.addEventListener("DOMContentLoaded",()=>{ loadBgpTables(); }); function refreshBGPTable(){ const searchInput=document.getElementById("ipv4Search"); const searchInput2=document.getElementById("ipv6Search"); const refreshIcon=document.getElementById("refreshIcon"); const refreshIcon2=document.getElementById("refreshIcon2"); const refreshSpinner=document.getElementById("refreshSpinner"); const refreshSpinner2=document.getElementById("refreshSpinner2"); searchInput.value=""; searchInput2.value=""; refreshIcon.classList.add("d-none"); refreshIcon2.classList.add("d-none"); refreshSpinner.classList.remove("d-none"); refreshSpinner2.classList.remove("d-none"); loadBgpTables().then(()=>{ refreshIcon.classList.remove("d-none"); refreshIcon2.classList.remove("d-none"); refreshSpinner.classList.add("d-none"); refreshSpinner2.classList.add("d-none"); }); }