#!/bin/bash
# This is the script to start and stop the sar profiler.
#
# reqparam value start|stop|report|postprocess|install Which action you'd like to perform
# reqparam value Collection interval for sar
# optparam value Suffix - an optional string to append to the name of the log file 
#

. /etc/autobench.conf || . functions

if [ $# -lt 1 ]; then
  echo "You must specify start, stop, report, postprocess, or install"
  exit 1
fi

CMD="`echo $1 | tr -t A-Z a-z`"

if [ "$CMD" = "start" -a $# -lt 2 ]; then
  echo "You must specify the collection interval for sar"
  exit 1
fi

if [ $# -eq 3 ]; then
  SUFFIX=".$3"
fi

function printsar
{
	./sar -$1 -f "$LOGDIR/analysis/sar.bin.$RUN_NUMBER"  > "$SARDIR/sar.$2"
} 


function install_sar() {
  # Install sar if it isn't already...
  if [ ! \( -d $AUTODIR/sources/sysstat -a -x $AUTODIR/sources/sysstat/sar \) ]; then
    $AUTODIR/scripts/profilers/install/sar
  fi
}

case $CMD in
  install)
    install_sar
    ;;
  start)
    install_sar

    #start sar
    if [ $2 != 0 ]; then
        pushd $AUTODIR/sources/sysstat > /dev/null
        PATH=.:$PATH  # sar starts sadc, but only checks the expected install 
        # dir, and doesn't check the current dir.
        ./sar -o "$LOGDIR/analysis/sar.bin.$RUN_NUMBER$SUFFIX" $2 100000 &
        popd > /dev/null
    fi
    ;;

  print-start)
    if [ $# -ge 2 ]; then
      if [ $2 != 0 ]; then
        echo 'PATH=$AUTODIR/sources/sysstat:$PATH'
        echo 'sar -o "$LOGDIR/analysis/sar.bin.$RUN_NUMBER$SUFFIX" '$2' 100000 &'
      fi
	else 
        echo 'PATH=$AUTODIR/sources/sysstat:$PATH'
        echo 'sar -o "$LOGDIR/analysis/sar.bin.$RUN_NUMBER$SUFFIX" 5 100000 &'
    fi
    ;;

  stop)
    #stop sar
                 # Full path is specifies here so that we don't kill ourselves
    killall sadc $AUTODIR/sources/sysstat/sar
    ;;

  print-stop)
    echo 'killall sadc $AUTODIR/sources/sysstat/sar'
    ;;

  report)
    ;;

  postprocess)
    if [ -e "$LOGDIR/analysis/sar.bin.$RUN_NUMBER$SUFFIX" ]; then
       pushd $AUTODIR/sources/sysstat > /dev/null
#      ./sar -A -f $LOGDIR/analysis/sar.bin.$RUN_NUMBER$SUFFIX > $LOGDIR/analysis/sar.text.$RUN_NUMBER$SUFFIX
       SARDIR="$LOGDIR/analysis/sar.breakout.$RUN_NUMBER"
       mkdir -p $SARDIR
       ./sar -A -f "$LOGDIR/analysis/sar.bin.$RUN_NUMBER" > "$LOGDIR/analysis/sar.text.$RUN_NUMBER"
       NR_CPUS=`cat /proc/cpuinfo | grep -c ^processor`
       printsar b io_transfer_rate
       printsar B paging_stats
       printsar c process_creation
       printsar d block_devices
       printsar q run_queue_loadavg
       printsar r memory
       printsar R memory_rates
       printsar u cpu_util
       printsar v fs_tables
       printsar w context_switching
       printsar W swapping
       printsar y tty_device
       printsar "I SUM" irq_sum
       printsar "n FULL" netdev
       printsar B paging_stats
       for ((ivar=0;ivar<NR_CPUS;ivar++)); do
               printsar "P $ivar" cpu_util_$ivar;
       done
       popd > /dev/null 
    fi
    ;;

  *)
    echo "The first argument must be start, stop, report, postprocess, or install"
    ;;
esac
