diff --git a/runtest.sh b/runtest.sh index 44d83c9..171df78 100755 --- a/runtest.sh +++ b/runtest.sh @@ -5,38 +5,43 @@ trap 'echo "[✖] Execution halted at line $LINENO. Please consult your nearest trap 'echo "[✌️] Script exited cleanly. Have a burrito." >&2' EXIT NO_ENRICH=0 +NO_IPERF=0 LISTENER_ENABLED=0 LISTENER_ARGS=() while [[ $# -gt 0 ]]; do case "$1" in - --no-enrich) - NO_ENRICH=1 - shift - ;; - --listener) - LISTENER_ENABLED=1 - NO_ENRICH=1 - shift - ;; - --listener-channel=*) - LISTENER_ARGS+=("--channel" "${1#*=}") - shift - ;; - --listener-hop) - LISTENER_ARGS+=("--channel-hop") - shift - ;; - *) - echo "Unknown argument: $1" - exit 1 - ;; + --no-enrich) + NO_ENRICH=1 + shift + ;; + --listener) + LISTENER_ENABLED=1 + NO_ENRICH=1 + shift + ;; + --listener-channel=*) + LISTENER_ARGS+=("--channel" "${1#*=}") + shift + ;; + --listener-hop) + LISTENER_ARGS+=("--channel-hop") + shift + ;; + --no-iperf) + NO_IPERF=1 + shift + ;; + *) + echo "Unknown argument: $1" + exit 1 + ;; esac done IFS=$'\n\t' -echo "Here are the arguments passed to the script: $@" +echo "Here are the arguments passed to the script: $@" # === Now start your real script === source settings.env @@ -76,7 +81,10 @@ log "Enriched file: $ENRICHED_FILE" log "SSID metrics file: $SSID_METRICS_FILE" sudo -v -while true; do sudo -n true; sleep 60; done 2>/dev/null & +while true; do + sudo -n true + sleep 60 +done 2>/dev/null & SUDO_KEEPALIVE_PID=$! if [ "$LISTENER_ENABLED" -eq 0 ]; then @@ -93,9 +101,12 @@ get_tx_failed() { freq_to_channel() { local freq=$1 - if (( freq >= 2412 && freq <= 2472 )); then echo $(((freq - 2407) / 5)) - elif (( freq == 2484 )); then echo 14 - elif (( freq >= 5180 && freq <= 5825 )); then echo $(((freq - 5000) / 5)) + if ((freq >= 2412 && freq <= 2472)); then + echo $(((freq - 2407) / 5)) + elif ((freq == 2484)); then + echo 14 + elif ((freq >= 5180 && freq <= 5825)); then + echo $(((freq - 5000) / 5)) else echo "Unknown"; fi } @@ -144,7 +155,7 @@ FAILED_START=$(get_tx_failed) # CSV setup TEST_HEADER="StartTimestamp,EndTimestamp,Link,Level,Noise,BSSID,TX Bitrate,RX Bitrate,$(speedtest --csv-header),TX Failures,Channel,Frequency,Packet Loss,Jitter,LocalTCPUp,LocalTCPDown,LocalUDPUp,LocalUDPDown,RemoteTCPUp,RemoteTCPDown,RemoteUDPUp,RemoteUDPDown" LISTENER_HEADER="Timestamp,ClientsOnAP,ClientsOnChannel,APsOnChannel,AvgAPSignal,StrongestAPSignal,UnlinkedDevices,NumberofBSSIDsOnSSID,AvgSSIDSignal,MaxSSIDSignal,NumberofChannelsOnSSID,PacketCount,Deadpoints" -echo "Speedtest,LocalTCPUp,LocalTCPDown,LocalUDPUp,LocalUDPDown,RemoteTCPUp,RemoteTCPDown,RemoteUDPUp,RemoteUDPDown" > "${TEST_FILE}_durations.csv" +echo "Speedtest,LocalTCPUp,LocalTCPDown,LocalUDPUp,LocalUDPDown,RemoteTCPUp,RemoteTCPDown,RemoteUDPUp,RemoteUDPDown" >"${TEST_FILE}_durations.csv" if [ ! -f "$TEST_FILE" ]; then if [ "$LISTENER_ENABLED" -eq 1 ]; then @@ -201,7 +212,7 @@ for ((COUNTER = 1; COUNTER <= NUM_TESTS; COUNTER++)); do speedtest_duration=$SECONDS [[ -n "$speed_results" ]] && break warn "Speedtest failed. Retrying in $RETRY_DELAY seconds..." - echo "$(date -Iseconds),Speedtest failed on attempt $retry for test $COUNTER, sample $i" >> "$FAILURE_LOG" + echo "$(date -Iseconds),Speedtest failed on attempt $retry for test $COUNTER, sample $i" >>"$FAILURE_LOG" sleep "$RETRY_DELAY" done @@ -225,31 +236,34 @@ for ((COUNTER = 1; COUNTER <= NUM_TESTS; COUNTER++)); do packet_loss=$(echo "$ping_output" | grep -oP '\d+(?=% packet loss)') jitter=$(echo "$ping_output" | grep "time=" | awk '{print $(NF-1)}' | sed 's/time=//g' | awk '{sum+=$1; sumsq+=$1*$1} END {if (NR>1) print sqrt(sumsq/NR - (sum/NR)**2); else print 0}') - log " Running iperf3 tests..." - SECONDS=0 - LocalTCPUp=$(run_iperf "$IPERF_LOCAL_TARGET" tcp up) - localtcpup_duration=$SECONDS - SECONDS=0 - LocalTCPDown=$(run_iperf "$IPERF_LOCAL_TARGET" tcp down) - localtcpdown_duration=$SECONDS - SECONDS=0 - LocalUDPUp=$(run_iperf "$IPERF_LOCAL_TARGET" udp up) - localudpup_duration=$SECONDS - SECONDS=0 - LocalUDPDown=$(run_iperf "$IPERF_LOCAL_TARGET" udp down) - localudpdown_duration=$SECONDS - SECONDS=0 - RemoteTCPUp=$(run_iperf "$IPERF_REMOTE_TARGET" tcp up) - remotetcpup_duration=$SECONDS - SECONDS=0 - RemoteTCPDown=$(run_iperf "$IPERF_REMOTE_TARGET" tcp down) - remotetcpdown_duration=$SECONDS - SECONDS=0 - RemoteUDPUp=$(run_iperf "$IPERF_REMOTE_TARGET" udp up) - remoteudpup_duration=$SECONDS - SECONDS=0 - RemoteUDPDown=$(run_iperf "$IPERF_REMOTE_TARGET" udp down) - remoteudpdown_duration=$SECONDS + if [ "$NO_IPERF" -eq 0 ]; then + log " Running iperf3 tests..." + SECONDS=0 + LocalTCPUp=$(run_iperf "$IPERF_LOCAL_TARGET" tcp up) + localtcpup_duration=$SECONDS + ... + SECONDS=0 + RemoteUDPDown=$(run_iperf "$IPERF_REMOTE_TARGET" udp down) + remoteudpdown_duration=$SECONDS + else + log " Skipping iperf3 tests as per --no-iperf flag" + LocalTCPUp=0 + LocalTCPDown=0 + LocalUDPUp=0 + LocalUDPDown=0 + RemoteTCPUp=0 + RemoteTCPDown=0 + RemoteUDPUp=0 + RemoteUDPDown=0 + localtcpup_duration=0 + localtcpdown_duration=0 + localudpup_duration=0 + localudpdown_duration=0 + remotetcpup_duration=0 + remotetcpdown_duration=0 + remoteudpup_duration=0 + remoteudpdown_duration=0 + fi if [ "$LISTENER_ENABLED" -eq 1 ]; then if [ -n "${LISTENER_PID:-}" ]; then @@ -260,26 +274,26 @@ for ((COUNTER = 1; COUNTER <= NUM_TESTS; COUNTER++)); do fi END_TIME=$(date -Iseconds) - + if [ "$LISTENER_ENABLED" -eq 1 ] && [ -n "${LISTENER_SAMPLE_FILE:-}" ]; then if [ -f "$LISTENER_SAMPLE_FILE" ]; then LISTENER_ROW=$(tail -n 1 "$LISTENER_SAMPLE_FILE") if [ -n "$LISTENER_ROW" ]; then - echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown,$LISTENER_ROW" >> "$TEST_FILE" + echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown,$LISTENER_ROW" >>"$TEST_FILE" else warn "Listener output file $LISTENER_SAMPLE_FILE was empty. Appending blank listener columns." - echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown,$(yes ',' | head -n 12 | tr -d '\n')" >> "$TEST_FILE" + echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown,$(yes ',' | head -n 12 | tr -d '\n')" >>"$TEST_FILE" fi rm -f "$LISTENER_SAMPLE_FILE" else warn "Listener sample file $LISTENER_SAMPLE_FILE not found. Appending blank listener columns." - echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown,$(yes ',' | head -n 12 | tr -d '\n')" >> "$TEST_FILE" + echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown,$(yes ',' | head -n 12 | tr -d '\n')" >>"$TEST_FILE" fi else - echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown" >> "$TEST_FILE" + echo "$START_TIME,$END_TIME,$link_level_noise,$bssid_and_bitrate,$speed_results,$FAILED_DELTA,$channel,$freq,$packet_loss,$jitter,$LocalTCPUp,$LocalTCPDown,$LocalUDPUp,$LocalUDPDown,$RemoteTCPUp,$RemoteTCPDown,$RemoteUDPUp,$RemoteUDPDown" >>"$TEST_FILE" fi - echo "$START_TIME,$speedtest_duration,$localtcpup_duration,$localtcpdown_duration,$localudpup_duration,$localudpdown_duration,$remotetcpup_duration,$remotetcpdown_duration,$remoteudpup_duration,$remoteudpdown_duration" >> "${TEST_FILE}_durations.csv" + echo "$START_TIME,$speedtest_duration,$localtcpup_duration,$localtcpdown_duration,$localudpup_duration,$localudpdown_duration,$remotetcpup_duration,$remotetcpdown_duration,$remoteudpup_duration,$remoteudpdown_duration" >>"${TEST_FILE}_durations.csv" done