routerconsole/jsp/js/transitsummary.js

/**
 * @module transitsummary
 * @description Handles automatic refresh and table sorting for the /transitsummary
 * page. Converts KB values to MB and refreshes transit peer/tunnel data.
 * @author dr|z3d
 * @license AGPL3 or later
 */

import {convertKBtoMB} from "/js/convertKBtoMB.js";
import {refreshElements} from "/js/refreshElements.js";

const main = document.getElementById("tunnels");
const peers = document.getElementById("transitPeers");
const summary = document.getElementById("transitSummary");
const REFRESH_INTERVAL = 10 * 1000;
let sorter = null;

/**
 * Initializes the Tablesort instance on the transit summary table.
 * @function setupSort
 * @returns {void}
 */
function setupSort() {
  if (summary && sorter === null) {
    sorter = new Tablesort(summary, {descending: true});
    const rows = summary.querySelectorAll("tbody tr");
    summary.addEventListener("beforeSort", () => {
      progressx.show(theme);
    });
    summary.addEventListener("afterSort", () => {
      progressx.hide();
    });
  }
}

/**
   * Triggers an element refresh for transit tunnel and peer data.
   * @function updateTunnels
   * @returns {void}
   */
function updateTunnels() {
  if (sorter === null) { setupSort(); }
  let selectors = ["#tunnels"];
  if (peers) { selectors = ["#transitPeers"]; }
  refreshElements(selectors, "/transitsummary", REFRESH_INTERVAL);
}

document.addEventListener("refreshComplete", () => {
  sorter?.refresh();
  convertKBtoMB(".tcount+td");
});

document.addEventListener("DOMContentLoaded", () => {
  updateTunnels();
});