| 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"]); |
| } |
| } |