#!/bin/bash

######################################################################################
#parse command line arguments
until [ -z "$1" ]
do
  CURARG=$1
  case "$CURARG" in
    "--dont-run")        GNC_DONT_RUN="true"  ;;
    "--background")        MYBACKGROUND="true"  ;;
    "--from="* )        MYFROM=${CURARG#*=} ;;
    "--from"   ) shift; MYFROM=$1 ;;
  esac
  shift
done
#handle undefined variables
if [ -z "$MYBACKGROUND" ] ; then MYBACKGROUND="" ; fi
if [ -z "$MYFROM" ] ; then MYFROM=shell ; fi
#for booleans, undefined or "" is the only boolean false, test using: if [ $MYFLAG ]
######################################################################################

. /usr/share/groovix/global.conf


#get true return code, not of the tee 
# but worried this will affect some gncs too, use PIPESTATUS below instead
#set -o pipefail

#MYFROM = what this was run from, i.e. startup|shutdown|ssh|shell|cmon|builder|configuration-editor|cron , etc.

#make sure /tmp is mounted exec - lots of packages depend on /tmp to exec stuff
mount -o remount,exec /tmp

export GNC_DONT_RUN

#keep last logs in case of problem before gnc.log can be written out
mv /var/log/groovix/net-control/gnc.4 /var/log/groovix/net-control/gnc.log.5 2>/dev/null
mv /var/log/groovix/net-control/gnc.3 /var/log/groovix/net-control/gnc.log.4 2>/dev/null
mv /var/log/groovix/net-control/gnc.2 /var/log/groovix/net-control/gnc.log.3 2>/dev/null
mv /var/log/groovix/net-control/gnc.1 /var/log/groovix/net-control/gnc.log.2 2>/dev/null
mv /var/log/groovix/net-control/gnc.log /var/log/groovix/net-control/gnc.log.1 2>/dev/null

if [ $MYBACKGROUND ] ; then
	export GNC_BACKGROUND=$MYBACKGROUND
	gnc $MYFROM > /var/log/groovix/net-control/gnc.log.`date +%Y-%m-%d-%H-%M-%S`.$MYFROM.background 2>&1 &
else
	gnc $MYFROM 2>&1 | tee /var/log/groovix/net-control/gnc.log 

	echo | tee -a /var/log/groovix/net-control/gnc.log
	echo "GNC summary:" | tee -a /var/log/groovix/net-control/gnc.log
	grep "GNC RUNNING" /var/log/groovix/net-control/gnc.log | sed 's/GNC RUNNING/GNC RAN/' | tee -a /var/log/groovix/net-control/gnc.log
	if [ ${PIPESTATUS[0]} -ne 0 ] ; then
		echo "no GNCs ran"| tee -a /var/log/groovix/net-control/gnc.log
	fi
	echo

	echo | tee -a /var/log/groovix/net-control/gnc.log
	echo "GNC error summary:" | tee -a /var/log/groovix/net-control/gnc.log
	grep "GNC ERROR" /var/log/groovix/net-control/gnc.log | tee -a /var/log/groovix/net-control/gnc.log
	if [ ${PIPESTATUS[0]} -ne 0 ] ; then
		echo "no GNC errors"| tee -a /var/log/groovix/net-control/gnc.log
	fi
	echo

	cp /var/log/groovix/net-control/gnc.log /var/log/groovix/net-control/gnc.log.`date +%Y-%m-%d-%H-%M-%S`.$MYFROM
fi


#lock it back down
if [ "$GX_USER_NOEXEC" = "true" ] ; then
	mount -o remount,noexec /tmp
fi


if [ -f /var/lib/groovix/net-control/reboot ] ; then
        rm -f /var/lib/groovix/net-control/reboot

	# if gnc asked for a reboot this isn't a quick restart, so run again on startup
	touch /var/lib/groovix/net-control/force-on-startup

        echo
        echo
	echo "#####################################################"
        echo "groovix-net-control has triggered a reboot"
	echo "#####################################################"
        echo
        echo
        sleep 5
	echo "rebooting ..."
	echo
	shutdown -r now
	# avoid anything else from happenning while reboot procedure begins
	sleep 600

fi

echo "log is at /var/log/groovix/net-control/gnc.log"

true
