#! /bin/bash

MEGHA_HOME=/usr/local/megha
DATA_DIR=/data
OLD_BUILD_BACKUP=$DATA_DIR/backup
OLD_BUILD_DIR=
TEMP=/tmp
INSTALL_LOG=$DATA_DIR/install.log
MODE=`grep 'app.mode' $MEGHA_HOME/conf/app.properties | awk -F= '{print $2;}'`

echo "starting upgrade" > $INSTALL_LOG 
mkdir -p $DATA_DIR
mkdir -p $OLD_BUILD_BACKUP

#We will preserve only one setup of the backup. before proceding for backup we will delete old backups
rm -rf $OLD_BUILD_BACKUP/*

usage()
{
 echo "$0 [u] <b> buildfile"; 
 echo "usage : -u if upgrade is required, don't specify anything if want to install total clean system." 
 echo "        -b buildfilepath specify the builds path"
}

ensure_server_is_stopped()
{
 while :
 do
  
  if !(test -e $MEGHA_HOME/bin/megha-jetty.sh) then
        return 
  fi

  serverstatus=`$MEGHA_HOME/bin/megha-jetty.sh status | grep 'not running'`
  if  [ "$serverstatus" ] 
  then
	echo "megha server is stopped" >> $INSTALL_LOG 2>&1
	break
  else
	echo "megha server is not stopped" >> $INSTALL_LOG 2>&1
        sleep 10
  fi
  $MEGHA_HOME/bin/megha-jetty.sh stop >> /dev/null 2>&1
 done
}

clean_old_build()
{
 ensure_server_is_stopped

 if ! [ "$(ls -A $MEGHA_HOME)" ]; then
	return	
 fi

 # remove jetty cache files
 \rm -rf /tmp/jetty* >> $INSTALL_LOG 2>&1

 #take backup of total system.
 uniqdir=`date +%Y%m%d%H%M%S` >> $INSTALL_LOG 2>&1
 OLD_BUILD_DIR=$OLD_BUILD_BACKUP/$uniqdir  
 mkdir -p $OLD_BUILD_DIR >> $INSTALL_LOG 2>&1
 mv $MEGHA_HOME/jetty $OLD_BUILD_DIR >> $INSTALL_LOG 2>&1

 upgrade=$1
 
 if [ "$upgrade" == "no" ] 
 then
    # its fresh install 	 
    # remove all the data and move the old build to backup
    # only restore cron tab
    rm -rf $MEGHA_HOME/db >> $INSTALL_LOG 2>&1
	# remove backup of importStatus and  probeDataDownloadConfig* from /tmp
	rm -rf /tmp/importStatus.properties.old /tmp/probeDataDownloadConfig* >> $INSTALL_LOG 2>&1
    mv $MEGHA_HOME/*  $OLD_BUILD_DIR >> $INSTALL_LOG 2>&1
    mv $OLD_BUILD_DIR/cron.* $MEGHA_HOME >> $INSTALL_LOG 2>&1
    chmod +x $MEGHA_HOME/cron.* >> $INSTALL_LOG 2>&1
	
	#delete all the old data on internal ftp of megha server
	if [ "$MODE" == "server" ]
	then 
		sudo /bin/rm -rf /data/meghadata/* >> $INSTALL_LOG 2>&1
	fi	
	
 else
    mv $MEGHA_HOME/misc/probeDataDownloadConfig* $OLD_BUILD_DIR >> $INSTALL_LOG 2>&1
 fi 

}

function install_build()
{
 buildfile=$2 

 # first unzip to /usr/local/megha
 if [ "$upgrade" == "yes" ] 
 then
	unzip -o $MEGHA_HOME/misc/$buildfile -d $MEGHA_HOME >> $INSTALL_LOG 2>&1
 else 	 
	unzip -o $OLD_BUILD_DIR/misc/$buildfile -d $MEGHA_HOME >> $INSTALL_LOG 2>&1
 fi

 upgrade=$1
 if [ "$upgrade" == "yes" ] 
 then
    # restore configured downloader
    mv $OLD_BUILD_DIR/probeDataDownloadConfig* $MEGHA_HOME/misc >> $INSTALL_LOG 2>&1
 fi

 if [ "$MODE" == "server" -a -e $MEGHA_HOME/linux ]
 then
	dir=`pwd`
	cd /home/mars
	#keep backup of hosts.txt from /home/mars
	cp /home/mars/hosts.txt /tmp/hosts.txt >> $INSTALL_LOG 2>&1
	echo 'megha!234' | sudo -S /bin/rm -rf /home/mars/* >> $INSTALL_LOG 2>&1
	echo 'megha!234' | sudo -S /bin/cp -pf /usr/local/megha/linux/mars-on-linux-*.tar . >> $INSTALL_LOG 2>&1
	echo 'megha!234' | sudo -S /bin/tar xvf mars-on-linux-*.tar >> $INSTALL_LOG 2>&1
	echo 'megha!234' | sudo -S /bin/mv mars-on-linux-*/do.setup . >> $INSTALL_LOG 2>&1
	echo 'megha!234' | sudo -S /bin/sh do.setup >> $INSTALL_LOG 2>&1
	#restore hosts.txt.backup to /home/mars
	echo 'megha!234' | sudo -S /bin/mv -f /tmp/hosts.txt . >> $INSTALL_LOG 2>&1
	#change owner and group of hosts.txt file to mars
	echo 'megha!234' | sudo -S /bin/chown mars /home/mars/hosts.txt >> $INSTALL_LOG 2>&1
	echo 'megha!234' | sudo -S /bin/chgrp mars /home/mars/hosts.txt >> $INSTALL_LOG 2>&1
	cd $dir
 fi	
 
}


upgrade=no
buildfile=""

while  getopts hub: flag 
do
    case "$flag" in
    ( h )
	     usage
	     exit 0
	     ;;

    ( u )   
	    upgrade=yes
	    ;;

    ( b )   
	    buildfile="$OPTARG" 
	    ;;

    ( \? )  
	    echo "invalid option" 
	    usage
	    exit 1
	    ;;		
    esac
done

if ! [ "$buildfile" ] 
then
	echo "build file missing" 
	usage
	exit 0
fi 

clean_old_build "$upgrade"

install_build "$upgrade" "$buildfile"
