OK it seems like i’ve done this enough times in my career w/ 1-off command line, i thought i would share w/ the group. This may not have the mass-market appeal of the cat videos, but its probably better for productivity.
The below script will take a capture file, and then graph it’s bandwidth on any arbitrary time-grid granularity. E.g. if you want to know the bandwidth of something over any 0.1s interval, 1s interval, etc.
#!/bin/sh set -e if [ $# != 2 ] then echo "Usage: $0 cap-file granularity(s)" exit 1 fi ifile="$1" gran="$2"
d=$(mktemp -d)
tshark -o column.format:'"T","%t","L","%L"' -r "$ifile" | awk -v gran=$gran ' BEGIN { offset = 0 printf("Time,Delta-Bytes,Bps\n"); } { if ( ($1 - offset) > gran) { b=bytes[offset] offset += gran bytes[offset] = 0 printf("%f,%u,%6.2f\n", offset, b, (8.0 * b) / gran) } bytes[offset] += $2 } ' > $d/x.dat
cat << EOF > $d/gnuplot.txt set datafile separator "," set title "$ifile bitrate (${gran}s granularity)" set xlabel "Time(seconds)" set ylabel "Bitrate(bps)" plot "$d/x.dat" using 1:3 title "$ifile" with lines pause -1 EOF
echo "Press return to finish" gnuplot $d/gnuplot.txt rm -rf $d
Leave a Reply