192 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| if [ -z $R ] ; then
 | |
| R=000
 | |
| fi
 | |
| 
 | |
| if [ -z $MBIT ] ; then
 | |
| 	MBIT="0.6Mbit stream"
 | |
| fi
 | |
| 
 | |
| T="pngcairo size 1000,600 enhanced font \"LiberationSerif,20\""
 | |
| EXT=png
 | |
| #T="pdfcairo"
 | |
| #EXT=pdf
 | |
| 
 | |
| if [ -z "$FOLDERS" ] ; then
 | |
|   FOLDERS="wowza nginx mist adobe"
 | |
| fi
 | |
| 
 | |
| if [ -z "$NAMES" ] ; then
 | |
|   NAMES="Wowza Nginx Mist Adobe"
 | |
| fi
 | |
| 
 | |
| FLDS=( $FOLDERS )
 | |
| NAMS=( $NAMES )
 | |
| 
 | |
| FN=`ls ${FLDS[0]}/run${R}_*.csv 2> /dev/null`
 | |
| if [ -z $FN ] ; then
 | |
|   exit
 | |
| fi
 | |
| FILE=`basename $FN`
 | |
| 
 | |
| FN=`ls ${FLDS[0]}/run${R}_*.times 2> /dev/null`
 | |
| TIMES=`basename $FN`
 | |
| VIEWERS=`echo $FILE | cut -d '_' -f 2`
 | |
| TECH=`echo $FILE | cut -d '_' -f 3`
 | |
| SECS=`echo $FILE | cut -d '.' -f 1 | cut -d '_' -f 4`
 | |
| TIME=$(( $SECS / 60 ))m
 | |
| 
 | |
| FILES=()
 | |
| TIME_FN=()
 | |
| 
 | |
| for i in `seq $(( ${#FLDS[@]} - 1 )) -1 0`; do
 | |
|   FN=`ls ${FLDS[$i]}/run${R}_*.csv 2> /dev/null`
 | |
|   if [ -z $FN ] ; then
 | |
|     exit
 | |
|   fi
 | |
|   FILES[$i]="${FLDS[$i]}/`basename $FN`"
 | |
|   FN=`ls ${FLDS[$i]}/run${R}_*.times 2> /dev/null`
 | |
|   TIME_FN[$i]="${FLDS[$i]}/`basename $FN`"
 | |
| done
 | |
| #   FN=`ls ${FLDS[0]}/run${R}_*.times 2> /dev/null`
 | |
| #   VNAME="TIMES_${i}"
 | |
| #   ${!VNAME}=`basename $FN`
 | |
| #   VNAME="VIEWERS_${i}"
 | |
| #   ${!VNAME}=`echo $FILE | cut -d '_' -f 2`
 | |
| #   VNAME="TECH_${i}"
 | |
| #   ${!VNAME}=`echo $FILE | cut -d '_' -f 3`
 | |
| #   SECS=`echo $FILE | cut -d '.' -f 1 | cut -d '_' -f 4`
 | |
| #   VNAME="TIME_${i}"
 | |
| #   ${!VNAME}=$(( $SECS / 60 ))m
 | |
| # 
 | |
| # done
 | |
| 
 | |
| COMMON_DATA="${TIME}, ${MBIT}, ${VIEWERS} ${TECH}"
 | |
| COMMON_FILENAME="${TECH}_${VIEWERS}_${TIME}"
 | |
| 
 | |
| PLOT1=""
 | |
| PLOT2=""
 | |
| PLOT3=""
 | |
| PLOT4=""
 | |
| PLOT5=""
 | |
| PLOT6=""
 | |
| PLOT7=""
 | |
| for i in `seq $(( ${#FLDS[@]} - 1 )) -1 0`; do
 | |
|   if [ -n "${PLOT1}" ] ; then
 | |
|     PLOT1="${PLOT1}, "
 | |
|     PLOT2="${PLOT2}, "
 | |
|     PLOT3="${PLOT3}, "
 | |
|     PLOT4="${PLOT4}, "
 | |
|     PLOT5="${PLOT5}, "
 | |
|     PLOT6="${PLOT6}, "
 | |
|     PLOT7="${PLOT7}, "
 | |
|   fi
 | |
|   
 | |
|   sort --field-separator=',' --key=4g < "${TIME_FN[$i]}" > "${TIME_FN[$i]}_sorted"
 | |
|   VC=`cut -f 4 -d ',' < "${TIME_FN[$i]}" | awk "(int(\\\$1) >= ${SECS}000-5000) {sum++} END{print sum}"`
 | |
|   SC=`cut -f 4 -d ',' < "${TIME_FN[$i]}" | awk "(int(\\\$1) >= ${SECS}000-30000) {sum++} END{print sum}"`
 | |
|   
 | |
| #smooth CPU and network
 | |
|   PLOT6="${PLOT6}'${FLDS[$i]}/${FILE}' using 1:4:(1) with lines lw 2 title '${NAMS[$i]} (${VC}, ${SC})' smooth acsplines"
 | |
|   PLOT7="${PLOT7}'${FLDS[$i]}/${FILE}' using (\$1-dx):(d(\$1,\$5/131072.0)):(1) with lines lw 2 title '${NAMS[$i]} (${VC}, ${SC})'  smooth acsplines"
 | |
|   
 | |
| #actual CPU and network
 | |
