Files
parrhesia/scripts/cloud_bench_client.sh
Steffen Beyer 9ed1d80b7f
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + E2E) (push) Failing after 0s
bench: simplify cloud bench flow and align phased naming
2026-03-20 20:56:32 +01:00

93 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
relay_url="${1:-}"
mode="${2:-all}"
if [[ -z "$relay_url" ]]; then
echo "usage: cloud-bench-client.sh <relay-url> [connect|echo|event|req|seed|all]" >&2
exit 1
fi
bench_bin="${NOSTR_BENCH_BIN:-/usr/local/bin/nostr-bench}"
bench_threads="${PARRHESIA_BENCH_THREADS:-0}"
client_nofile="${PARRHESIA_BENCH_CLIENT_NOFILE:-262144}"
ulimit -n "${client_nofile}" >/dev/null 2>&1 || true
run_connect() {
echo "==> nostr-bench connect ${relay_url}"
"$bench_bin" connect --json \
-c "${PARRHESIA_BENCH_CONNECT_COUNT:-200}" \
-r "${PARRHESIA_BENCH_CONNECT_RATE:-100}" \
-k "${PARRHESIA_BENCH_KEEPALIVE_SECONDS:-5}" \
-t "${bench_threads}" \
"${relay_url}"
}
run_echo() {
echo "==> nostr-bench echo ${relay_url}"
"$bench_bin" echo --json \
-c "${PARRHESIA_BENCH_ECHO_COUNT:-100}" \
-r "${PARRHESIA_BENCH_ECHO_RATE:-50}" \
-k "${PARRHESIA_BENCH_KEEPALIVE_SECONDS:-5}" \
-t "${bench_threads}" \
--size "${PARRHESIA_BENCH_ECHO_SIZE:-512}" \
"${relay_url}"
}
run_event() {
echo "==> nostr-bench event ${relay_url}"
"$bench_bin" event --json \
-c "${PARRHESIA_BENCH_EVENT_COUNT:-100}" \
-r "${PARRHESIA_BENCH_EVENT_RATE:-50}" \
-k "${PARRHESIA_BENCH_KEEPALIVE_SECONDS:-5}" \
-t "${bench_threads}" \
--send-strategy "${PARRHESIA_BENCH_EVENT_SEND_STRATEGY:-pipelined}" \
--inflight "${PARRHESIA_BENCH_EVENT_INFLIGHT:-32}" \
--ack-timeout "${PARRHESIA_BENCH_EVENT_ACK_TIMEOUT:-30}" \
"${relay_url}"
}
run_req() {
echo "==> nostr-bench req ${relay_url}"
"$bench_bin" req --json \
-c "${PARRHESIA_BENCH_REQ_COUNT:-100}" \
-r "${PARRHESIA_BENCH_REQ_RATE:-50}" \
-k "${PARRHESIA_BENCH_KEEPALIVE_SECONDS:-5}" \
-t "${bench_threads}" \
--limit "${PARRHESIA_BENCH_REQ_LIMIT:-10}" \
"${relay_url}"
}
run_seed() {
local target_accepted="${PARRHESIA_BENCH_SEED_TARGET_ACCEPTED:-}"
if [[ -z "$target_accepted" ]]; then
echo "PARRHESIA_BENCH_SEED_TARGET_ACCEPTED must be set for seed mode" >&2
exit 2
fi
echo "==> nostr-bench seed ${relay_url}"
"$bench_bin" seed --json \
--target-accepted "$target_accepted" \
-c "${PARRHESIA_BENCH_SEED_CONNECTION_COUNT:-5000}" \
-r "${PARRHESIA_BENCH_SEED_CONNECTION_RATE:-5000}" \
-k "${PARRHESIA_BENCH_SEED_KEEPALIVE_SECONDS:-0}" \
-t "${bench_threads}" \
--send-strategy "${PARRHESIA_BENCH_SEED_SEND_STRATEGY:-pipelined}" \
--inflight "${PARRHESIA_BENCH_SEED_INFLIGHT:-32}" \
--ack-timeout "${PARRHESIA_BENCH_SEED_ACK_TIMEOUT:-30}" \
"${relay_url}"
}
case "$mode" in
connect) run_connect ;;
echo) run_echo ;;
event) run_event ;;
req) run_req ;;
seed) run_seed ;;
all) run_connect; echo; run_echo; echo; run_event; echo; run_req ;;
*) echo "unknown mode: $mode" >&2; exit 1 ;;
esac