#! /bin/bash -f
#set -x

PGM=tr_send_cleanup
USAGE="usage: $PGM <runid> <tok> [year]"
ERR="$PGM -E- "
INF="$PGM -I- "
# Check arguments
if [ $# -lt 2 ]; then
  echo $USAGE 1>&2
  exit 1
fi
if [ $# -eq 3 ]; then
  year=$3
fi

runid=`echo $1 |tr [a-z], [A-Z]`
tok=`echo $2 |tr [a-z], [A-Z]`

# if not a TRANSP Developer: set environment QSHARE
CLEANUP="/u/pshare/globus/transp_cleanup"
if [ -z "$TRANSP_DEVELOPER" ]; then
   if test -f /u/pshare/globus/.userrc; then
     . /u/pshare/globus/.userrc
   fi
fi

req="${runid}_${tok}.REQUEST"
if [ -f $QSHARE/$tok/$runid/$req ]; then
   rdir="$QSHARE/$tok/$runid"
else
   rdir="$RESULTDIR/$tok/$runid"
fi

if [ -n "$TRANSPGRID_SERVER" ]; then
  srvnam="$TRANSPGRID_SERVER"
else
  srvnam="transpgrid.pppl.gov"
fi
export HOST="$srvnam"  

QCP="/u/pshare/globus/cp2qshare"

# if run on PPPL cluster, don't need GLOBUS
# copy runid.REQUEST -> $QSHARE/<runid>.CLEANUP
domain=`hostname | tr [A-Z], [a-z] | sed s/.*\.pppl.gov/pppl.gov/`
if [ -f $QSHARE/${runid}_${tok}.truser ]; then
   gid=$QSHARE/${runid}_${tok}.truser
else
   gid=$QSHARE/${runid}_${tok}.globus
fi
# PPPL
if [ "$domain" = "pppl.gov" ]; then
# New run
   if [ -f "$CODESYSDIR/sbin/transp_cleanup" ]; then
     CLEANUP="$CODESYSDIR/sbin/transp_cleanup"
   fi
   if [ -f $rdir/$req -a -f $gid ]; then
# If PPPL Grid run, completed runs are owned by pshare
# active runs by grid user, tr_<user>
      if [ -f $QSHARE/${runid}_${tok}.success ]; then
         cd $rdir
	 $QCP $req ${runid}_${tok}.CLEANUP
         status=$?
	 cron=1
      else
#        do_globus=yes
         hup_log="$LOGDIR/cleanup/${runid}_${tok}_nuhup.log"
         echo "$INF run transp_cleanup $runid $tok >$hup_log"
#         nohup ssh tr_`whoami`@$HOST $CLEANUP $runid $tok 
         /bin/sh -c "nohup ssh tr_`whoami`@$HOST $CLEANUP $runid $tok >$hup_log 2>&1 &" 
         status=$?  
      fi
# Old archived run
   elif [ ! -f $rdir/$req -a ! -f $gid ]; then
      echo "$INF can not find $req file"
      echo "      neither in $QSHARE/$tok/$runid"
      echo "        nor   in $RESULTDIR/$tok/$runid"
      echo " "
      echo "Do you want to delete an archived run?"
      ask_yesno \
        "Verify request to cleanup run $tok ${runid}:"
      if [ $? = 1 ]; then
        if [ -z "$year" ]; then
           echo -n "You must specify year:"
           read year
        fi
        arc=$TRINF/$tok/$year/${runid}TR.OWNER
        if [ -f $arc ]; then
           req=${runid}_${tok}.CLEANUP
           echo "#OWNER = `whoami`" > $req
           echo "#TOK = $tok" >> $req
           echo "#YEAR = $year" >> $req
           echo "#TREE = TRANSP_${tok}" >> $req
           echo "#SERVER = transpgrid.pppl.gov" >> $req
           $QCP $req
           status=$?
        else
           echo "$INF can not find an archived run $runid $tok $year"
	   echo " --no $TRINF/$tok/$year/${runid}TR.OWNER"
           exit 1
        fi
      else
        ask_yesno \
          "Do you want to try globus?"
        if [ $? = 1 ]; then
          do_globus=yes
        else
          status=2
        fi
      fi
   else
      ask_yesno \
      "Do you want to try globus?"
      if [ $? = 1 ]; then
         do_globus=yes
      else
        status=2
      fi
   fi
else
   do_globus=yes   
fi

if [ -n "$do_globus" ]; then
    CLEANUP="/u/pshare/globus/transp_cleanup"
    echo "$INF using globus"
#   globusrun -o -r $HOST '&(executable='$CLEANUP') (arguments='$runid' '$tok')'
#    url=`globus-job-submit $HOST $CLEANUP "$runid" "$tok"`

# Check Globus proxy
    $GLOBUS_LOCATION/bin/grid-proxy-info -exists > /dev/null 2>&1
    status=$?
    if [ $status -ne 0 ] ; then
      echo "$ERR Globus not initialized and/or no valid grid proxy" 2>&1
      exit 1
    fi
    echo "globus-job-submit $HOST $CLEANUP $runid $tok"
    globus-job-submit $HOST $CLEANUP "$runid" "$tok"
    status=$?
    if [ $status -ne 0 ]; then
       echo "$ERR Error running $CLEANUP"
       exit 1
    fi
fi

if [ $status -eq 0 ]; then
   if [ -n "$do_globus" ]; then
      echo "$INF Job to cleanup $runid $tok $year was submitted"
   elif [ -n "$cron" ]; then
      echo "$INF Request to cleanup $runid $tok $year was queued"
   else
      echo "$INF $runid $tok $year was cleaned up."
   fi
elif [ $status -eq 2 ]; then
   echo "$INF No cleanup request was queued"
else
   echo "$ERR Failed to queue cleanup for $runid $tok $year"
fi

if [ -f ${runid}_${tok}.CLEANUP ]; then
   rm -f ${runid}_${tok}.CLEANUP
fi
exit $status

