# vim: ft=zsh noet ts=4 sts=4 sw=4
#
# confz functions for zsv
#
zmodload zsh/datetime
confz_zsv_configured_check() {
local -a confs failures
local f
confs=( /etc/sv.d/*(N-.) )
[[ -e /etc/svtab ]] && confs+=( /etc/svtab )
(($#confs)) || die "no zsv configuration found"
for f in $confs; do
[[ $vars[svdir]/.zsv -nt $f ]] || failures+=(
"$vars[svdir]/.zsv not newer than ${(qqq)f}"
)
done
do_command=( zsvgen )
fail_reason=${(j:,:)failures}
return $#failures
}
confz_runsv_running_check() {
checkvars service
#require zsv_configured
[[ -e $vars[service] ]] || die
do_command=( sv start $vars[service] )
local START
START=$EPOCHREALTIME
# wait up to 10s for supervise/control to appear
while (( $EPOCHREALTIME - $START < 10 )); do
[[ -e $vars[service]/supervise/control ]] && break
if (($+commands[inotifywait])); then
inotifywait -r -q -t 1 -e create,move,close_write $vars[service]
else
sleep 0.2
fi
done
sv check $vars[service]
}
confz_zsv_autorestart_check() {
checkvars service
require runsv_running :service
do_command=( sv restart $vars[service] )
local -a failures
local f
for f in ${(f)"$(<$vars[service]/restart.files)"}; do
[[ -e $f ]] || failures+=( "${(qqq)f} does not exist" )
[[ $vars[service]/restart.files -nt $f ]] || failures+=(
"${(qqq)f} is newer than restart.files"
)
done
fail_reason=${(j:,:)failures}
return $#failures
}
confz_zsv_autoreload_check() {
checkvars service
require zsv_autorestart :service
do_command=( sv hup $vars[service] )
local -a failures
local f
for f in ${(f)"$(<$vars[service]/reload.files)"}; do
[[ -e $f ]] || failures+=( "${(qqq)f} does not exist" )
[[ $vars[service]/reload.files -nt $f ]] || failures+=(
"${(qqq)f} is newer than reload.files"
)
done
fail_reason=${(j:,:)failures}
return $#failures
}
confz_zsv_autoreload_current_check() {
defvar svdir /run/service
require zsv_configured :svdir
local sv
for sv in $vars[svdir]/*(-/); do
if ! [[ -e $sv/down ]]; then
if [[ -e $sv/reload.files ]]; then
require zsv_autoreload service=$sv
elif [[ -e $sv/restart.files ]]; then
require zsv_autorestart service=$sv
fi
fi
done
}