Internet Speedtest: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Wulf (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Wulf (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 5: | Zeile 5: | ||
# | # | ||
# Author: Frank Wulf | # Author: Frank Wulf | ||
# Version: 1. | # Version: 1.2 (2020-04-21) | ||
# | # | ||
# Version history: | # Version history: | ||
# 1.0 2020-04-11 Initial release | # 1.0 2020-04-11 Initial release | ||
# 1.1 2020-04-18 Changed to best-of-three mode | # 1.1 2020-04-18 Changed to best-of-three mode | ||
# 1.2 2020-04-21 Extended time between tests to 15 minutes | |||
# | # | ||
| Zeile 46: | Zeile 47: | ||
if [ $i -lt 3 ]; then | if [ $i -lt 3 ]; then | ||
# Wait 15 | # Wait 15 minutes between two speedtests | ||
sleep | sleep 900 | ||
fi | fi | ||
done | done | ||
Version vom 21. April 2020, 20:01 Uhr
Shell script /usr/bin/fwspeedtest
#!/bin/bash
#
# Author: Frank Wulf
# Version: 1.2 (2020-04-21)
#
# Version history:
# 1.0 2020-04-11 Initial release
# 1.1 2020-04-18 Changed to best-of-three mode
# 1.2 2020-04-21 Extended time between tests to 15 minutes
#
comment=""
out=/tmp/fwspeedtest.out
if [ -f "$out" ]; then
rm $out 1>/dev/null 2>&1
fi
# Run the speedtest three times
for i in {1..3}
do
# Check if VPN connection is active
systemctl status openvpn 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
vpn_active=1
# Stop VPN connection
systemctl stop openvpn
else
vpn_active=0
fi
# Run speedtest
/usr/bin/speedtest --format=csv >>$out
retcode=$?
if [ $vpn_active -eq 1 ]; then
# Start VPN connection
systemctl start openvpn
fi
if [ "$retcode" -ne 0 ]; then
exit 1
fi
if [ $i -lt 3 ]; then
# Wait 15 minutes between two speedtests
sleep 900
fi
done
download=0
while read line; do
download_new=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $7 }'`
if [ $download_new -lt $download ]; then
# Download rate is slower than previous ones
continue
fi
download=$download_new
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 }'`
download_used=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $9 }'`
upload_used=`echo "$line"|awk -F '^ *"|" *, *"|" *$' '{ print $10 }'`
done <<<`cat $out`
rm $out 1>/dev/null 2>&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`
# 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`
# Convert used bytes to MBytes and round values
download_used=`echo "scale=8; $download_used / 1024 / 1024" | bc`
download_used=`echo "scale=1; ($download_used + 0.05) / 1" | bc`
upload_used=`echo "scale=8; $upload_used / 1024 / 1024" | bc`
upload_used=`echo "scale=1; ($upload_used + 0.05) / 1" | bc`
# Fill timestamp field
timestamp=`date +'%Y-%m-%d %H:%M:%S'`
# Insert data into database
sql="INSERT INTO fw_speedtest (timestamp,server_id,server_name,latency,"
sql+="jitter,packet_loss,download,upload,download_used,upload_used,"
sql+="comment) VALUES ("
sql+="\"$timestamp\", \"$server_id\", \"$server_name\", \"$latency\", "
sql+="\"$jitter\", \"$packet_loss\", \"$download\", \"$upload\", "
sql+="\"$download_used\", \"$upload_used\", \"$comment\")"
mysql --login-path=fwsysmon -D fwsysmon -e "$sql"
exit 0
Scheduling Speedtest with systemd
- Service Unit file /lib/systemd/system/fwspeedtest.service
[Unit]
Description=LTE speedtest
[Service]
Type=oneshot
ExecStart=/usr/bin/fwspeedtest
User=root
Group=root
- Timer Unit file /lib/systemd/system/fwspeedtest.timer
[Unit]
Description=Run LTE speedtest four times a day
[Timer]
OnCalendar=*-*-* 0,6,12,18:00
RandomizedDelaySec=6h
Persistent=true
[Install]
WantedBy=timers.target