#!/bin/sh
set -e

# Copyright 2017-2019 Holger Levsen (holger@layer-acht.org)
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <https://www.gnu.org/licenses/>

#
# Stop all running piuparts-slaves gracefully and watch…
#

. /usr/share/piuparts/lib/read_config.sh

get_config_value SLAVEROOT global slave-directory
get_config_value SLAVECOUNT global slave-count 1


SESSIONNAME=piuparts_slave_screen

cd $SLAVEROOT
LOGS=
for i in $(seq 1 $SLAVECOUNT) ; do
	LOGS="$LOGS screenlog.$i"
done
tail -f $LOGS &
TAILPID=$!
trap "kill $TAILPID" INT TERM EXIT

sleep 0.5
pkill --signal INT --full '/usr/bin/python3 /usr/share/piuparts/piuparts-slave'

i=1
while pgrep --full '/usr/bin/python3 /usr/share/piuparts/piuparts-slave' > /dev/null ; do
	echo -n "$(date -u +%T) - "
	pgrep --full '/usr/bin/python3 /usr/share/piuparts/piuparts-slave' | xargs -r echo -n "slaves running: "
	SLEEP=$(( $i * $i ))
	BUSY=$(ps fax | grep -v grep | grep '/usr/bin/python3 /usr/bin/piuparts' | awk '{print $NF}')
	if [ -n "$BUSY" ] ; then
		# really/meaningful busy
		echo
		echo "slaves are busy with:"
		echo "$BUSY"
	fi
	echo -n " sleeping ${SLEEP}sec now..."
	for j in $(seq 1 $SLEEP) ; do
		sleep 1
		echo -n "."
	done
	echo
	i=$(( $i + 1 ))
done
echo -n "$(date -u +%T) - "
pgrep --full '/usr/bin/python3 /usr/share/piuparts/piuparts-slave' | xargs echo "slaves running: (should list none) "

trap - INT TERM EXIT
kill $TAILPID
pkill --full "SCREEN -S $SESSIONNAME -d -m"
