#!/usr/bin/env bash # Exhaustive NS1 ladder on the *current* 8c/16G cluster with JetStream on ZFS. # Adds r=1 vs r=3, file vs memory, reconnect tax, UDP echo, MQTT gateway probe. # Does not tmpfs (product streams stay). Must run on NS1. set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" export PATH="/usr/sbin:/usr/bin:/bin:/usr/local/bin:$PATH" HOST="$(hostname -f 2>/dev/null || hostname)" case "$HOST" in NS1.GEORGELAMBERT.ORG|NS1|ns1.georgelambert.org|ns1) ;; *) echo "refusing: exhaustive-ns1-study.sh must run on NS1, got '$HOST'" >&2; exit 1 ;; esac export EXHAUSTIVE=1 export JS_EXTRA_MEMORY=1 export COMPARE_DIR="${COMPARE_DIR:-$ROOT/results/20260912T051237Z}" STAMP="$(date -u +%Y%m%dT%H%M%SZ)" export BENCH_OUT="$ROOT/results/$STAMP" mkdir -p "$BENCH_OUT" # MQTT gateway on nats-a only (vmbr1). Restored after. MQTT_CONF=/etc/nats/nats.conf enable_mqtt() { sudo pct exec 511 -- bash -lc ' set -e f=/etc/nats/nats.conf grep -q "^mqtt {" "$f" && exit 0 cat >> "$f" </dev/null 2>&1 || true' sudo pct exec 511 -- bash -c 'cat > /tmp/udp-probe.mjs' < "$ROOT/scripts/udp-probe.mjs" sudo pct exec 510 -- bash -c 'cat > /tmp/nats-lat/udp-probe.mjs' < "$ROOT/scripts/udp-probe.mjs" sudo pct exec 511 -- bash -lc 'setsid node /tmp/udp-probe.mjs server 9999 >/tmp/udp-echo.log 2>&1 < /dev/null &' sleep 1 echo "=== udp-ping-1k-128 ===" | tee "$OUT/udp-ping-1k-128.txt" sudo pct exec 510 -- bash -lc 'node /tmp/nats-lat/udp-probe.mjs client 10.10.10.21 1000 9999 128' | tee -a "$OUT/udp-ping-1k-128.txt" sudo pct exec 511 -- bash -lc 'pkill -f "udp-probe.mjs server" || true' # MQTT QoS0 sudo pct exec 510 -- bash -lc ' set -e cd /tmp/nats-lat if [[ ! -d node_modules/mqtt ]]; then npm install --no-audit --no-fund mqtt@10 >/dev/null; fi ' sudo pct exec 510 -- bash -c 'cat > /tmp/nats-lat/mqtt-probe.mjs' < "$ROOT/scripts/mqtt-probe.mjs" echo "=== mqtt-qos0-5k-128 ===" | tee "$OUT/mqtt-qos0-5k-128.txt" sudo pct exec 510 -- bash -lc 'cd /tmp/nats-lat && node mqtt-probe.mjs mqtt://10.10.10.21:1883 5000 128' | tee -a "$OUT/mqtt-qos0-5k-128.txt" || echo '{"error":"mqtt probe failed"}' | tee -a "$OUT/mqtt-qos0-5k-128.txt" python3 "$ROOT/scripts/build-optimal-report.py" "$OUT" \ "$ROOT/results/20260912T045131Z" \ "$ROOT/results/20260912T051237Z" \ "$ROOT/results/20260912T053120Z" echo "exhaustive complete $OUT"