|   PLOT1="${PLOT1}'${FILES[$i]}' using 1:4 with lines lw 2 title '${NAMS[$i]} (${VC}, ${SC})'"
 | |
|   PLOT4="${PLOT4}'${FILES[$i]}' using (\$1-dx):(d(\$1,\$5/131072.0)) with lines lw 2 title '${NAMS[$i]} (${VC}, ${SC})'"
 | |
| 
 | |
| #memory - no need for smoothing, it's already pretty smooth
 | |
|   PLOT2="${PLOT2}'${FILES[$i]}' using 1:(\$3/1024.0) with lines lw 2 title '${NAMS[$i]} (${VC}, ${SC})'"
 | |
| #total upload - same here, no need to smooth anything over
 | |
|   PLOT3="${PLOT3}'${FILES[$i]}' using 1:(\$5/134217728.0) with lines lw 2 title '${NAMS[$i]} (${VC}, ${SC})'"
 | |
| #and buffer times. Smoothing makes no sense here. Don't.
 | |
|   PLOT5="${PLOT5}'${TIME_FN[$i]}_sorted' using (\$4-${SECS}000)/1000 with linespoints lw 1 title '${NAMS[$i]} (${VC}, ${SC})'"
 | |
| done
 | |
| 
 | |
| gnuplot << EOF
 | |
| set terminal ${T}
 | |
| set datafile separator ","
 | |
| set key on under center
 | |
| 
 | |
| #set style fill solid 0.25 border -1
 | |
| #set style boxplot outliers pointtype 7
 | |
| #set style data boxplot
 | |
| #set boxwidth  0.5
 | |
| set pointsize 0.2
 | |
| set arrow from 0,-5 to ${VIEWERS}-1,-5 nohead
 | |
| 
 | |
| set title "Available buffer time, ${COMMON_DATA} clients"
 | |
| set output '${TECH}_${VIEWERS}_${TIME}_buffers.${EXT}'
 | |
| set format y "%gs"
 | |
| set ylabel "Buffer size (above line = success)"
 | |
| set xlabel "Each point represents a single connection"
 | |
| unset xtics
 | |
| plot ${PLOT5}
 | |
| unset style
 | |
| unset xlabel
 | |
| unset arrow
 | |
| 
 | |
| set timefmt "%s"
 | |
| set xtics
 | |
| set xdata time
 | |
| #set xlabel "Time (mm:ss)"
 | |
| set format x "%M:%S"
 | |
| set grid
 | |
| 
 | |
| set title "CPU usage, ${COMMON_DATA} clients"
 | |
| set output '${COMMON_FILENAME}_cpu.${EXT}'
 | |
| set yrange [0:*<100]
 | |
| set format y "%.0f %%"
 | |
| set ylabel "CPU use"
 | |
| plot ${PLOT1}
 | |
| 
 | |
| set title "Memory usage, ${COMMON_DATA} clients"
 | |
| set output '${COMMON_FILENAME}_mem.${EXT}'
 | |
| set yrange [0<*<0:0<*]
 | |
| set ytics auto
 | |
| set format y "%g MiB"
 | |
| set ylabel "Memory use"
 | |
| plot ${PLOT2}
 | |
| 
 | |
| set title "Network upload, ${COMMON_DATA} clients"
 | |
| set output '${COMMON_FILENAME}_upload.${EXT}'
 | |
| set yrange [0<*<0:0<*]
 | |
| set ytics auto
 | |
| set format y "%g Gbit"
 | |
| set ylabel "Total uploaded data"
 | |
| plot ${PLOT3}
 | |
| 
 | |
| # derivative function.  Return 1/0 for first point, otherwise delta y or (delta y)/(delta x)
 | |
| d(x,y) = (\$0 == 1) ? (x1 = x, y1 = y, 1/0) : (x2 = x1, x1 = x, y2 = y1, y1 = y, (y1-y2)/(x1-x2))
 | |
| 
 | |
| set title "Network speed, ${COMMON_DATA} clients"
 | |
| set output '${COMMON_FILENAME}_netspeed.${EXT}'
 | |
| set yrange [0<*<0:0<*]
 | |
| set ytics auto
 | |
| set format y "%g Mbps"
 | |
| set ylabel "Upload speed"
 | |
| dx=0.5
 | |
| plot ${PLOT4}
 | |
| 
 | |
| set title "Smoothed CPU usage, ${COMMON_DATA} clients"
 | |
| set output '${COMMON_FILENAME}_cpu_smooth.${EXT}'
 | |
| set yrange [0:*<100]
 | |
| set format y "%.0f %%"
 | |
| set ylabel "CPU use"
 | |
| plot ${PLOT6}
 | |
| 
 | |
| set title "Smoothed network speed, ${COMMON_DATA} clients"
 | |
| set output '${COMMON_FILENAME}_netspeed_smooth.${EXT}'
 | |
| set yrange [0<*<0:0<*]
 | |
| set ytics auto
 | |
| set format y "%g Mbps"
 | |
| set ylabel "Upload speed"
 | |
| dx=0.5
 | |
| plot ${PLOT7}
 | |
| 
 | |
| EOF
 | |
| 
 | |
| 
 | |
| for i in `seq $(( ${#FLDS[@]} - 1 )) -1 0`; do
 | |
|   rm -f "${FLDS[$i]}/${TIMES}_sorted"
 | |
| done
 | 
