Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion utils/prometheus-node-exporter-ucode/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk

PKG_NAME:=prometheus-node-exporter-ucode
PKG_VERSION:=2024.02.07
PKG_RELEASE:=2
PKG_RELEASE:=3

PKG_MAINTAINER:=Andre Heider <[email protected]>
PKG_LICENSE:=Apache-2.0
Expand Down Expand Up @@ -72,3 +72,4 @@ $(eval $(call Collector,snmp6,snmp6 collector,))
$(eval $(call Collector,uci_dhcp_host,UCI DHCP host collector,))
$(eval $(call Collector,wifi,Wi-Fi collector,+ucode-mod-nl80211))
$(eval $(call Collector,wireguard,Wireguard collector,+rpcd-mod-wireguard))
$(eval $(call Collector,go2rtc,go2rtc collector,+ucode-mod-uclient +ucode-mod-uloop go2rtc))
105 changes: 105 additions & 0 deletions utils/prometheus-node-exporter-ucode/files/extra/go2rtc.uc
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
let uloop = require("uloop");
let uclient = require("uclient");

const api_url = config["api_url"];
if (!api_url)
return false;

let m_up = gauge("go2rtc_up");
let m_producer_info = gauge("go2rtc_producer_info");
let m_consumer_info = gauge("go2rtc_consumer_info");
let m_producer_rx = counter("go2rtc_producer_received_bytes_total");
let m_consumer_tx = counter("go2rtc_consumer_sent_bytes_total");


function get_streams_info(api_url) {
let data = '';

const url = `${api_url}/api/streams`;

uloop.init();
uc = uclient.new(url, null, {
data_read: (cb) => {
let chunk;
while (length(chunk = uc.read()) > 0)
data += chunk;
},
data_eof: (cb) => {
uloop.end();
},
error: (cb, code) => {
warn(`failed to get url: ${url}: ${code}\n`);
data = null;
uloop.end();
}
});

if (!uc.set_timeout(5000)) {
warn("failed to set timeout\n");
return null;
}

if (!uc.ssl_init({verify: false})) {
warn("failed to initialize SSL\n");
return null;
}

if (!uc.connect()) {
warn("failed to connect\n");
return null;
}

if (!uc.request("GET", {headers: {"User-Agent": "prometheus-node-exporter-ucode/1.0"}})) {
warn("failed to send request\n");
return null;
}

uloop.run();

if (data == null) {
return null;
}

return json(data);
}

const x = get_streams_info(api_url);

if (!x) {
m_up({url: api_url}, 0);
return false;
}

m_up({url: api_url}, 1);

for (let stream, info in x) {

for (let producer in info.producers) {
m_producer_info({
stream: stream,
format_name: producer.format_name,
protocol: producer.protocol,
remote_addr: producer.remote_addr,
user_agent: producer.user_agent,
}, (!producer.remote_addr) ? 0 : 1);
m_producer_rx({
stream: stream,
remote_addr: producer.remote_addr,
}, producer.bytes_recv);
}

for (let consumer in info.consumers) {
m_consumer_info({
stream: stream,
format_name: consumer.format_name,
protocol: consumer.protocol,
remote_addr: consumer.remote_addr,
user_agent: consumer.user_agent,
}, 1);
m_consumer_tx({
stream: stream,
remote_addr: consumer.remote_addr,
}, consumer.bytes_send);
}

}
5 changes: 3 additions & 2 deletions utils/prometheus-node-exporter-ucode/files/init
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ start_service() {
[ $keepalive -gt 0 ] && procd_append_param command -k $keepalive

procd_add_jail prometheus-node-exporter-ucode log procfs sysfs ubus
procd_add_jail_mount "/usr/lib/uhttpd_ucode.so"
procd_add_jail_mount "/lib/libubus.so*"
procd_add_jail_mount "/lib/libuci.so*"
procd_add_jail_mount "/usr/lib/ucode"
procd_add_jail_mount "/lib/libustream-ssl.so"
procd_add_jail_mount "/usr/lib/uhttpd_ucode.so"
procd_add_jail_mount "/usr/lib/ucode/*.so"
procd_add_jail_mount "/usr/lib/libnl*.so*"
procd_add_jail_mount "/usr/share/ucode/node-exporter"
procd_add_jail_mount "/etc/config"
Expand Down
Loading