packages/utils/prometheus-node-exporter-ucode/files/extra/wireguard.uc

50 lines
1.2 KiB
Plaintext

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