#!/bin/bash
# RemoteBatchPEGASUS:makeSerialTemplate
# SubmissionScripts/Distributor/Batch/PEGASUS/serial
#
exitStatus=0

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

cat > @@{INSTANCEDIRECTORY}/work/pegasusSetup.sh << EOF
. @@{USESETUP}
use -e -r pegasus-@@{PEGASUSVERSION}
EOF
. @@{INSTANCEDIRECTORY}/work/pegasusSetup.sh

@@{SUBMISSIONSCRIPTCOMMANDS}

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

export LANG=en_US.UTF-8

gunzip @@{JOBID}_@@{INSTANCEID}_input.tar.gz
tar xf @@{JOBID}_@@{INSTANCEID}_input.tar transformations.yml
if [ -f transformations.yml ] ; then
   python3 << EOF
import yaml
with open('transformations.yml','r') as fp:
   user = yaml.load(fp,Loader=yaml.CSafeLoader)
with open("@@{JOBID}_@@{INSTANCEID}_tc.yml",'r') as fp:
   hub = yaml.load(fp,Loader=yaml.CSafeLoader)

hub['transformations'] += user['transformations']
if 'containers' in user:
   hub['containers'] = user['containers']

with open("@@{JOBID}_@@{INSTANCEID}_tc.yml",'w') as fp:
   yaml.dump(hub,fp)
EOF
   rm -f transformations.yml
fi
gzip @@{JOBID}_@@{INSTANCEID}_input.tar

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

@@{PREMANAGERCOMMANDS}
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}_@@{INSTANCEID}.pegasusrc \
                               --sites local,@@{GRIDSITE} \
                               --dir @@{SCRATCHDIRECTORY} \
                               --relative-dir scratch \
                               --relative-submit-dir work \
                               --output-site local \
                               @@{ARGUMENTS} --submit \
                               @@{DAX} < /dev/null
   exitStatus=$?
else
   { time -p @@{EXECUTABLE} --conf @@{INSTANCEDIRECTORY}/@@{JOBID}_@@{INSTANCEID}.pegasusrc \
                            --sites local,@@{GRIDSITE} \
                            --dir @@{SCRATCHDIRECTORY} \
                            --relative-dir scratch \
                            --relative-submit-dir work \
                            --output-site local \
                            @@{ARGUMENTS} --submit \
                            @@{DAX} < /dev/null ; } \
                 > @@{TIME_RESULTS} 2>&1
   exitStatus=$?
   echo "Command exited with status ${exitStatus}" >> @@{TIME_RESULTS}
fi

if [ ${exitStatus} -eq 0 ] ; then
   dagmanPath=$(which pegasus-dagman)
   clusterId=$(condor_q -constraint "Iwd=?=\"@@{SCRATCHDIRECTORY}/work\"" \
                        -constraint "Cmd=?=\"${dagmanPath}\"" -autoformat ClusterId)
   if [ -n "${clusterId}" ] ; then
      echo "cluster ${clusterId}"
   fi
fi
@@{POSTMANAGERCOMMANDS}

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

exit ${exitStatus}
