#!/bin/bash
# LocalWorkflowPARALLEL:makeWorkflowTemplate
# SubmissionScripts/Client/Workflow/PARALLEL/make
#
trap cleanup HUP INT QUIT ABRT TERM

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

exitStatus=0

cd @@{INSTANCEDIRECTORY}

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} @@{ARGUMENTS}  < /dev/null \
                                   2> @@{INSTANCEDIRECTORY}/@@{RUNNAME}.stderr &
   wait %1
   exitStatus=$?
else
   { time -p @@{EXECUTABLE} @@{ARGUMENTS}  < /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}

exit ${exitStatus}
