#!/bin/bash
#
# start -- start up configured conmux servers on this host.
#
# (C) Copyright IBM Corp. 2004, 2005, 2006
# Author: Andy Whitcroft <andyw@uk.ibm.com>
#
# The Console Multiplexor is released under the GNU Public License V2
#
if [ -f ~/.gmm.conf ]; then
	. ~/.gmm.conf
fi
CONMUX=${CONMUX:-/usr/local/conmux}

cmd="start"
if [ "$1" != "" ]; then
	cmd="$1"
fi

PATH=$CONMUX/bin:$CONMUX/sbin:$CONMUX/lib/drivers:$CONMUX/lib/helpers:$PATH

function start() {
        typeset name="$1"
        typeset pf="$CONMUX/log/$name.pid"

        shift

        # Determine whether it is already running ... if so leave it be.
        if [ -f "$pf" ]; then
                if kill -0 `cat "$pf"` 2>/dev/null; then
                        return 1
                fi
        fi

	echo "starting $name ..."
        "$@" >"$CONMUX/log/$name.log" 2>&1 &
        echo "$!" >"$pf"

	return 0
}
function stop() {
        typeset name="$1"
        typeset pf="$CONMUX/log/$name.pid"

	echo "stopping $name ..."
        # Kill it and clear up
        kill -HUP `cat "$pf"` 2>/dev/null
	rm -f "$pf"
}

existing=""
for i in $CONMUX/log/*.pid
do
	n=${i%.pid}
	n=${n#$CONMUX/log/}

	if [ "$n" != "*" ]; then
		existing="$existing $n"
	fi
done

if [ "$cmd" = "start" ]; then
	autoboot=""
	[ -f $CONMUX/etc/registry ] || touch $CONMUX/etc/registry
	start registry $CONMUX/sbin/conmux-registry 63000 $CONMUX/etc/registry
	if [ "$?" -eq 0 ]; then
		sleep 1
	fi
	started="registry"
	pause=0
	for i in $CONMUX/etc/*.cf
	do
		n=${i%.cf}
		n=${n#$CONMUX/etc/}

		if [ "$n" != "*" ]; then
			if [ -f "$CONMUX/log/$n.cf" ]; then
				if ! cmp -s "$i" "$CONMUX/log/$n.cf"; then
					stop $n
				fi
			fi
			start $n $CONMUX/sbin/conmux $i
			if [ "$?" -eq 0 ]; then
				pause=1
			fi
			started="$started $n"

			# Preserve the original configuration file.
			cp "$i" "$CONMUX/log/$n.cf"

			if grep -q TYPE:numaq "$i"; then
				autoboot="$autoboot $n"
			fi
			for i in `grep FLAGS: "$i"`; do
				case "$i" in
				\#|FLAGS:)	;;
				*)		autoboot="$autoboot $n/$i" ;;
				esac
			done
		fi
	done
	if [ "$pause" -eq 1 ]; then
		sleep 1
	fi
	for nh in $autoboot
	do
		name="${nh%/*}"
		helper="${nh#*/}"

		mn="${name#abat-}"
		start $name-$helper-helper $CONMUX/bin/conmux-attach $mn $helper-helper
		started="$started $name-$helper-helper"
	done
fi

if [ "$cmd" = "start" -o "$cmd" = "stop" ]; then
	for i in $existing
	do
		case " $started " in
		*\ $i\ *)	;;
		*)		stop "$i" ;;
		esac
	done
fi

if [ "$cmd" = "status" ]; then
	for n in $existing
	do
		mn="${n#abat-}"
		case "$n" in
		registry|*-helper)
			;;
		*)
			status=`console -s $mn`
			echo "$mn $status"
		esac
	done
fi
