diff --git a/runtest.sh b/runtest.sh index 31a2553..abc44af 100755 --- a/runtest.sh +++ b/runtest.sh @@ -5,12 +5,28 @@ trap 'echo "[✖] Execution halted at line $LINENO. Please consult your nearest trap 'echo "[✌️] Script exited cleanly. Have a burrito." >&2' EXIT NO_ENRICH=0 +LISTENER_ENABLED=0 +LISTENER_ARGS=() + for arg in "$@"; do case $arg in --no-enrich) NO_ENRICH=1 shift ;; + --listener) + LISTENER_ENABLED=1 + NO_ENRICH=1 + shift + ;; + --listener-channel=*) + LISTENER_ARGS+=("--channel" "${arg#*=}") + shift + ;; + --listener-hop) + LISTENER_ARGS+=("--channel-hop") + shift + ;; *) echo "Unknown argument: $arg" exit 1 @@ -135,11 +151,32 @@ log "Start email sent in $SECONDS seconds" FAILED_START=$(get_tx_failed) # CSV setup -[ ! -f "$TEST_FILE" ] && echo "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" >"$TEST_FILE" +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" + +if [ ! -f "$TEST_FILE" ]; then + if [ "$LISTENER_ENABLED" -eq 1 ]; then + echo "$TEST_HEADER,$LISTENER_HEADER" >"$TEST_FILE" + else + echo "$TEST_HEADER" >"$TEST_FILE" + fi +fi for ((COUNTER = 1; COUNTER <= NUM_TESTS; COUNTER++)); do + log "Test run $COUNTER of $NUM_TESTS" for ((i = 1; i <= NUM_SAMPLES; i++)); do + if [ "$LISTENER_ENABLED" -eq 1 ]; then + LISTENER_SAMPLE_FILE="${TEST_FILE%.csv}-listener-$COUNTER-$i.csv" + + log "Launching listener for sample $COUNTER/$i..." + sudo "${SCRIPT_DIRECTORY}/listener.py" \ + --main-iface "$INTERFACE" \ + --monitor-iface "$LISTEN_INTERFACE" \ + --outfile "$LISTENER_SAMPLE_FILE" \ + "${LISTENER_ARGS[@]}" & + LISTENER_PID=$! + fi log " Sample $i of $NUM_SAMPLES" START_TIME=$(date -Iseconds) @@ -192,6 +229,22 @@ for ((COUNTER = 1; COUNTER <= NUM_TESTS; COUNTER++)); do RemoteUDPUp=$(run_iperf "$IPERF_REMOTE_TARGET" udp up) RemoteUDPDown=$(run_iperf "$IPERF_REMOTE_TARGET" udp down) + if [ "$LISTENER_ENABLED" -eq 1 ]; then + if [ -n "${LISTENER_PID:-}" ]; then + log "Stopping listener (PID $LISTENER_PID)..." + sudo kill -SIGINT "$LISTENER_PID" + wait "$LISTENER_PID" + fi + + if [ -f "$LISTENER_SAMPLE_FILE" ]; then + log "Appending listener sample to main CSV..." + tail -n 1 "$LISTENER_SAMPLE_FILE" >> "$TEST_FILE" + rm -f "$LISTENER_SAMPLE_FILE" + else + warn "Listener output not found for sample $COUNTER/$i" + fi + fi + END_TIME=$(date -Iseconds) 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" done @@ -218,6 +271,7 @@ ATTACHMENTS=() [ -f "$ENRICHED_FILE" ] && ATTACHMENTS+=("$ENRICHED_FILE") [ -f "$FAILURE_LOG" ] && ATTACHMENTS+=("$FAILURE_LOG") [ -f "$SSID_METRICS_FILE" ] && ATTACHMENTS+=("$SSID_METRICS_FILE") +[ -f "$LISTENER_OUTFILE" ] && ATTACHMENTS+=("$LISTENER_OUTFILE") if [ ${#ATTACHMENTS[@]} -eq 0 ]; then warn "No files to attach. Email not sent."