All pastes #955409 Raw Edit

jtlmin.sh

public shellscript v1 · immutable
#955409 ·published 2008-03-24 16:32 UTC
rendered paste body
#!/bin/sh# This script breaks JMeter JTL output into 1-minute blocks (or larger)# JMeter doesn't display our output too well, but this should help# # Prerequisites:#     Unix utilities awk, sed, bc#     GNU bash (it might run in ksh also but I haven't tested it)# # FYI timestamps: go to http://en.wikipedia.org/wiki/Unix_timestamp#     600k milliseconds = 10 minutes (jmeter timestamps are millisec from 01 jan 1970)usage="Usage: jtlmin.sh <filename> \nSummarizes JMeter JTL output into 1-minute blocks"[ $1 ] || { echo -e $usage; exit 1 ; }echo "Processing $1"# ---------------------------------------------------------------------------------------# pre-process JTL filefl=$1.jtlmin.$$sed -n '2,$ p' $1 > $fl.a   #strip headingssort -o $fl.b $fl.a         #sort# chop digits from timestamp to ignore milliseconds and large time intervalscut -c -10,14- $fl.b > $fl# Set up variables for awk routine#    can set some variables manually if you like (old functionality)#    eg:  step=60; start=1158446940; end=1158451080  ustart=`head -1 $fl | cut -c-10`uend=`tail -1 $fl | cut -c-10`start=`echo "$ustart-($ustart%60)"|bc`end=`echo "$uend+60-($uend%60)"|bc`step=60# put some headings on output fileecho "$PWD/$1" > $1.OUTecho "unixtime date time thruput(tpm) avgresponse(ms) maxresponse(ms)" | awk 't="\t" {print $1 t $2 t $3 t $4 t $5 t $6}' >> $1.OUT# ---------------------------------------------------------------------------------------awk_routine(){  lastminute=$start  thisminute=`echo "$start+$step"|bc`    #do throughput calc  while [ $thisminute -le $end ]  do    awk -F',' '    # This script (jtlminav.awk) scans a JTL file for records in a specified interval    # and returns record count & average response time.    #    # Called in this format:    #    awk -F"," -f {path}/jtlminav.awk lastmin={timestamp1} thismin={timestamp2} {jtl-file-name}    #    # where {timestamp1} and {timestamp2} specify the interval to scan.    #    # Returned values:    #    lastmin        value passed in    #    sumresponse    total of response times in the interval    #    trancount      count of records in this interval, ie. throughput    #    avgresponse    average response time    BEGIN {       avgresponse=0; sumresponse=0; trancount=0; maxresponse=0;    }    {       if(($1 >= lastmin) && ($1 < thismin)) {        trancount++        sumresponse += $2        if($2 > maxresponse) {         maxresponse = $2        }        avgresponse = sumresponse / trancount        #debug: print lastmin,thismin,$1,$2,trancount,sumresponse,avgresponse      }    }    END {       printf("%d %d %d %d %d",lastmin,sumresponse,trancount,avgresponse,maxresponse);      print " ",strftime("%d-%m-%Y %H:%M",lastmin)    #    ## here endeth the groovy awk routine ##    #      }' lastmin=$lastminute thismin=$thisminute $fl \      | awk 't="\t" {print $1 t $6 t $7 t $3 t $4 t $5}'    lastminute=$thisminute    thisminute=`echo "$thisminute+$step"|bc`  done        #awkroutine=~/bin/jtlminav.awk    #awk -F',' -f $awkroutine lastmin=$lastminute thismin=$thisminute $fl \    #  | awk 't="\t" {print $1 t $5 t $6 t $3 t $4}'  #debug# echo "sh>" $lastminute $thisminute $step $end  #datetime=`utime2ymd $lastminute`  #mintime=`echo $datetime|awk '{print substr($1,10,2) ":" substr($1,12,2)}'`  #echo " $datetime $mintime"# ---------------------------------------------------------------------------------------}awk_routine >> $1.OUTrm -f $fl*exit