Bandbreitenmessung mit gnuplot

Das Test Tool speedtest-cli ist ein Python Programm, das sehr gut die nutzbare Bandbreite an DSL, Kabel etc messen kann. Es kann daten in csv Form ausgeben, diese kann man direkt in gnuplot anzeigen lassen. Das ganze eignet sich daher einfach und schnell zur Automatisierung. Per cron-job lässt man regelmässig Tests laufen und dann auch die grafische Aufbereitung.

Ergebnisse als Graphen

Skript Download

#!/usr/bin/gnuplot
set datafile separator ","
EINGABE1 = "speedtest.csv"
AUSGABE1 = "speedtest.pdf"
set terminal pdf size 11.6929,8.267    # Das ist A4 quer
set output AUSGABE1
#set decimalsign locale "de_DE.UTF-8"
set xdata time                     # X-Achse ist ein Zeitformat
set timefmt "%Y-%m-%dT%H:%M:%S"   # Format beim einlesen der Daten
set format x "%H:%M"   # Nur die Uhrzeit, also die Tageszeiten - Datum wird ignoriert
set key center top
set size 0.95,0.95
set origin 0.03,0.03
set mxtics 4
set style line 51 lc rgb 'black' dt 3 linetype 1
set style line 52 lc rgb 'gray' dt 3 linetype 1
set ytics    tc rgb 'purple'
set y2tics   tc rgb 'green'
set grid xtics ytics mxtics mytics     ls 51, ls 52

set title "Speedtest.net Bandbreitenmessung des Internet-Anschlusses" font "(,18)" tc rgb "red"
set xlabel "Tageszeit (UTC)"
set ylabel "Download-Bandbreite in Mbit/s" tc rgb 'purple'
set y2label "Upload-Bandbreite in Mb/s" tc rgb 'green'
#   Ränder für die Blattaufteilung
TMARGIN = "set tmargin at screen 0.91; set bmargin at screen 0.55"
BMARGIN = "set tmargin at screen 0.45; set bmargin at screen 0.09"
LMARGIN = "set lmargin at screen 0.08; set rmargin at screen 0.45"
RMARGIN = "set lmargin at screen 0.55; set rmargin at screen 0.92"
AMARGIN = "set lmargin at screen 0.08; set rmargin at screen 0.92"

plot \
     EINGABE1 using 4:($7/1024/1024)  with points   title "nachher down"   axes x1y1    lc rgb 'purple' pointtype 6 pointsize 1, \
     EINGABE1 using 4:($8/1024/1024)  with points   title "nachher   up"     axes x1y2    lc rgb 'green' pointtype 6 pointsize 1

set logscale y
unset y2tics
unset y2label
set ytics add(20 20,30 30, 40 40, 50 50, 60 60)
plot \
     EINGABE1 using 4:6  with points   title "nachher ping time"   axes x1y1    lc rgb 'green' pointtype 6 pointsize 1, \

Bash Skript Download

#!/bin/bash
#
OUT1=speedtest.csv
INC=speedtest.inc
cat > $INC <<EOF
TARGET="$TARGET"
DATE="$(date -Is)"
EOF
cp /var/log/speedtest speedtest.csv
./speedtest.gnuplot