#!/bin/bash

USAGE()
{
    echo " MonitorABT  -sd [-mid] [-cf]"
    echo " sd  ----   Directory where sfcb will be downloaded and built"
    echo " mid ----   Machine ID"
    echo " cf  ----   Configuration file"
    echo " Example :"
    echo " MonitorABT  -sd /opt/ABT [-mid xnl3107] [-cf /tmp/SFCB/sfcbABT.conf]"
    exit 1
}

scriptDir=""
confFile=""
machineID=""
zipFile="report.zip"
reportSummary="report.summary"
testCount=0
DATE=`date +%y%m%d_%R`
STATUS="SUCCESS"

selfUpdateDone="no"
params=$*
if [ $# -eq 0 ] ; then
   USAGE
else
   confFileStatus=0
   sdStatus=0
   
   for conf in  $*
   do
      case $conf in
          "-mid"|"-MID")
                machineID=$2
                shift 2
                ;;
          "-cf"|"-CF")
                confFile=$2
                shift 2
                confFileStatus=1
                if [ ! -f $confFile ] ; then
                    echo "No configuration file present in the location $confFile"
                    exit 1;
                else
                    chmod 755 $confFile
                fi
                ;;
           "-sd"|"-SD")
                sdStatus=1          
                scriptDir=$2
                shift 2
                if [ ! -d $scriptDir ]; then
                    echo " $scriptDir is not a directory"
                    USAGE
                fi  
                ;;
           #For internal use.
           "-ud")
                selfUpdateDone="yes"
                shift 1
                ;;
      esac
   done
fi

if [ $sdStatus -eq 0 ]; then
    echo "Provide ABT scripts Location"
    USAGE
fi

if [ $confFileStatus -eq 0 ] ; then
    echo "No configuration file: It will take default conf file"
    confFile=$scriptDir/sfcb.config
fi
source $confFile

if [ $selfUpdateDone == "no" ]; then
    cd $scriptDir
    rm -rf sfcb
    if $SFCBREPO_CMD 1>/dev/null 2>&1
    then
        RC=0
        cd -
        cp $scriptDir/sfcb/test/ABT/* $scriptDir
        cp $scriptDir/MonitorABT $0
        exec $0 -ud $params
        rm -rf $scriptDir/sfcb/
    else
        RC=1
        echo "ABT selfupdate failed"
        exit $RC
    fi
fi

if [ "$machineID" == "" ] ; then
    machineID=`hostname`
fi
RELEASE=`lsb_release -r -s`
IDISTRO=`lsb_release -i -s`

export DISTRO="$IDISTRO $RELEASE"
export MID=$machineID

#Check the config options

export SFCB_ROOT=$scriptDir/sfcbBuild
REPORT_DIR=$SFCB_ROOT/"report$DATE"

index=${#TESTCONFIG[@]}

i=0

if [ -d $SFCB_ROOT ]; then
    rm -rf $SFCB_ROOT
fi

# Set core file location
coresave=`cat /proc/sys/kernel/core_pattern`
mkdir -p /tmp/ABTcores
rm -f /tmp/ABTcores/*
echo "/tmp/ABTcores/core.%t.%e.%p.%s" > /proc/sys/kernel/core_pattern
ulimit -c unlimited

while [ $i -lt $index ]
do
     bash $scriptDir/ABTScript $SFCB_ROOT "${TESTNAME[$i]}" $REPORT_DIR  "${TESTCONFIG[$i]}"
     if [ $? -eq 0 ] ; then
         let testCount="$testCount + 1"
     fi
     let i="$i + 1"
done

# Restore core file location
echo $coresave > /proc/sys/kernel/core_pattern

if [ $testCount -eq $index ] ; then
    STATUS="SUCCESS"
else
    STATUS="FAILURE"
fi
let  failureNo="$index - $testCount"

# Posting reports to sourceforge.net

if [  $REMOTE_USER_ID ]; then
   if [ $REMOTE_HOST ]; then
      if [ $SFCB_REMOTE_DESTINATION ]; then
            ssh -nt $REMOTE_USER_ID,sblim@$REMOTE_HOST create
            scp -r $REPORT_DIR  $REMOTE_USER_ID@$REMOTE_HOST:$SFCB_REMOTE_DESTINATION
            if [ $? -eq 0 ] ; then
              echo "SCP Success"  >> $SFCB_ROOT/$reportSummary
            else 
              echo "SCP Failure"  >> $SFCB_ROOT/$reportSummary
            fi
      else
         echo "Provide Remote Destination"  >> $SFCB_ROOT/$reportSummary
      fi
   else
      echo "Provide Remote Machine IP/Host Name"  >> $SFCB_ROOT/$reportSummary
   fi
else
   echo "Provide Remote Machine User ID"  >> $SFCB_ROOT/$reportSummary
fi
echo "Reports available: http://sblim.sourceforge.net/NBAT/"  >> $SFCB_ROOT/$reportSummary

# Mail the report

zip -r $SFCB_ROOT/$zipFile $REPORT_DIR
mutt -s "SFCB NBT: $STATUS: $TESTSUITE: $MID: $DISTRO: $DATE: ($testCount OK,$failureNo FAIL)" $MAIL_IDS < $SFCB_ROOT/$reportSummary
