#!/bin/bash # Usage: doSpeedtest [] [] 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}" }