#!/bin/bash
#---------------------------------------------------------------------
# Change following according to your environment
#---------------------------------------------------------------------
if [ "$BUILD_NODE" != "SVACE" ] && [ "$BUILD_NODE" != "SVACE_CP" ]
then
# 1) SVACE installation folder
_SVACE_HOME=/media/yongji/d/workspace/HDCP/DPKM/TOOL/svace/svace-analyzer-2.3-20161225-x64-linux

# 2) Directory where build takes place
_BUILD_PATH=/media/yongji/d/workspace/HDCP/DPKM/Source/Overseas/MLDAP/mldapchecker

# 3) Build command
_BUILD_CMD="/media/yongji/d/workspace/HDCP/DPKM/Source/Overseas/MLDAP/mldapchecker/build.sh"

# 4) Set Proxy server IP, if using Proxy server in Overseas R&D centre
_PROXY_IP="10.252.250.111"
fi

#export PATH=/usr/lib/jvm/jdk1.7.0_51/bin:$PATH
#===========================================================
# * DO NOT CHANGE FOLLOWING *
#===========================================================
# 5) Log Level
_LOG_LEVEL=1
# 6) Product name
_PRODUCT=mldapchecker

# 7) Language
_LANG=CXX

# 8) Fast Analysis
_FAST=false

# 9) Metrics option
_METRICS_OPTION=false

_PRODUCT=$_PRODUCT"_"$_LANG
#----------------------------------------------------------- 

# Reset proxy ip if not set
_PROXY_IP=${_PROXY_IP:-"10.252.250.111"}

# Svace main version
_SVACE_MAIN_VERSION=2.3.0

# Intermediate Directory
if [ "$BUILD_NODE" != "SVACE" ] && [ "$BUILD_NODE" != "SVACE_CP" ]
then
	_SVACE_BUILD_HOME=$_SVACE_HOME
fi

# Version File
_VERSION_FILE=$_SVACE_HOME/scripts/config.inc.sh
#FTP
_FTP=$_SVACE_HOME/bin/ncftpput

_PRD_URL="http://$_PROXY_IP/jenkins/job/ANALYZE_JOB"
_START_URL="$_PRD_URL/buildWithParameters?token=Start&_PRODUCT=$_PRODUCT&_LANGUAGE=$_LANG&_FAST=$_FAST&_VER=$_SVACE_MAIN_VERSION&_METRICS=$_METRICS_OPTION"

_ARCHIVER=tar
_ARCH_EXT=tar.lzo
lzop -h &> /dev/null
if [ $? != 0 ]
then
   _ARCHIVER=$_SVACE_HOME/bin/7za
   _ARCH_EXT=7z
fi

_OUTPUT=$_SVACE_BUILD_HOME/$_PRODUCT.$_ARCH_EXT
_SVACE_VERSION_FILE=svace-dir.version


version_up_notice()
{
	echo ---------------------------------------------------------------------
	echo "Fail to Build, Check Last Step [$_STEP]"
	echo "Svace was upgraded to $_SVACE_MAIN_VERSION version."
	echo "Please install new version of Svace."
	echo "Download : http://$_PROXY_IP/svace/downloads"
	echo ---------------------------------------------------------------------
	popd > /dev/null

	exit 2
}


msg_error()
{
	echo ---------------------------------------------------------------------
	echo "Fail to Build, Check Last Step. [$_STEP]"
	echo "You can ask support by following website [Svace Portal Support]." 
	echo "Please visit Svace Portal and check QnA first [http://$_PROXY_IP/portal/issues]."
	echo ---------------------------------------------------------------------
	popd > /dev/null
	
	exit 2
}


error_check()
{
    if [ $? != 0 ]
    then
       msg_error
    fi
}

pushd . > /dev/null

# ---------------------------------------------
echo Step1 :  Check Environment
# ---------------------------------------------
_STEP=CHECK-SVACE_HOME
if ! [ -d $_SVACE_HOME ]
then
	msg_error
fi

_STEP=CHECK-ARCHIVER
if [ "$_ARCH_EXT" == "7z" ]
then
	if ! [ -f $_ARCHIVER ]
	then
		msg_error
	fi
fi

_STEP=CHECK-FTP
if ! [ -f $_FTP ]
then
	msg_error
fi

_BMETRICS=""
if [ "$_METRICS_OPTION" == 'true' ]
then
    _BMETRICS="--metrics"
fi

# ---------------------------------------------
# Check Version:
# ---------------------------------------------
_STEP=CHECK-VERSION
if [ -f $_VERSION_FILE ]
then
	source $_VERSION_FILE
