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);