#!/bin/bash # # This script polls gnunet-stats repeatedly to create statistics plots. # Use 'collect' to collect statistics and 'plot' to plot whats been # collected. All plots will be written to $STATDIR as separate .png files. # # WARNING: calling 'collect' will delete all files in $STATDIR. # # Requires: gnuplot # # Note: gnuplot syntax has changed across versions. This # script perhaps will not produce color images with older gnuplots. # The script should work atleast with gnuplot 3.8k patchlevel 1. # SLEEP=120 GNUNET=$HOME/ STATDIR=$GNUNET/stats IMAGEVIEWER='display' TMP=/tmp/.gnuplot_error ########################################################################## mkdir -p $STATDIR case "$1" in collect) rm -f $STATDIR/* STARTTIME=`date +%s` IFS=":" while true; do NOW=`date +%s` RELAT=$[$NOW-$STARTTIME] gnunet-statistics | while read KEY VALUE; do # Collect stats of previous round if [ -e "$STATDIR/$KEY.dat" ]; then PREV=`tail --lines=1 "$STATDIR/$KEY.dat" | sed -e "s/.* //g"` else PREV=$VALUE fi # Write new stats echo $RELAT $VALUE >>"$STATDIR/$KEY.dat" echo $RELAT $PREV $VALUE >>"$STATDIR/$KEY.diff" done sleep $SLEEP done ;; plot) # Plot incremental ls -1 $STATDIR/*.dat | while read FILENAME; do BASENAME=`basename "$FILENAME" | sed -e "s/ *\..*//g"` echo "set terminal png;set output '$FILENAME.png';set title '$BASENAME - incr';plot '$FILENAME' using (\$1/60):(\$2) title '' with lines;" | nice gnuplot 2> $TMP EC=`cat $TMP | grep "empty" | grep "Warning" | wc -l` if test $EC -ge 1 then rm "$FILENAME.png" fi done # Plot diff ls -1 $STATDIR/*.diff | while read FILENAME; do BASENAME=`basename "$FILENAME" | sed -e "s/ *\..*//g"` echo "set terminal png;set output '$FILENAME.png';set title '$BASENAME - diff';plot '$FILENAME' using (\$1/60):(\$3-\$2) title '' with lines;" | nice gnuplot 2> $TMP EC=`cat $TMP | grep "empty" | grep "Warning" | wc -l` if test $EC -ge 1 then rm "$FILENAME.png" fi done ;; view) $IMAGEVIEWER $STATDIR/*.png ;; *) echo $"Usage: $0 {collect|plot|view}" exit 1 esac