#!/bin/sh
#
[ -n "$WEBSTONEROOT" ] || WEBSTONEROOT=`pwd`/../

case $# in
1)	FILELIST=$1
	;;
*)
	FILELIST=$WEBSTONEROOT/conf/filelist
	;;
esac

# load configurations
. $WEBSTONEROOT/conf/testbed
echo "Clients: " $CLIENTS

#
# Estimate run time
#
NUMCLIENTHOSTS=`echo $CLIENTS | wc -w`
TRIALS=`expr 1 + \( $MAXCLIENTS - $MINCLIENTS \) / $CLIENTINCR`
RUNTIME=`expr 60 \* $ITERATIONS \* $TRIALS \* $TIMEPERRUN`
RUNTIME=`expr $RUNTIME + $TRIALS \* \( $MAXCLIENTS + $MINCLIENTS \) \
 / \( 2 \* $NUMCLIENTHOSTS \)`

echo "Estimated run time:" `expr $RUNTIME / 3600` "hours" \
 `expr $RUNTIME % 3600 / 60` "minutes" 

#
# nuke debug files
#
for client in $CLIENTS
do
  rsh $client "rm -f /tmp/webstone-debug.*" > /dev/null 2>&1
done

#
# Checking for valid set of benchmark files to retrieve
#
echo "Checking for a valid set of benchmark files to retrieve..."
  CHECKLISTTMP=$TMPDIR/webstone-checkfilelist.$$
  rm -f $CHECKLISTTMP
#  $WEBSTONEROOT/bin/checkfilelist $SERVER $PORTNO $FILELIST > $CHECKLISTTMP 2>&1
#  if test `grep -c ' 4[0-9][0-9] '< $CHECKLISTTMP` -gt 0 ; then
#    echo "ERROR: not all files in filelist are on server:"
#    echo "----- checkfilelist results -----"
#    cat $CHECKLISTTMP
#    echo "----- checkfilelist results -----"
#    rm  -f $CHECKLISTTMP
#    exit 1
#  else
#    echo "OK: All files found"
#  fi
  rm -f $CHECKLISTTMP

#
# distribute webclient binary
#
$WEBSTONEROOT/bin/distribute $CLIENTS

  # BEGIN iterations
  J=1
  while (test $J -le $ITERATIONS) # BEGIN iterations J
  do
    NUMCLIENTS=$MINCLIENTS
    while (test $NUMCLIENTS -le $MAXCLIENTS) # BEGIN adding load NUMCLIENTS
    do
      echo "***** Iteration $J, Total clients "`expr $NUMCLIENTS`" **********************************"
      date
      TIMESTAMP=`date +"%y%m%d_%H%M"`
      LOGDIR=$WEBSTONEROOT/bin/runs/$TIMESTAMP

      mkdir -p $LOGDIR
      rm -f $LOGDIR/config
      touch $LOGDIR/config
      CLIENTSPERHOST=`expr $NUMCLIENTS / $NUMCLIENTHOSTS`
      EXTRACLIENTS=`expr $NUMCLIENTS % $NUMCLIENTHOSTS`

      for i in $CLIENTS
      do
	if [ $EXTRACLIENTS -gt 0 ]
	then
	  echo "$i $CLIENTACCOUNT $CLIENTPASSWORD `expr $CLIENTSPERHOST + 1`" >> $LOGDIR/config
	  EXTRACLIENTS=`expr $EXTRACLIENTS - 1`
	else
	  echo "$i $CLIENTACCOUNT $CLIENTPASSWORD $CLIENTSPERHOST" >> $LOGDIR/config
	fi
      done
      cp $FILELIST $LOGDIR/`basename $FILELIST`

      #
      # Put test configuration files on clients
      #
      for i in $CLIENTS localhost
      do
	rsh $i "rm -f $TMPDIR/config $TMPDIR/`basename $FILELIST`"
	rcp $LOGDIR/config $i:$TMPDIR/config
	rcp $LOGDIR/`basename $FILELIST` $i:$TMPDIR/filelist
      done
      
      #
      # Get starting configuration and stats from each participant
      #
      rsh $SERVER "$SERVERINFO" > $LOGDIR/hardware.$SERVER 2>&1
      $WEBSTONEROOT/bin/getstats $SERVER > $LOGDIR/begin.$SERVER 2>&1
      for i in $CLIENTS
      do
	rsh $i "$CLIENTINFO" > $LOGDIR/hardware.$i 2>&1
	$WEBSTONEROOT/bin/getstats $i > $LOGDIR/begin.$i 2>&1
      done
      
      set -x
      for i in $OSTUNINGFILES $WEBSERVERTUNINGFILES
      do
	rcp $SERVER:$i $LOGDIR
      done
      set +x
      
      #
      # Run benchmark
      #
      date
      CMD="$WEBSTONEROOT/bin/webmaster $DEBUG -w $SERVER -p $PORTNO $KEEPALIVE -u $TMPDIR/filelist -f $TMPDIR/config -t $TIMEPERRUN "
      echo $CMD
      $CMD | tee $LOGDIR/run
      
      #
      # Get starting configuration and stats from each participant
      #
      date
      for i in $SERVER $CLIENTS
      do
	$WEBSTONEROOT/bin/getstats $i > $LOGDIR/end.$i 2>&1
      done
      date
      NUMCLIENTS=`expr $NUMCLIENTS + $CLIENTINCR`
    done # while NUMCLIENTS
    J=`expr $J + 1`
  done # while J
