creating_the_speedtest_image_every_day
Creating the SpeedTest image every day
So, I like to see how much I'm getting for my $62 per month, so I wrote this script a long time ago to track upload, download and delay numbers across my Internet connection.
It uses the node.js fast-cli script by Sindre Sorhus from here or installed with npm install --global fast-cli .
First, there are two scripts in /usr/local/bin; One, in bash script;
- SpeedTest
#!/bin/bash # /usr/local/bin/SpeedTest # Quick and simple log file of connection speed tests # SRJ 2016-12-26 # In crontab; # 09 */6 * * * /usr/local/bin/SpeedTest YM=$(date +%Y-%m) ; MT=$(date -d "+6 hours" +%Y-%m) Log=~/.SpeedTest.log ARG1="/var/www/html/SpeedTest" ARG2="/var/www/html/${YM}-SpeedTest" PLog=~/.PlotLog Date=$(date +"%Y-%m-%d %H:%M") Data=($(/usr/local/bin/fast -u --json | grep -E 'latency|downloadSpeed|uploadSpeed' | cut -d : -f 2 | tr -d ',' | tr -d '\n' ; echo "")) FData="${Data[2]} ${Data[0]} ${Data[1]}" echo "${Date} ${FData}" >> ${Log} tail -128 ${Log} > ${PLog} /usr/local/bin/PlotSpeedTest if [ ${YM} != ${MT} ] then cp ${ARG1}.png ${ARG2}.png fi
Part two, the gnuplot script;
- PlotSpeedTest
#!/usr/bin/gnuplot # # /usr/local/bin/PlotSpeedTest # # SRJ 2016-12-26 fmt = '%Y-%m-%d %H:%M'; # Format used for printing out time time_diff=4*60*60; # Seconds between local time zone and UTC curr_time_utc = time(0); # Get UTC time curr_time_loc = curr_time_utc - time_diff; # Adjust to local time zone set title "Connection speeds for 32 days past, CBT Fioptics\nLast run: ".strftime(fmt, curr_time_loc); set style data lines set term pngcairo size 1820, 980 set timefmt "%Y-%m-%d %H:%M" set xdata time set format x "%b-%d" set xtics rotate set xlabel "Time, tics are daily, samples are every six hours (09 */6 * * *)...\nTested using Sindre Sorhus' fast-cli." set autoscale y set autoscale xfix set style line 1 lt 2 lc rgb "black" lw 4 set style line 2 lt 2 lc rgb "green" lw 2 set style line 3 lt 2 lc rgb "red" lw 2 set grid set key bottom left set key opaque set output "/dev/null" plot '/root/.PlotLog' using 1:4 max_Dn = GPVAL_DATA_Y_MAX min_Dn = GPVAL_DATA_Y_MIN plot '/root/.PlotLog' using 1:5 max_Up = GPVAL_DATA_Y_MAX min_Up = GPVAL_DATA_Y_MIN plot '/root/.PlotLog' using 1:3 max_Dl = GPVAL_DATA_Y_MAX min_Dl = GPVAL_DATA_Y_MIN set output "/var/www/html/SpeedTest.png" plot \ '/root/.PlotLog' using 1:4 title sprintf("Download, Mbs, Max:%g Min:%g", max_Dn, min_Dn ) with lines ls 1, \ '/root/.PlotLog' using 1:5 title sprintf("Upload, Mbs, Max:%g Min:%g", max_Up, min_Up ) with lines ls 2, \ '/root/.PlotLog' using 1:3 title sprintf("Delay, ms, Max:%g Min:%g", max_Dl, min_Dl ) with lines ls 3
Part three, this is called by cron every six hours with;
- crontab
09 */6 * * * /usr/local/bin/SpeedTest
It works well, I have a text log going back for years, I have monthly images saved in the web server, and one that updates every six hours that I link on my phone, just to brag; https://www.stevejonescomputers.com/SpeedTest.png
creating_the_speedtest_image_every_day.txt · Last modified: by steve
