Speedtest_logger/Linux/speedtest.sh

106 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# Load environment variables
source "$(dirname "$0")/config.env"
# ---------------- Get Current IP Info ----------------
INFO=$(curl -s https://ipv4.am.i.mullvad.net/json | jq)
IP=$(echo "$INFO" | jq -r '.ip')
ORG=$(echo "$INFO" | jq -r '.organization')
# ---------------- Iperf3 Test ----------------
if [ "$IPERF3" -eq 1 ]; then
echo "Running iperf3 test..."
IPERF_UP=$(iperf3 -R -c "$IPERF3_SERVER_IP" -J)
if [ -z "$IPERF_UP" ] || [[ "$IPERF_UP" == *"error"* ]]; then
echo "Iperf3 test failed"
exit 1
fi
IPERF_DOWN=$(iperf3 -c "$IPERF3_SERVER_IP" -J)
if [ -z "$IPERF_DOWN" ] || [[ "$IPERF_DOWN" == *"error"* ]]; then
echo "Iperf3 test failed"
exit 1
fi
DOWNLOAD=$(echo "$IPERF_UP" | jq -r '.end.sum_received.bits_per_second')
UPLOAD=$(echo "$IPERF_DOWN" | jq -r '.end.sum_sent.bits_per_second')
DOWNLOAD_Mbps=$(awk "BEGIN { printf \"%.1f\", $DOWNLOAD / (1024*1024) }")
UPLOAD_Mbps=$(awk "BEGIN { printf \"%.1f\", $UPLOAD / (1024*1024) }")
if [ "$log" -eq 1 ]; then
echo "$(date +"%Y-%m-%d %H:%M:%S"),$WAN,iperf3,$ORG,$IP,$DOWNLOAD_Mbps Mbps,$UPLOAD_Mbps Mbps" >> "$LOG_FILE"
fi
if [ "$DISCORD" -eq 1 ]; then
curl -H "Content-Type: application/json" -X POST --data @- "$WEBHOOK_URL" <<EOF
{
"embeds": [{
"title": "Iperf3 Result - WAN $WAN",
"color": 5814783,
"fields": [
{"name": "Date", "value": "$(date +'%Y-%m-%d %H:%M:%S')"},
{"name": "Server", "value": "$IPERF3_SERVER_IP"},
{"name": "ISP", "value": "$ORG"},
{"name": "IP", "value": "$IP"},
{"name": "Download", "value": "$DOWNLOAD_Mbps Mbps"},
{"name": "Upload", "value": "$UPLOAD_Mbps Mbps"}
]
}]
}
EOF
fi
if [ "$INFLUX" -eq 1 ]; then
influx --database="$INFLUXDB_NAME" --host="$INFLUXDB_HOST" \
--execute="INSERT $INFLUXDB_NAME,wan=$WAN,test_type=iperf3,isp=$ORG,ip=$IP download=$DOWNLOAD_Mbps,upload=$UPLOAD_Mbps"
fi
fi
# ---------------- Speedtest-cli Test ----------------
if [ "$SPEEDTESTCLI" -eq 1 ]; then
echo "Running speedtest-cli..."
SPEEDTEST=$(speedtest-cli --csv)
if [ -z "$SPEEDTEST" ] || [[ "$SPEEDTEST" == *"ERROR"* ]]; then
echo "Speedtest failed"
exit 1
fi
PING=$(echo "$SPEEDTEST" | awk -F',' '{print $6}')
DOWNLOAD=$(echo "$SPEEDTEST" | awk -F',' '{print $7}')
UPLOAD=$(echo "$SPEEDTEST" | awk -F',' '{print $8}')
DOWNLOAD_Mbps=$(awk "BEGIN { printf \"%.1f\", $DOWNLOAD / (1024*1024) }")
UPLOAD_Mbps=$(awk "BEGIN { printf \"%.1f\", $UPLOAD / (1024*1024) }")
if [ "$log" -eq 1 ]; then
echo "$(date +"%Y-%m-%d %H:%M:%S"),$WAN,Speedtest.net,$ORG,$IP,$DOWNLOAD_Mbps Mbps,$UPLOAD_Mbps Mbps" >> "$LOG_FILE"
fi
if [ "$DISCORD" -eq 1 ]; then
curl -H "Content-Type: application/json" -X POST --data @- "$WEBHOOK_URL" <<EOF
{
"embeds": [{
"title": "Speedtest.net Result - WAN $WAN",
"color": 5814783,
"fields": [
{"name": "Date", "value": "$(date +'%Y-%m-%d %H:%M:%S')"},
{"name": "ISP", "value": "$ORG"},
{"name": "IP", "value": "$IP"},
{"name": "Ping", "value": "$PING ms"},
{"name": "Download", "value": "$DOWNLOAD_Mbps Mbps"},
{"name": "Upload", "value": "$UPLOAD_Mbps Mbps"}
]
}]
}
EOF
fi
if [ "$INFLUX" -eq 1 ]; then
influx --database="$INFLUXDB_NAME" --host="$INFLUXDB_HOST" \
--execute="INSERT $INFLUXDB_NAME,wan=$WAN,test_type=speedtest.net,isp=$ORG,ip=$IP download=$DOWNLOAD_Mbps,upload=$UPLOAD_Mbps"
fi
fi