fi
if [ "$svace_version" != "$_SVACE_MAIN_VERSION" ]
then
	version_up_notice
fi



build()
{
	# ---------------------------------------------------------------------
	echo Step2 : Svace Build - Make Intermediate result
	# ---------------------------------------------------------------------
	_STEP=SVACE-BUILD
	
	if [ "$1" != "inc" ]
	then
		# ---------------------------------------------------------------------
		echo Delete old intermediate result
		# ---------------------------------------------------------------------
		cd $_SVACE_BUILD_HOME
		rm -rf $_PRODUCT
	fi

	# Report start of build
	JOB_ID=$(wget -qO- "http://$_PROXY_IP/svace/add_analysis_history/?prod_name=$_PRODUCT&update_type=build_start")

	echo step 2-1: svace init: $_SVACE_HOME/bin/svace init --bare $_SVACE_BUILD_HOME/$_PRODUCT
	$_SVACE_HOME/bin/svace init --bare $_SVACE_BUILD_HOME/$_PRODUCT

	error_check

	if ! [ -d $_SVACE_BUILD_HOME/$_PRODUCT ]
	then
		msg_error
	fi
	JACK_OPTION=" --enable-jack-interception "
    echo $_SVACE_MAIN_VERSION | grep -q "2.1"
    if [  $? == 0 ]
    then
        JACK_OPTION=""
    fi

	cd $_BUILD_PATH
	echo step 2-2: svace build: $_SVACE_HOME/bin/svace build  $JACK_OPTION $_BMETRICS --mem 2048 --verbose --svace-dir $_SVACE_BUILD_HOME/$_PRODUCT $_BUILD_CMD
	$_SVACE_HOME/bin/svace build $JACK_OPTION $_BMETRICS --mem 2048 --verbose --svace-dir $_SVACE_BUILD_HOME/$_PRODUCT $_BUILD_CMD
	error_check

	# Report end of build
	if [ "$JOB_ID" -gt 0 ]
	then
	    JOB_ID=$(wget -qO- "http://$_PROXY_IP/svace/add_analysis_history/?prod_name=$_PRODUCT&update_type=build_end&job_id=$JOB_ID")
	 fi
	

	echo Svace Build Complete - prepare to analyze.
}

archiving()
{
	# ---------------------------------------------------------------------
	echo Step3 : Archiving
	# ---------------------------------------------------------------------	
	_STEP=ARCHIVING

	if [ -f $_OUTPUT ]
	then
		rm -rf $_OUTPUT
	fi
	
	cd $_SVACE_BUILD_HOME

	if [ "$_ARCH_EXT" == "7z" ]
	then
		echo $_SVACE_HOME/bin/7za -mx0 a -t7z $_OUTPUT $_PRODUCT
		$_SVACE_HOME/bin/7za -mx0 a -t7z $_OUTPUT $_PRODUCT > /dev/null
		error_check

		echo Checking $_OUTPUT
		$_SVACE_HOME/bin/7za t $_OUTPUT > /dev/null
		error_check
	else
		tar --use-compress-program=lzop -cf $_OUTPUT $_PRODUCT
	fi
	
	echo Archive file was created.
}

transfer()
{
	# ---------------------------------------------------------------------
	echo Step4 : FTP Transfer
	# ---------------------------------------------------------------------
	_STEP=Transfer
	
	$_FTP -u svace_upload_user -p svaceup -V $_PROXY_IP $_PRODUCT $_OUTPUT
	error_check
	echo $_ARCH_EXT > $_SVACE_BUILD_HOME/arch.ext
	$_FTP -u svace_upload_user -p svaceup -V $_PROXY_IP $_PRODUCT $_SVACE_BUILD_HOME/arch.ext
	error_check
	
	echo Transfer complete.
}

build_complete()
{
    if [ "$JOB_ID" -gt 0 ]
	then
	    _START_URL="$_START_URL&_JOB_ID=$JOB_ID"
	fi

	wget --no-proxy -q --spider $_START_URL > /dev/null
	
	echo ---------------------------------------------------------------------
	echo "Success to Svace Build !!!" 
	echo "You can check the progress by following website."
	echo $_PRD_URL
	echo Internal Job tracking id is "$JOB_ID"
	echo ---------------------------------------------------------------------
	
	popd > /dev/null
}

if [ "$1" == "arch" ]
then
	archiving
	transfer
	build_complete
elif [ "$1" == "transfer" ]
then
	transfer
	build_complete
elif [ "$1" == "replay" ]
then 
	parallel_replay
	archiving
	transfer
	build_complete
else
	build $1
	archiving
	transfer
	build_complete
fi

exit 0

