#!/bin/bash
# Author: Alex Efros <powerman-asdf@yandex.ru>, 2009,2010,2019,2020,2026
# License: Public Domain
#
# srvstat: Show nicely formatted status for all runit services.

VERSION="3.03"

[ -n "$1" ] && cd "$1" && one="$PWD"

mnt="$(readlink /proc/$$/ns/mnt)"
for p in $(pidof runsvdir | sort -n); do
    test "$mnt" != "$(readlink /proc/"$p"/ns/mnt)" && continue
    d=$(readlink /proc/"$p"/cwd)
    s=$(perl -0777 -pe 's/\A[^\0]+\0(?:-P\0)?//;s/\0.*\z//s;s/\/\z//;s/\A(?!\/)/.\//' /proc/"$p"/cmdline)
    l=$(perl -0777 -pe 's/\A[^\0]+\0(?:-P\0)?[^\0]+//;s/\0//g' /proc/"$p"/cmdline)
    [ -n "$one" ] && [ "$d" != "$one" ] && continue
    cd "$d" || continue
    ls --color=auto -d "$d"
    sv status "$s"/*/ |
        perl -ne '
            chomp;
            s/\(pid\s\d+\)\s*//g;
            for (($s,$l)=split/;\s*/) {
                $_ = [ /\A(\w+):\s(.*?):\s(\d+s)(?:,\s(.*))?\z/ ];
            }
            printf "%4s %-56s %8s  %4s %s %8s\n", @$s[0,1,2], @$l[0,1,2];
            print "\e[1m\e[31m";
            printf "     %-53s %s\n", $s->[3], $l->[3] if $s->[3] || $l->[3];
            print "\e[0m";
        '
    [ -n "$l" ] && echo "$l"
    echo
done
