Skip to content

Commit 48992d6

Browse files
vooondhewg
andcommitted
prometheus-node-exporter-ucode: add a plugin for go2rtc metrics
- Add a plugin to export go2rtc metrics Requires additional api_url option to enable: ``` uci set prometheus-node-exporter-ucode.go2rtc=collector uci set prometheus-node-exporter-ucode.go2rtc.api_url='http://127.0.0.1:1984' ``` Co-authored-by: Andre Heider <[email protected]> Signed-off-by: Vladimir Ermakov <[email protected]>
1 parent 2fa5ae7 commit 48992d6

File tree

3 files changed

+111
-3
lines changed

3 files changed

+111
-3
lines changed

utils/prometheus-node-exporter-ucode/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk
44

55
PKG_NAME:=prometheus-node-exporter-ucode
66
PKG_VERSION:=2024.02.07
7-
PKG_RELEASE:=2
7+
PKG_RELEASE:=3
88

99
PKG_MAINTAINER:=Andre Heider <[email protected]>
1010
PKG_LICENSE:=Apache-2.0
@@ -72,3 +72,4 @@ $(eval $(call Collector,snmp6,snmp6 collector,))
7272
$(eval $(call Collector,uci_dhcp_host,UCI DHCP host collector,))
7373
$(eval $(call Collector,wifi,Wi-Fi collector,+ucode-mod-nl80211))
7474
$(eval $(call Collector,wireguard,Wireguard collector,+rpcd-mod-wireguard))
75+
$(eval $(call Collector,go2rtc,go2rtc collector,+ucode-mod-uclient +ucode-mod-uloop go2rtc))
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import * as log from "log";
2+
let uloop = require("uloop");
3+
let uclient = require("uclient");
4+
5+
const api_url = config["api_url"];
6+
if (!api_url)
7+
return false;
8+
9+
let m_up = gauge("go2rtc_up");
10+
let m_producer_info = gauge("go2rtc_producer_info");
11+
let m_consumer_info = gauge("go2rtc_consumer_info");
12+
let m_producer_rx = counter("go2rtc_producer_received_bytes_total");
13+
let m_consumer_tx = counter("go2rtc_consumer_sent_bytes_total");
14+
15+
16+
function get_streams_info(api_url) {
17+
let data = '';
18+
19+
const url = `${api_url}/api/streams`;
20+
21+
uloop.init();
22+
uc = uclient.new(url, null, {
23+
data_read: (cb) => {
24+
let chunk;
25+
while (length(chunk = uc.read()) > 0)
26+
data += chunk;
27+
},
28+
data_eof: (cb) => {
29+
uloop.end();
30+
},
31+
error: (cb, code) => {
32+
log.ERR(`failed to get url: ${url}: ${code}`);
33+
data = null;
34+
uloop.end();
35+
}
36+
});
37+
38+
if (!uc.set_timeout(5000)) {
39+
log.ERR("failed to set timeout");
40+
return null;
41+
}
42+
43+
if (!uc.ssl_init({verify: false})) {
44+
log.ERR("failed to initialize SSL");
45+
return null;
46+
}
47+
48+
if (!uc.connect()) {
49+
log.ERR("failed to connect");
50+
return null;
51+
}
52+
53+
if (!uc.request("GET", {headers: {"User-Agent": "prometheus-node-exporter-ucode/1.0"}})) {
54+
log.ERR("failed to send request");
55+
return null;
56+
}
57+
58+
uloop.run();
59+
60+
if (data == null) {
61+
return null;
62+
}
63+
64+
return json(data);
65+
}
66+
67+
const x = get_streams_info(api_url);
68+
69+
if (!x) {
70+
m_up({url: api_url}, 0);
71+
return false;
72+
}
73+
74+
m_up({url: api_url}, 1);
75+
76+
for (let stream, info in x) {
77+
78+
for (let producer in info.producers) {
79+
m_producer_info({
80+
stream: stream,
81+
format_name: producer.format_name,
82+
protocol: producer.protocol,
83+
remote_addr: producer.remote_addr,
84+
user_agent: producer.user_agent,
85+
}, (!producer.remote_addr) ? 0 : 1);
86+
m_producer_rx({
87+
stream: stream,
88+
remote_addr: producer.remote_addr,
89+
}, producer.bytes_recv);
90+
}
91+
92+
for (let consumer in info.consumers) {
93+
m_consumer_info({
94+
stream: stream,
95+
format_name: consumer.format_name,
96+
protocol: consumer.protocol,
97+
remote_addr: consumer.remote_addr,
98+
user_agent: consumer.user_agent,
99+
}, 1);
100+
m_consumer_tx({
101+
stream: stream,
102+
remote_addr: consumer.remote_addr,
103+
}, consumer.bytes_send);
104+
}
105+
106+
}

utils/prometheus-node-exporter-ucode/files/init

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ start_service() {
4040
[ $keepalive -gt 0 ] && procd_append_param command -k $keepalive
4141

4242
procd_add_jail prometheus-node-exporter-ucode log procfs sysfs ubus
43-
procd_add_jail_mount "/usr/lib/uhttpd_ucode.so"
4443
procd_add_jail_mount "/lib/libubus.so*"
4544
procd_add_jail_mount "/lib/libuci.so*"
46-
procd_add_jail_mount "/usr/lib/ucode"
45+
procd_add_jail_mount "/lib/libustream-ssl.so"
46+
procd_add_jail_mount "/usr/lib/uhttpd_ucode.so"
47+
procd_add_jail_mount "/usr/lib/ucode/*.so"
4748
procd_add_jail_mount "/usr/lib/libnl*.so*"
4849
procd_add_jail_mount "/usr/share/ucode/node-exporter"
4950
procd_add_jail_mount "/etc/config"

0 commit comments

Comments
 (0)