#!/bin/sh
# Wait until services in a runsvdir tier are up (or timeout).
# Usage: wait-tier <tier-name> [timeout_seconds]

set -e

tier=${1:?tier name required}
timeout=${2:-120}
dir=/etc/runit/runsvdir/$tier
needs=$dir/.needs
start=$(date +%s)

[ -d "$dir" ] || exit 0

wait_for() {
	svc=$1
	while ! sv check "$svc" >/dev/null 2>&1; do
		[ $(($(date +%s) - start)) -ge "$timeout" ] && {
			echo "wait-tier: timeout waiting for $svc in tier $tier" >&2
			return 1
		}
		sleep 0.2
	done
	return 0
}

if [ -r "$needs" ]; then
	while read -r svc _rest; do
		case "$svc" in
		''|'#'*) continue ;;
		esac
		wait_for "$svc" || return 1
	done < "$needs"
else
	for link in "$dir"/*; do
		[ -L "$link" ] || continue
		wait_for "${link##*/}" || return 1
	done
fi

return 0
