ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
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);
+}