#!/usr/bin/ksh

#------------------------------------------------------------
#SUN grid engine architecture
#This file does some error checking
#syntax: grid_engine_client lastscript 
#------------------------------------------------------------

#-----------------------------------------------
# set some defaults
#-----------------------------------------------
#--------------------------------
#set environment variables
#--------------------------------
. $WFU_PATH/global.site.ksh
#DEBUG=1
username=`whoami`
processid=`echo $$`
let sleeptime=polltime+20 
localhost=`hostname`
lastscript=$1
lastline=`echo $script_path/lastline`
getline=`echo $script_path/getline`
error_recovery=`echo $script_path/error_recovery`
#---------------------------------------------------
#extract the scriptname and pathname from the script
#construct the batchlog and batchque filenames
#---------------------------------------------------
batchdir=`dirname $lastscript`
scriptname=`basename $lastscript`
batchlog=$batchdir/batch_log
batchque=$batchdir/batch_que

if test $DEBUG -eq 1 
	then echo entered grid_engine_client on $localhost with $lastscript >>$batchlog
fi



#----------------------------------
#remove any previous running files
#drop in the cpufinder_alive file
#---------------------------------
k=`rm $batchdir/running*`


#--------------------------------------
#Get the current system time
#-------------------------------------
current_time=`$script_path/systime`


#----------------------------
#get a current timestamp
#----------------------------
cdate=`date`
if test $rsh_flag -gt 0
	then cdate=`rsh $timekeeper date`
	current_time=`rsh $timekeeper $script_path/systime`
fi
db=`echo ' | ' `


#---------------------------------
#read the next script from the que
#---------------------------------
next_script=`$getline $batchque 1`


#------------------------------------------
#check if the last script didn't complete
#------------------------------------------
len=${#next_script}
if test $len -gt 0
	then job_done=0
	if test $lastscript = $next_script
		then message1=`echo $lastscript$db TERMINATED on $db$db$cdate$db$db$current_time`
		rm $batchdir/spmbatchlicense*
		message2=`echo 'ERROR THIS SCRIPT NEVER COMPLETED' `
		echo $batchdir
		echo $message1 >> $batchlog
		echo ------------------------------------------------ >> $batchlog
		echo $current_time>>$batchlog
		echo $message2 >> $batchlog
		echo ------------------------------------------------ >> $batchlog
		#echo $script_path/mail_script $batchdir $rsh_flag ERROR
		k=`rm $cpufinderfile`
		error_recovery_flag=`$error_recovery $batchdir`
		ERROR_STRING=`echo ERROR_SGE`
		if test $error_recovery_flag -eq 1
			then echo 'Error Recovery In Effect' >> $batchlog
			cd $batchdir
			startup=`$script_path/quick_start $batchdir error_recovery=$error_recovery_flag`
			exit
		fi
		encoded_mailfile=`uumail $batchdir`
		$script_path/mail_script $batchdir $rsh_flag $ERROR_STRING $encoded_mailfile
		exit
	fi
fi

#----------------------------------------------
#timestamp the batch_log with a completed script
#----------------------------------------------
message1=`echo $lastscript$db completed on $db$localhost$db$cdate$db$db$current_time`
echo $message1 >> $batchlog

if test $DEBUG -eq 1 
	then echo timstamped grid_engine_client  >>$batchlog
fi

#-----------------------------------------
#check if all scripts have been completed
#-----------------------------------------
len=${#next_script}
job_done=0
if test $len -eq 0
	then job_done=1
	rm $batchdir/spmbatchlicense*
     	message1=$db$db$db$cdate$db$db$current_time
	message2=`echo 'This script is done   ' `
	echo $message1 >> $batchlog
	echo ---------------------------- >> $batchlog
	echo $message2 >> $batchlog
	k=`rm $cpufinderfile`
	encoded_mailfile=`uumail $batchdir`
	er_flag=`ls $batchdir/error_recovery* 2>/dev/null`
	er_len=${#er_flag}
	completion_string=`echo COMPLETED_with_SGE`
	if test $er_len -gt 0
		then completion_string=`echo COMPLETED_WITH_T3_ERROR_RECOVERY_SGE`
	fi
	$script_path/mail_script $batchdir $rsh_flag $completion_string $encoded_mailfile
	exit
fi


#--------------------------------------------
#Figure out what kind of licenses are required
#--------------------------------------------
matlabflag=`grep matlabx $next_script`
idlflag=`grep idlx $next_script`
matlabflag=${#matlabflag}
idlflag=${#idlflag}
licensetype=unix
if test $idlflag -gt 0
	then licensetype=idl
fi
if test $matlabflag -gt 0
	then licensetype=matlab
fi

#--------------------------------------------------------
#Check if we need special resources from grid engine
#For now this means a long process with lots of memory
#--------------------------------------------------------
scomputer_resource='0'
supercomputer_flag=`grep supercomputer $next_script`
if test ${#supercomputer_flag} -gt 0
	then scomputer_resource=`echo supercomputer`
	echo resource $scomputer_resource >> $batchlog
fi

qrequest='0'
qflag=`grep qrequest= $next_script`
if test ${#qflag} -gt 0
	then qrequest=$qflag
	echo client $qrequest >> $batchlog
fi


resource_request1='0'
resource1_flag=`grep resource_request1 $next_script`
if test ${#resource1_flag} -gt 0
	then resource_request1=$resource1_flag
	echo client $resource_request1 >> $batchlog
fi


resource_request2='0'
resource2_flag=`grep resource_request2 $next_script`
if test ${#resource2_flag} -gt 0
	then resource_request2=$resource2_flag
	echo client $resource_request2 >> $batchlog
fi

resource_request3='0'
resource3_flag=`grep resource_request3 $next_script`
if test ${#resource3_flag} -gt 0
	then resource_request3=$resource3_flag
	echo client $resource_request3 >> $batchlog
fi


cd $batchdir
k=`rm cpu_found*`
next_host=`hostname`
message1=`echo $next_script$db sent to $db grid_engine $db$cdate$db$db$current_time`
echo $message1 >> $batchlog
if test $DEBUG -eq 1 
	then echo grid_engine_client launch  >>$batchlog

fi
priority=`cat $batchdir/priority 2>/dev/null`
if [[ ${#priority} -eq 0 ]]; then
  if [[ ${#grid_engine_default_priority} -gt 0 ]]; then
 		priority=$grid_engine_default_priority
  else
  	priority=0
	fi
fi
#-----------------------------------------------------------------------------------
#	GRID ENGINE LAUNCH COMMAND GOES HERE
#-----------------------------------------------------------------------------------
launch_qsub $next_script $licensetype $batchlog $priority $scomputer_resource $qrequest $resource_request1 $resource_request2 $resource_request3
k=`rm $cpufinderfile`
#### qstat -j 288 >> $batchlog
exit


