#!/bin/sh
# $Header: /home/v-aklaus/dataserfs/ddu/RCS/startworker,v 1.13 2024/04/08 16:17:29 v-aklaus Exp $
set -u

DDUDIR=/home/dataserfs/ddu
DISTRO=$(uname -r| sed -e 's/^.*\.el\(.\).*/el\1/')
BINDIR=${DDUDIR}/$DISTRO
LOGDIR=${DDUDIR}/logs
export PATH=${DDUDIR}:${PATH}
UNAME=$(uname -n)



function supervise_one()
{
typeset number=$1	# instance
typeset program=$2	# program name

	while true; do
		echo "$(date) $number $program starting"
		$BINDIR/$program ${VERBOSE} </dev/null >${LOGDIR}/${UNAME}.$program.$number.out 2>&1
		rc=$?
		echo "$(date) result: $rc"
		# hup,int term
		case $rc in
		129|130|143) echo exiting caused by $program $number;exit 1;;
		esac
		echo sleeping 60 seconds
		sleep 60
	done
} # supervise_one



trap "killall ddu-dir;killall ddu-dstat" SIGINT
trap "killall ddu-dir;killall ddu-dstat" SIGTERM


typeset VERBOSE=""	# empty or -v
typeset WAIT="false"	# or true

	while [[ $# > 0 && "$1" =~ ^- ]]; do
		case $1 in
		-w)	WAIT=true;;
		-v)	VERBOSE=-v;;
		*) echo "illegal option '$1'" >&2; exit 1;;
		esac
		shift
	done

typeset -i COUNT=${1:-1}
typeset -i i=1

	rm -f ${LOGDIR}/${UNAME}.ddu-dir*.out
	rm -f ${LOGDIR}/${UNAME}.ddu-dstat*.out


	while(( i <= COUNT ))
	do
		supervise_one $i ddu-dir &
		supervise_one $i ddu-dstat&
		i=$(( i + 1 ))
	done


	if $WAIT; then
		echo waiting
		wait
	else
		disown -a
	fi
	echo done

