#!/bin/bash
# LocalWorkflowPEGASUS:makeWorkflowTemplate
# SubmissionScripts/Client/Workflow/PEGASUS/plan
#
trap cleanup HUP INT QUIT ABRT TERM

cleanup()
{
   echo "Abnormal termination by signal"
   pegasusRunPID=$(pgrep -f pegasus-run)
   if [ -n "${pegasusRunPID}" ] ; then
      for pid in $(pstree -pn ${pegasusRunPID} | grep -o "([[:digit:]]*)" | grep -o "[[:digit:]]*" | grep -v ${pegasusRunPID}) ; do
         kill -0 ${pid} 2> /dev/null && {
            kill -TERM ${pid}
         }
      done
   fi
}

exitStatus=0

mkdir -p @@{INSTANCEDIRECTORY}/work
mkdir -p @@{SCRATCHDIRECTORY}/work

. @@{USESETUP}
use -e -r pegasus-@@{PEGASUSVERSION}

export JAVA_HEAPMAX=512

condorConfigVal=$(which condor_config_val 2> /dev/null)
if [ -z "${condorConfigVal}" ] ; then
   mkdir @@{SCRATCHDIRECTORY}/fakeCondor
   cat > @@{SCRATCHDIRECTORY}/fakeCondor/condor_config_val << EOF
#!/bin/sh

exit 1
EOF
   chmod u+x @@{SCRATCHDIRECTORY}/fakeCondor/condor_config_val
   export PATH=${PATH}:@@{SCRATCHDIRECTORY}/fakeCondor
fi

#Discarded Arguments      = @@{DISCARDED}
#Not Recognized Arguments = @@{NOTRECOGNIZED}

export LANG=en_US.UTF-8

date +"%s" > @@{TS_START}

TIMEPATH=
if [ -n "@@{TIMEPATHS}" ] ; then
   for timePath in @@{TIMEPATHS} ; do
      if [ -x ${timePath} ] ; then
         TIMEPATH=${timePath}
         break
      fi
   done
fi

if [ -n "${TIMEPATH}" ] ; then
   ${TIMEPATH} --format "Command exited with status %x\nreal %e\nuser %U\nsys %S" -o @@{TIME_RESULTS} \
                @@{EXECUTABLE} --conf @@{INSTANCEDIRECTORY}/@@{JOBID}.pegasusrc \
                               --sites local \
                               --dir @@{SCRATCHDIRECTORY} \
                               --relative-dir scratch \
                               --relative-submit-dir work \
                               --output-site local \
                               --quiet \
                               @@{ARGUMENTS} --submit \
                               @@{DAX} < /dev/null 2> @@{INSTANCEDIRECTORY}/@@{RUNNAME}.stderr &
   wait %1
   exitStatus=$?
else
   { time -p @@{EXECUTABLE} --conf @@{INSTANCEDIRECTORY}/@@{JOBID}.pegasusrc \
                            --sites local \
                            --dir @@{SCRATCHDIRECTORY} \
                            --relative-dir scratch \
                            --relative-submit-dir work \
                            --output-site local \
                            --quiet \
                            @@{ARGUMENTS} --submit \
                            @@{DAX} < /dev/null 2> @@{INSTANCEDIRECTORY}/@@{RUNNAME}.stderr & } \
                 > @@{TIME_RESULTS} 2>&1
   wait %1
   exitStatus=$?
   echo "Command exited with status ${exitStatus}" >> @@{TIME_RESULTS}
fi

date +"%s" > @@{TS_FINISH}

rm -rf @@{SCRATCHDIRECTORY}/${USER}
rm -rf @@{SCRATCHDIRECTORY}/fakeCondor

exit ${exitStatus}
