diff options
Diffstat (limited to 'bundles/s6/files/etc/periodic')
| -rwxr-xr-x | bundles/s6/files/etc/periodic/15min/s6-rc-metrics | 61 |
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 |