ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/utils/prometheus-node-exporter-ucode/files/init b/external/subpack/utils/prometheus-node-exporter-ucode/files/init
new file mode 100644
index 0000000..1735236
--- /dev/null
+++ b/external/subpack/utils/prometheus-node-exporter-ucode/files/init
@@ -0,0 +1,73 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013-2017 OpenWrt.org
+
+START=60
+USE_PROCD=1
+
+_log() {
+	logger -p daemon.info -t prometheus-node-exporter-ucode "$@"
+}
+
+start_service() {
+	. /lib/functions/network.sh
+
+	local interface port bind4 bind6
+
+	config_load prometheus-node-exporter-ucode.main
+	config_get interface "main" listen_interface "loopback"
+	config_get port "main" listen_port 9101
+	config_get keepalive "main" http_keepalive 70
+
+	[ "$interface" = "*" ] || {
+		network_get_ipaddr  bind4 "$interface"
+		network_get_ipaddr6 bind6 "$interface"
+		[ -n "$bind4$bind6" ] || {
+			_log "defering start until listen interface $interface becomes ready"
+			return 0
+		}
+	}
+
+	procd_open_instance
+
+	procd_set_param command /usr/sbin/uhttpd -f -c /dev/null -h /dev/null -S -D -o /metrics -O /usr/share/ucode/node-exporter/metrics.uc
+
+	if [ "$interface" = "*" ]; then
+		procd_append_param command -p $port
+	else
+		[ -n "$bind4" ] && procd_append_param command -p $bind4:$port
+		[ -n "$bind6" ] && procd_append_param command -p [$bind6]:$port
+	fi
+	[ $keepalive -gt 0 ] && procd_append_param command -k $keepalive
+
+	procd_add_jail prometheus-node-exporter-ucode log procfs sysfs ubus
+	procd_add_jail_mount "/usr/lib/uhttpd_ucode.so"
+	procd_add_jail_mount "/lib/libubus.so*"
+	procd_add_jail_mount "/lib/libuci.so"
+	procd_add_jail_mount "/usr/lib/ucode"
+	procd_add_jail_mount "/usr/lib/libnl*.so*"
+	procd_add_jail_mount "/usr/share/ucode/node-exporter"
+	procd_add_jail_mount "/etc/config"
+
+	# TODO breaks the dsl collector?
+	#procd_set_param user nobody
+	#procd_set_param group nogroup
+	procd_set_param no_new_privs 1
+
+	procd_set_param stdout 1
+	procd_set_param stderr 1
+	procd_set_param respawn
+
+	procd_close_instance
+}
+
+service_triggers()
+{
+	local interface
+
+	procd_add_reload_trigger "prometheus-node-exporter-ucode"
+
+	config_load prometheus-node-exporter-ucode.main
+	config_get interface "main" listen_interface "loopback"
+
+	[ "$interface" = "*" ] || procd_add_reload_interface_trigger "$interface"
+}