document.addEventListener("DOMContentLoaded", function () {
const loadingRowHtml = `
Loading... |
`;
document.getElementById("dampenedTableBodyIpv4").innerHTML = loadingRowHtml;
document.getElementById("dampenedTableBodyIpv6").innerHTML = loadingRowHtml;
fetchDampenedData();
});
function filterTable(searchInputId, tableId) {
const filter = document.getElementById(searchInputId).value.toUpperCase();
const rows = document.getElementById(tableId).tBodies[0].rows;
for (let i = 0; i < rows.length; i++) {
let display = "none";
for (const cell of rows[i].getElementsByTagName("td")) {
if (cell.textContent.toUpperCase().includes(filter)) {
display = "";
break;
}
}
rows[i].style.display = display;
}
}
function sortTable(tableId, columnIndex, th) {
const tbody = document.getElementById(tableId).tBodies[0];
const rows = Array.from(tbody.rows);
const headers = Array.from(th.parentNode.children);
headers.forEach((h) => {
if (h !== th) {
h.classList.remove("asc", "desc");
h.dataset.sortState = "none";
}
});
const currentState = th.dataset.sortState || "none";
const newState = currentState === "none" ? "asc" : currentState === "asc" ? "desc" : "none";
th.dataset.sortState = newState;
th.classList.remove("asc", "desc");
if (newState !== "none") {
th.classList.add(newState);
}
if (newState === "none") {
rows.sort((a, b) => a.dataset.index - b.dataset.index);
} else {
rows.sort((a, b) => {
const aText = a.cells[columnIndex].textContent.trim();
const bText = b.cells[columnIndex].textContent.trim();
let compare;
if (!isNaN(aText) && !isNaN(bText)) {
compare = parseFloat(aText) - parseFloat(bText);
} else {
compare = aText.localeCompare(bText, undefined, { numeric: true });
}
return newState === "asc" ? compare : -compare;
});
}
rows.forEach((row) => tbody.appendChild(row));
}
function toggleRefresh(loading) {
const buttons = [
{ btn: "refreshButton", icon: "refreshIcon", spinner: "refreshSpinner" },
{ btn: "refreshButton2", icon: "refreshIcon2", spinner: "refreshSpinner2" }
];
buttons.forEach(b => {
const btnEl = document.getElementById(b.btn);
const iconEl = document.getElementById(b.icon);
const spinnerEl = document.getElementById(b.spinner);
if (btnEl) btnEl.disabled = loading;
if (iconEl) iconEl.classList.toggle("d-none", loading);
if (spinnerEl) spinnerEl.classList.toggle("d-none", !loading);
});
}
function refreshDampenedTable() {
document.getElementById("dampenedSearchIpv4").value = "";
document.getElementById("dampenedSearchIpv6").value = "";
filterTable('dampenedSearchIpv4', 'dampenedTableIpv4');
filterTable('dampenedSearchIpv6', 'dampenedTableIpv6');
toggleRefresh(true);
fetchDampenedData().finally(() => {
toggleRefresh(false);
});
}
function populateTable(tableBodyId, summaryId, data) {
const tableBody = document.getElementById(tableBodyId);
const summaryElement = document.getElementById(summaryId);
tableBody.innerHTML = "";
summaryElement.textContent = data.summary || "";
const paths = data.paths;
if (paths && paths.length > 0) {
paths.forEach((path, index) => {
let row = tableBody.insertRow();
row.dataset.index = index;
row.insertCell(0).textContent = path.status;
const prefixCell = row.insertCell(1);
prefixCell.innerHTML = `${path.prefix}`;
row.insertCell(2).textContent = path.from;
row.insertCell(3).textContent = path.suppress_remain;
const pathCell = row.insertCell(4);
const pathLinks = path.path.split(' ').map(part => {
if (!isNaN(parseInt(part, 10))) {
return `${part}`;
}
return part;
}).join(' ');
pathCell.innerHTML = pathLinks;
// HIER IS DE WIJZIGING:
pathCell.style.whiteSpace = "nowrap";
});
} else {
let row = tableBody.insertRow();
let cell = row.insertCell(0);
cell.colSpan = 5;
cell.textContent = "No dampened routes found.";
cell.className = "text-center";
}
}
async function fetchDampenedData() {
try {
const response = await fetch("/bgp/dampened/json");
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
populateTable("dampenedTableBodyIpv4", "dampened-summary-ipv4", data.ipv4);
populateTable("dampenedTableBodyIpv6", "dampened-summary-ipv6", data.ipv6);
} catch (error) {
console.error("Error fetching dampened routes:", error);
const errorRowHtml = `| Error loading data. Please try again. |
`;
document.getElementById("dampenedTableBodyIpv4").innerHTML = errorRowHtml;
document.getElementById("dampenedTableBodyIpv6").innerHTML = errorRowHtml;
}
}