#!/bin/bash
###############################################################################################
#	Advanced RTI System, ARTÌS			http://pads.cs.unibo.it
#	Large Unstructured NEtwork Simulator (LUNES)
#
#	Description:
#		script used to start simulation batches, most of the runtime parameters can
#		be controlled using some environment variables. Such parameters can be used
#		to control both the runtime execution and the model level paramters.
#
#	Note:
#		some "default" runtime parameters are defined in "scripts_configuration.sh"
#		and can be superseded here.
#
#	Authors:
#		First version by Gabriele D'Angelo <g.dangelo@unibo.it>
#
################################################################################################

#-------------------------------- DEFAULT VALUES ---------------------------------#
#
# Including some default configuration parameters
#
source scripts_configuration.sh
#
export MIGRATION=0
export MFACTOR=1.2
export LOAD=0
#
#
export DISSEMINATION=0
PREFIX=broadcast
#
# Maximum time-to-live for messages in the network
export MAX_TTL=8
#
# Probability threshold of the broadcast dissemination
export BROADCAST_PROB_THRESHOLD=80
#
# Churn control (not implemented in this version)
export CHURN_MU=0
export CHURN_LAMBDA=0
#
# Cache size
export CACHE_SIZE=256

#---------------------------------------------------------------------------------#
OUTPUT_FILE="$RESULTS_DIRECTORY/$PREFIX-STATS.dat"
#
rm -f $OUTPUT_FILE

NODES=$START_NUMBER_NODES

while [ $NODES -le $END_NUMBER_NODES ]; do

	rm -f $WORKING_DIRECTORY/$RUNSCOVERAGETMP $WORKING_DIRECTORY/$RUNSDELAYMEANTMP
	rm -f $WORKING_DIRECTORY/*.finished
	#---------------------------------------------------------------------------------#

	TESTNAME="$PREFIX-$NODES-lp$LPS-migr$MIGRATION-mfactor$MFACTOR-load$LOAD"
	date

	if [ $EXECUTION -eq 1 ] ; then

		echo "running task... $TESTNAME"
		./run $LPS $LPS $NODES $NUMBERRUNS $TESTNAME $MAX_TTL

		echo "task completed: $TESTNAME" 
	fi
	
	if [ $STATISTICS -eq 1 ] ; then

		echo "Processing: " $NODES	
		RUN=1

		RUNNING=0
		while [ $RUN -le $NUMBERRUNS ]; do

			RUNNING=`ps aux 2> /dev/null | grep "get_coverage_script" | wc -l`
			echo $RUN / $RUNNING

			if [ $RUNNING -le $CPUNUM ]; then
				mkdir -p $RESULTS_DIRECTORY/$TESTNAME/$RUN
				./get_coverage_script "$TRACE_DIRECTORY/$TESTNAME/$RUN" $RUN $TESTNAME $LPS &
				let RUN=RUN+1
			else
				sleep 3
			fi
		done
	
		FINISHED=`ls -la $WORKING_DIRECTORY/$TESTNAME/ 2> /dev/null | grep ".finished" | wc -l`
		while [ $FINISHED -lt $NUMBERRUNS ]; do
			sleep 5
			FINISHED=`ls -la $WORKING_DIRECTORY/$TESTNAME/ 2> /dev/null | grep ".finished" | wc -l`
		done

		echo -n $NODES " " >> $OUTPUT_FILE
		echo -en "\t" >> $OUTPUT_FILE

		RUN=1
		while [ $RUN -le $NUMBERRUNS ]; do
			cat $WORKING_DIRECTORY/$TESTNAME/$RUN/$RUNSCOVERAGETMP >> $WORKING_DIRECTORY/$TESTNAME/$RUNSCOVERAGETMP
			cat $WORKING_DIRECTORY/$TESTNAME/$RUN/$RUNSDELAYTMP >> $WORKING_DIRECTORY/$TESTNAME/$RUNSDELAYTMP

			let RUN=RUN+1 
		done

		RUN=1
		while [ $RUN -le $NUMBERRUNS ]; do

			LP=0
			while [ $LP -lt $LPS ]; do

				tail $TRACE_DIRECTORY/$TESTNAME/$RUN/tracefile-messages-$LP.trace | grep "STAT MSG" | cut -f 3 -d" " \
					>> $WORKING_DIRECTORY/$TESTNAME/$RUN/tracefile-messages.trace
				
				let LP=LP+1
			done

			RUN_MSG=`awk '{tot=tot+$1} END {print tot}' $WORKING_DIRECTORY/$TESTNAME/$RUN/tracefile-messages.trace`
			echo $RUN_MSG >> $WORKING_DIRECTORY/$TESTNAME/$RUNSMESSAGETMP

			NUM_MSGIDS=`wc -l $WORKING_DIRECTORY/$TESTNAME/$RUN/$MSGIDS | cut -f 1 -d" "`
			LOWER_BOUND_MESSAGES=$((NODES*NUM_MSGIDS))

			RATIO=`echo "scale=2; $RUN_MSG/$LOWER_BOUND_MESSAGES" | bc -l`
			echo $RATIO >> $WORKING_DIRECTORY/$TESTNAME/ratios.trace

			let RUN=RUN+1 
		done
			
		VALUE=`awk -f mean.awk $WORKING_DIRECTORY/$TESTNAME/$RUNSCOVERAGETMP`
		echo -n $VALUE >> $OUTPUT_FILE
		echo -en "\t" >> $OUTPUT_FILE
		
		VALUE=`awk -f mean.awk $WORKING_DIRECTORY/$TESTNAME/$RUNSDELAYTMP`
		echo -en "\t" $VALUE >> $OUTPUT_FILE

		MESSAGES=`awk -f mean.awk $WORKING_DIRECTORY/$TESTNAME/$RUNSMESSAGETMP` 
		echo -en "\t" $MESSAGES >> $OUTPUT_FILE

		AVERAGE_RATIO=`awk -f mean.awk $WORKING_DIRECTORY/$TESTNAME/ratios.trace`
		echo -en "\t" $AVERAGE_RATIO >> $OUTPUT_FILE
	fi

	if [ $NOTRACE -eq 1 ] ; then
		rm -fr $WORKING_DIRECTORY/$TESTNAME/
		rm -fr $TRACE_DIRECTORY/$TESTNAME/
	fi

	let NODES=NODES+STEP_NODES
done

