summaryrefslogtreecommitdiffstats
path: root/utils/prometheus-node-exporter-ucode/files/extra/nat_traffic.uc
blob: e42924bb97112c001816d474dc5643ed78566156 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
let f = fs.open("/proc/net/nf_conntrack");
if (!f)
	return false;

let nat = {};
let nat_metric = gauge("node_nat_traffic");

let line;
while ((line = nextline(f)) != null) {
	const fields = wsplit(line);
	let src, dst;
	let bytes = 0;

	for (let field in fields) {
		if (src == null && substr(field, 0, 4) == "src=")
			src = substr(field, 4);
		else if (dst == null && substr(field, 0, 4) == "dst=")
			dst = substr(field, 4);
		else if (substr(field, 0, 6) == "bytes=")
			bytes += +substr(field, 6);
	}

	if (src == null || dst == null)
		continue;

	if (nat[src] == null)
		nat[src] = {};

	nat[src][dst] = (nat[src][dst] || 0) + bytes;
}

f.close();

for (let src in nat)
	for (let dst in nat[src])
		nat_metric({ src, dst }, nat[src][dst]);