You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.9 KiB
Bash

#!/bin/bash
# Usage: doSpeedtest [<interface>] [<speedtest-server-id>]
function doSpeedtest {
if ! [ "${1}" = "" ]; then
INTERFACE=${1}
INTERFACE_ARG="-I ${INTERFACE}"
INTERFACE_TEXT=" from NIC '${INTERFACE}'"
fi
if ! [ "${2}" = "" ]; then
SERVER_ID=${2}
SERVER_ARG="-s ${SERVER_ID}"
SERVER_ID_TEXT=" to server ${SERVER_ID}"
fi
logScript "Doing internet speedtest${INTERFACE_TEXT}${SERVER_ID_TEXT}"
if ! OUT=$(speedtest -f json 2>/dev/null); then
logError "Speedtest failed"
echo "${OUT}" | logError
SUCCESS=false
JITTER=-1
LATENCY=-1
PING_LOW=-1
PING_HIGH=-1
DOWNLOAD_BANDWIDTH=0
UPLOAD_BANDWIDTH=0
PACKET_LOSS=-1
ISP=""
INTERFACE=""
EXTERNAL_IP=""
SERVER_ID=""
RESULT_ID=""
else
SUCCESS=true
JITTER=$(echo "${OUT}" | jq .ping.jitter)
LATENCY=$(echo "${OUT}" | jq .ping.latency)
PING_LOW=$(echo "${OUT}" | jq .ping.low)
PING_HIGH=$(echo "${OUT}" | jq .ping.high)
DOWNLOAD_BANDWIDTH=$(echo "${OUT}" | jq .download.bandwidth)
UPLOAD_BANDWIDTH=$(echo "${OUT}" | jq .upload.bandwidth)
PACKET_LOSS=$(echo "${OUT}" | jq .packetLoss)
ISP="$(echo "${OUT}" | jq .isp)"
INTERFACE=$(echo "${OUT}" | jq .interface.name)
EXTERNAL_IP=$(echo "${OUT}" | jq .interface.externalIp)
SERVER_ID=$(echo "${OUT}" | jq .server.id)
RESULT_ID=$(echo "${OUT}" | jq .result.id)
fi
writeData \
speedtest \
"sourceHost=$(hostname -f)" \
"success=${SUCCESS},jitter=${JITTER},latency=${LATENCY},ping_low=${PING_LOW},ping_high=${PING_HIGH},download_bandwidth=${DOWNLOAD_BANDWIDTH},upload_bandwidth=${UPLOAD_BANDWIDTH},packetloss=${PACKET_LOSS},isp=${ISP},interface=${INTERFACE},external_ip=${EXTERNAL_IP},server_id=${SERVER_ID},result_id=${RESULT_ID}"
}