import { cursor } from "uci"; const x = ubus.call("wireguard", "status"); if (!x) return false; const uci = cursor(); uci.load("network"); let m_wg_iface_info = gauge("wireguard_interface_info"); let m_wg_peer_info = gauge("wireguard_peer_info"); let m_wg_handshake = gauge ("wireguard_latest_handshake_seconds"); let m_wg_rx = gauge ("wireguard_received_bytes_total"); let m_wg_tx = gauge ("wireguard_sent_bytes_total"); for (let iface in x) { const wc = x[iface]; m_wg_iface_info({ name: iface, public_key: wc["public_key"], listen_port: wc["listen_port"], fwmark: wc["fwmark"] || NaN, }, 1); for (let peer in wc["peers"]) { let description; uci.foreach('network', `wireguard_${iface}`, (s) => { if (s.public_key == peer) description = s.description; }); const pc = wc["peers"][peer]; m_wg_peer_info({ interface: iface, public_key: peer, description, endpoint: pc["endpoint"], persistent_keepalive_interval: pc["persistent_keepalive_interval"] || NaN, }, 1); const labels = { public_key: peer }; m_wg_handshake(labels, pc["last_handshake"]); m_wg_rx(labels, pc["rx_bytes"]); m_wg_tx(labels, pc["tx_bytes"]); } }