#!/bin/sh
# /etc/init.d/softwarelauncher
#
### BEGIN INIT INFO
# Provides:          softwarelauncher
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: softwarelauncher
# Description:       softwarelauncher daemon
### END INIT INFO

DAEMON=/usr/bin/raven/softwarelauncher
DAEMONOPTS=
NAME=softwarelauncher
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
LIBDIR=/usr/bin/raven/fishspear/

test -x $DAEMON || exit 0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR
 
export DISPLAY=:0.0

VerifyDatabaseVersion ()
{
	if [ -f /usr/bin/raven/databases/my.db.sqlite ]; then
		if [ -f /usr/bin/raven/databases/dbversion ]; then
			set +e 
			OLDVERSION=`/usr/bin/sqlite3 /usr/bin/raven/databases/my.db.sqlite " select version from tableVersion where tableName='mainSqlDb'"`
			
            if [ $? -ne 0 ]; then
                OLDVERSION=9999      #database is invalid, flag it to be rotated
            fi
            
            NEWVERSION=`cat /usr/bin/raven/databases/dbversion | xargs`
			
			
			if [ ${NEWVERSION} -lt  ${OLDVERSION} ]; then
				#archive old db and jobs
				BACKUP=`/bin/date +"%Y-%m-%d"`
				BACKUP="${BACKUP}-${RANDOM}"
				mkdir -p /usr/bin/raven/archive/${BACKUP}
				mv /usr/bin/raven/databases/my.db.sqlite /usr/bin/raven/archive/${BACKUP}/my.db.sqlite
				mv /usr/bin/raven/userFiles /usr/bin/raven/archive/${BACKUP}
                mkdir -p /usr/bin/raven/userFiles
				
				#copy default
				cp /usr/bin/raven/databases/default.db.sqlite /usr/bin/raven/databases/my.db.sqlite
				
				#restore registration table if the old table did not have an sql error
                if [ ${OLDVERSION} -ne 9999 ]; then
                    sqlite3  /usr/bin/raven/databases/my.db.sqlite "attach database '/usr/bin/raven/archive/${BACKUP}/my.db.sqlite' as old; CREATE TABLE registrationInfo AS SELECT * FROM old.registrationInfo"
                fi
			fi
			
			if [ -f /usr/bin/raven/databases/dbmigrate ]; then
				logger "DatabaseMigrator from $OLDVERSION to $NEWVERSION"
				/usr/bin/raven/databasemigrator $NEWVERSION
				rm -f /usr/bin/raven/databases/dbmigrate
			fi
			
		fi
	fi
}

case "$1" in
  start)
    echo -n "Starting app: $NAME  "
	
	VerifyDatabaseVersion
	
    [ -d /var/run/jetstream ] || mkdir -p /var/run/softwarelauncher
	cd /usr/bin/raven
    start-stop-daemon --start -m --pidfile /var/run/jetstream/softwarelauncher.pid --exec $DAEMON -- $DAEMONOPTS
    echo "."
    ;;
  stop)
    echo -n "Stopping app: $NAME  "
    start-stop-daemon --stop --pidfile /var/run/jetstream/softwarelauncher.pid --oknodo --exec $DAEMON -- $DAEMONOPTS
    rm -f /var/run/jetstream/softwarelauncher.pid
    echo "."
    ;;
  restart)
    echo -n "Restarting app: $NAME  "
	
	set +e #enable error checking incase process wasn't running
	
    start-stop-daemon --stop --pidfile /var/run/jetstream/jetstream.pid -q --exec $DAEMON

	if [ "$?" = "1" ]; then
		sleep 1 #if process wasn't running give it one second to see if it comes up (incase this script gets called twice really fast) and try again
		start-stop-daemon --stop --pidfile /var/run/jetstream/softwarelauncher.pid --oknodo --exec $DAEMON
	fi
	set -e
    rm -f /var/run/jetstream/softwarelauncher.pid
    start-stop-daemon --start --background -m --pidfile /var/run/jetstream/softwarelauncher.pid --exec $DAEMON -- $DAEMONOPTS
    echo "."
    ;; 
  debug)
    echo "Debug Start: $NAME "
    $DAEMON
    echo "."
    ;;
  debug-log)
    echo "$NAME Run /w Logging to /home/root/softwarelauncher.run.log"
	mkdir -p /home/root/
    $DAEMON &> /home/root/softwarelauncher.run.log
    echo "."
    ;;
   strace-log)
    echo "$NAME strace /w Logging to /home/root/softwarelaucher.strace.log"
	mkdir -p /home/root/
    strace $DAEMON &> /home/root/softwarelauncher.strace.log
    echo "."
    ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|debug|debug-log|strace-log}"
    exit 1
    ;;
esac

exit 0