#!/bin/bash

if [ "$1" == "--help" ]; then
  echo "======================================================="
  echo ""
  echo "  snacct - a script that retrieves accounting "
  echo "  information for a given node going as far back       "
  echo "  as start date.                                       "
  echo ""
  echo "  Usage:  snacct [node] [start_date] [--end]  "
  echo ""
  echo "  Note: start_date should be in MMDDYY format.         "
  echo ""
  echo " Defaults:                                             "
  echo "    Todays date if no start date is given.             "
  echo "    Job start times will be retrieved by default       "
  echo "    unless the optional --end argument is provided.    "
  echo ""
  echo "======================================================="

  exit
fi

# extract optional --end arg
bEnd=`echo "$@" | grep '\--end' | wc -l`
ARGS=( `echo "$@" | sed 's/--end//g'` )

# extract node
idx=0
for i in ${ARGS[*]}; do
  if [ "`ping -i 0.2 $i -c 1 2>/dev/null | wc -l`" != "0" ]; then
    node=$i
    ARGS[$idx]="_delete_me_"
    ARGS=( `echo ${ARGS[*]} | sed 's/_delete_me_//g'` )
    break
  fi
  idx=`expr $idx + 1`
done

if [ "$node" == "" ]; then
  echo "You must specify a node!"
  exit
fi

if ! getent hosts $node >/dev/null 2>&1; then
  echo "Invalid node name ($node)!"
  exit
fi

mdy=${ARGS[0]}
if [ "$mdy" == "" ]; then
  mdy=`date +%m%d%y`
else
  mm=${mdy:0:2}
  dd=${mdy:2:2}
  yy=${mdy:4:4}
  bDate=`date -d $mm/$dd/$yy 2>/dev/null | wc -l`
  if [ "$bDate" == "1" ]; then
    ARGS[0]="_delete_me_"
    ARGS=( `echo ${ARGS[*]} | sed 's/_delete_me_//g'` )
  else
    mdy=`date +%m%d%y`
  fi
fi

#echo "Node = $node"
#echo "Start Date = $mdy"
#echo "ARGS = ${ARGS[*]}"

# basic accounting information
if [ "$bEnd" != "1" ]; then
echo "JobID        User      Partition       NNodes NCPUS  Start               Elapsed      State      Priority   "
echo "------------ --------- --------------- ------ ------ ------------------- ------------ ---------- -----------"
sacct --starttime=$mdy --node=$node ${ARGS[*]} --format=jobid%-12,user%-9,partition%-15,nnodes%-6,ncpus%-6,start%-19,elapsed%-12,state%-10,priority%-11 -X -n
else
echo "JobID        User      Partition       NNodes NCPUS  End                 Elapsed      State      Priority   "
echo "------------ --------- --------------- ------ ------ ------------------- ------------ ---------- -----------"
sacct --starttime=$mdy --node=$node ${ARGS[*]} --format=jobid%-12,user%-9,partition%-15,nnodes%-6,ncpus%-6,end%-19,elapsed%-12,state%-10,priority%-11 -X -n
fi


