Internet Speedtest

Aus wiki.frank-wulf.de
Zur Navigation springen Zur Suche springen

Shell script /usr/bin/fwspeedtest

  1. !/bin/bash
  2. Author: Frank Wulf
  3. Version: 1.0 (2020-04-09)
  4. Version history:
  5. 1.0 2020-04-09 Initial release
  1. Run speedtest

/usr/bin/speedtest --format=csv >/tmp/fwspeedtest.out if [ $? -ne 0 ]; then

 exit 1

fi

while read line; do

 server_id=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $3 }'`
 server_name=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $2 }'`
 latency=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $4 }'`
 jitter=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $5 }'`
 packet_loss=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $6 }'`
 download=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $7 }'`
 upload=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $8 }'`

done <<<`cat /tmp/fwspeedtest.out`

rm /tmp/fwspeedtest.out 1>/dev/null 2>&1

  1. Fill timestamp field

timestamp=`date +'%Y-%m-%d %H:%M:%S'`

  1. Round values for latency. jitter and packet_loss

latency=`echo "scale=2; ($latency + 0.005) / 1" | bc` jitter=`echo "scale=2; ($jitter + 0.005) / 1" | bc` packet_loss=`echo "scale=1; ($packet_loss + 0.05) / 1" | bc`

  1. Convert download/upload speed from bytes per second to Mbps and round values

download=`echo "scale=8; $download * 8 / 1024 / 1024" | bc` download=`echo "scale=2; ($download + 0.005) / 1" | bc` upload=`echo "scale=8; $upload * 8 / 1024 / 1024" | bc` upload=`echo "scale=2; ($upload + 0.005) / 1" | bc`

  1. Insert data into database

sql="INSERT INTO fw_speedtest (timestamp,server_id,server_name,latency," sql+="jitter,packet_loss,download,upload,comment) VALUES (" sql+="\"$timestamp\", \"$server_id\", \"$server_name\", \"$latency\", " sql+="\"$jitter\", \"$packet_loss\", \"$download\", \"$upload\", " sql+="\"$comment\")"

mysql --login-path=fwsysmon -D fwsysmon -e "$sql"

exit 0