ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/conntrack.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/conntrack.uc
new file mode 100644
index 0000000..b3ee3f3
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/conntrack.uc
@@ -0,0 +1,4 @@
+gauge("node_nf_conntrack_entries")
+	(null, oneline("/proc/sys/net/netfilter/nf_conntrack_count"));
+gauge("node_nf_conntrack_entries_limit")
+	(null, oneline("/proc/sys/net/netfilter/nf_conntrack_max"));
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/cpu.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/cpu.uc
new file mode 100644
index 0000000..574655d
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/cpu.uc
@@ -0,0 +1,44 @@
+let f = fs.open("/proc/stat");
+
+if (!f)
+	return false;
+
+const desc = [
+	null,
+	"user",
+	"nice",
+	"system",
+	"idle",
+	"iowait",
+	"irq",
+	"softirq",
+	"steal",
+	"guest",
+	"guest_nice",
+];
+const m_cpu = counter("node_cpu_seconds_total");
+
+let line;
+while (line = nextline(f)) {
+	const x = wsplit(line);
+
+	if (length(x) < 2)
+		continue;
+
+	if (match(x[0], /^cpu\d+/)) {
+		const count = min(length(x), length(desc));
+		for (let i = 1; i < count; i++)
+			m_cpu({ cpu: x[0], mode: desc[i] }, x[i] / 100.0);
+	} else if (x[0] == "intr")
+		counter("node_intr_total")(null, x[1]);
+	else if (x[0] == "ctxt")
+		counter("node_context_switches_total")(null, x[1]);
+	else if (x[0] == "btime")
+		gauge("node_boot_time_seconds")(null, x[1]);
+	else if (x[0] == "processes")
+		counter("node_forks_total")(null, x[1]);
+	else if (x[0] == "procs_running")
+		gauge("node_procs_running_total")(null, x[1]);
+	else if (x[0] == "procs_blocked")
+		gauge("node_procs_blocked_total")(null, x[1]);
+}
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/entropy.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/entropy.uc
new file mode 100644
index 0000000..2df4426
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/entropy.uc
@@ -0,0 +1,4 @@
+gauge("node_entropy_available_bits")
+	(null, oneline("/proc/sys/kernel/random/entropy_avail"));
+gauge("node_entropy_pool_size_bits")
+	(null, oneline("/proc/sys/kernel/random/poolsize"));
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/filefd.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/filefd.uc
new file mode 100644
index 0000000..359cffd
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/filefd.uc
@@ -0,0 +1,7 @@
+const x = wsplit(oneline("/proc/sys/fs/file-nr"));
+
+if (length(x) < 3)
+	return false;
+
+gauge("node_filefd_allocated")(null, x[0]);
+gauge("node_filefd_maximum")(null, x[2]);
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/loadavg.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/loadavg.uc
new file mode 100644
index 0000000..ba67daf
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/loadavg.uc
@@ -0,0 +1,8 @@
+const x = wsplit(oneline("/proc/loadavg"));
+
+if (length(x) < 3)
+	return false;
+
+gauge("node_load1")(null, x[0]);
+gauge("node_load5")(null, x[1]);
+gauge("node_load15")(null, x[2]);
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/meminfo.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/meminfo.uc
new file mode 100644
index 0000000..3cecb12
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/meminfo.uc
@@ -0,0 +1,24 @@
+let f = fs.open("/proc/meminfo");
+
+if (!f)
+	return false;
+
+let line;
+while (line = nextline(f)) {
+	const x = wsplit(line);
+
+	if (length(x) < 2)
+		continue;
+
+	if (substr(x[0], -1) != ":")
+		continue;
+
+	let name;
+	if (substr(x[0], -2) == "):")
+		name = replace(substr(x[0], 0, -2), "(", "_");
+	else
+		name = substr(x[0], 0, -1);
+
+	gauge(`node_memory_${name}_bytes`)
+		(null, x[2] == "kB" ? x[1] * 1024 : x[1]);
+}
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/netclass.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/netclass.uc
new file mode 100644
index 0000000..10b3cfd
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/netclass.uc
@@ -0,0 +1,48 @@
+const root = "/sys/class/net/";
+const devices = fs.lsdir(root);
+
+if (length(devices) < 1)
+	return false;
+
+const m_info = gauge("node_network_info");
+const m_speed = gauge("node_network_speed_bytes");
+const metrics = {
+	addr_assign_type:	gauge("node_network_address_assign_type"),
+	carrier:		gauge("node_network_carrier"),
+	carrier_changes:	counter("node_network_carrier_changes_total"),
+	carrier_down_count:	counter("node_network_carrier_down_changes_total"),
+	carrier_up_count:	counter("node_network_carrier_up_changes_total"),
+	dev_id:			gauge("node_network_device_id"),
+	dormant:		gauge("node_network_dormant"),
+	flags:			gauge("node_network_flags"),
+	ifindex:		gauge("node_network_iface_id"),
+	iflink:			gauge("node_network_iface_link"),
+	link_mode:		gauge("node_network_iface_link_mode"),
+	mtu:			gauge("node_network_mtu_bytes"),
+	name_assign_type:	gauge("node_network_name_assign_type"),
+	netdev_group:		gauge("node_network_net_dev_group"),
+	type:			gauge("node_network_protocol_type"),
+	tx_queue_len:		gauge("node_network_transmit_queue_length"),
+};
+
+for (let device in devices) {
+	const devroot = root + device + "/";
+
+	m_info({
+		device,
+		address:	oneline(devroot + "address"),
+		broadcast:	oneline(devroot + "broadcast"),
+		duplex:		oneline(devroot + "duplex"),
+		operstate:	oneline(devroot + "operstate"),
+		ifalias:	oneline(devroot + "ifalias"),
+	}, 1);
+
+	for (let m in metrics) {
+		let line = oneline(devroot + m);
+		metrics[m]({ device }, line);
+	}
+
+	const speed = int(oneline(devroot + "speed"));
+	if (speed > 0)
+			m_speed({ device }, speed * 1000 * 1000 / 8);
+}
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/netdev.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/netdev.uc
new file mode 100644
index 0000000..f8fc68d
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/netdev.uc
@@ -0,0 +1,40 @@
+let f = fs.open("/proc/net/dev");
+
+if (!f)
+	return false;
+
+const m = [
+	null,
+	counter("node_network_receive_bytes_total"),
+	counter("node_network_receive_packets_total"),
+	counter("node_network_receive_errs_total"),
+	counter("node_network_receive_drop_total"),
+	counter("node_network_receive_fifo_total"),
+	counter("node_network_receive_frame_total"),
+	counter("node_network_receive_compressed_total"),
+	counter("node_network_receive_multicast_total"),
+	counter("node_network_transmit_bytes_total"),
+	counter("node_network_transmit_packets_total"),
+	counter("node_network_transmit_errs_total"),
+	counter("node_network_transmit_drop_total"),
+	counter("node_network_transmit_fifo_total"),
+	counter("node_network_transmit_colls_total"),
+	counter("node_network_transmit_carrier_total"),
+	counter("node_network_transmit_compressed_total"),
+];
+
+let line;
+while (line = nextline(f)) {
+	const x = wsplit(ltrim(line), " ");
+
+	if (length(x) < 2)
+		continue;
+
+	if (substr(x[0], -1) != ":")
+		continue;
+
+	const count = min(length(x), length(m));
+	const labels = { device: substr(x[0], 0, -1) };
+	for (let i = 1; i < count; i++)
+		m[i](labels, x[i]);
+}
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/selinux.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/selinux.uc
new file mode 100644
index 0000000..11840a8
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/selinux.uc
@@ -0,0 +1,10 @@
+const mode = oneline("/sys/fs/selinux/enforce");
+const enabled = gauge("node_selinux_enabled");
+
+if (mode == null) {
+	enabled(null, 0);
+	return;
+}
+
+enabled(null, 1);
+gauge("node_selinux_current_mode")(null, mode);
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/time.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/time.uc
new file mode 100644
index 0000000..7d13ea8
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/time.uc
@@ -0,0 +1 @@
+gauge("node_time_seconds")(null, time());
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/base/uname.uc b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/uname.uc
new file mode 100644
index 0000000..50cb352
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/base/uname.uc
@@ -0,0 +1,8 @@
+gauge("node_uname_info")({
+	sysname:	oneline("/proc/sys/kernel/ostype"),
+	nodename:	oneline("/proc/sys/kernel/hostname"),
+	release:	oneline("/proc/sys/kernel/osrelease"),
+	version:	oneline("/proc/sys/kernel/version"),
+	machine:	poneline("uname -m"), // TODO lame
+	domainname:	oneline("/proc/sys/kernel/domainname"),
+}, 1);