about summary refs log tree commit diff
path: root/bundles/s6/files/etc/periodic/15min/s6-rc-metrics
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/s6/files/etc/periodic/15min/s6-rc-metrics')
-rwxr-xr-xbundles/s6/files/etc/periodic/15min/s6-rc-metrics61
1 files changed, 61 insertions, 0 deletions
diff --git a/bundles/s6/files/etc/periodic/15min/s6-rc-metrics b/bundles/s6/files/etc/periodic/15min/s6-rc-metrics
new file mode 100755
index 0000000..4fa7625
--- /dev/null
+++ b/bundles/s6/files/etc/periodic/15min/s6-rc-metrics
@@ -0,0 +1,61 @@
+#!/bin/sh
+set -eu
+
+textfile_directory=/run/prom
+
+s6rc_service_is_up() {
+	if s6-rc -a list | grep -q "${1:?}"; then printf '1'; else printf '0'; fi
+}
+
+printmetric() {
+	local name=${1:?}
+	local labels=${2:?}
+	local value=${3:?}
+	printf '%s{%s} %s\n' "$name" "$labels" "$value"
+}
+
+services_count() {
+	printf '# HELP s6_rc_services_count number of services\n'
+	printf '# TYPE s6_rc_services_count gauge\n'
+	for bundle in $(s6-rc-db list bundles); do
+		printmetric 's6_rc_services_count' \
+			$(printf 'bundle="%s"' $bundle) \
+			$(s6-rc list $bundle | wc -l)
+	done
+}
+
+services_up() {
+	printf '# HELP s6_rc_service_up if a service is running\n'
+	#printf '# TYPE s6_rc_service_up stateset\n'
+	for bundle in $(s6-rc-db list bundles)
+	do
+		for service in $(s6-rc-db contents "$bundle")
+		do
+			printmetric 's6_rc_service_up' \
+				$(printf 'bundle="%s",service="%s"' $bundle $service) \
+				$(s6rc_service_is_up $service)
+		done
+	done
+}
+
+write_textfile() {
+	mkdir -p "$textfile_directory" || exit 1
+
+	tmp=$(mktemp --tmpdir metrics_s6_rc.XXXXX)
+
+	(
+		services_count
+		services_up
+	) | tee "$tmp"
+
+	mv -v "$tmp" "$textfile_directory"/s6_rc.prom || exit 1
+
+	chmod +r "$textfile_directory"/s6_rc.prom
+	chown nobody:nobody "$textfile_directory"/s6_rc.prom
+}
+
+main() {
+	write_textfile
+}
+
+main >/dev/null 2>&1