mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-08 20:20:19 +08:00
94 lines
2.7 KiB
Bash
Executable File
94 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Gateway DB pressure probe.
|
|
#
|
|
# Required:
|
|
# TARGET_URL=http://127.0.0.1:18080/v1/chat/completions
|
|
# METRICS_URL=http://127.0.0.1:18080/_gateway/metrics
|
|
#
|
|
# Common optional settings:
|
|
# PRESSURE_REQUESTS=60000
|
|
# PRESSURE_CONCURRENCY=6000
|
|
# PRESSURE_TIMEOUT_MS=120000
|
|
# PRESSURE_SAMPLE_INTERVAL_MS=500
|
|
# PRESSURE_METHOD=POST
|
|
# PRESSURE_BODY='{"model":"...","messages":[...],"stream":true}'
|
|
# PRESSURE_BODY_FILE=/tmp/request.json
|
|
# PRESSURE_RESPONSE_MODE=full
|
|
# PRESSURE_CARGO_PROFILE=release
|
|
# AUTH_HEADER='Authorization: Bearer sk-...'
|
|
# EXTRA_HEADERS=$'Content-Type: application/json\nX-Foo: bar'
|
|
# OUTPUT=/tmp/aether_gateway_pressure_6k.json
|
|
|
|
TARGET_URL="${TARGET_URL:?TARGET_URL is required}"
|
|
METRICS_URL="${METRICS_URL:?METRICS_URL is required}"
|
|
PRESSURE_REQUESTS="${PRESSURE_REQUESTS:-60000}"
|
|
PRESSURE_CONCURRENCY="${PRESSURE_CONCURRENCY:-6000}"
|
|
PRESSURE_TIMEOUT_MS="${PRESSURE_TIMEOUT_MS:-120000}"
|
|
PRESSURE_SAMPLE_INTERVAL_MS="${PRESSURE_SAMPLE_INTERVAL_MS:-500}"
|
|
PRESSURE_METHOD="${PRESSURE_METHOD:-GET}"
|
|
PRESSURE_CARGO_PROFILE="${PRESSURE_CARGO_PROFILE:-release}"
|
|
OUTPUT="${OUTPUT:-/tmp/aether_gateway_pressure_6k.json}"
|
|
|
|
args=(run)
|
|
case "$PRESSURE_CARGO_PROFILE" in
|
|
release)
|
|
args+=(--release)
|
|
;;
|
|
debug)
|
|
;;
|
|
*)
|
|
echo "unsupported PRESSURE_CARGO_PROFILE=$PRESSURE_CARGO_PROFILE; expected release or debug" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
args+=(
|
|
-p aether-loadtools --bin gateway_pressure_probe --
|
|
--url "$TARGET_URL"
|
|
--metrics-url "$METRICS_URL"
|
|
--requests "$PRESSURE_REQUESTS"
|
|
--concurrency "$PRESSURE_CONCURRENCY"
|
|
--timeout-ms "$PRESSURE_TIMEOUT_MS"
|
|
--sample-interval-ms "$PRESSURE_SAMPLE_INTERVAL_MS"
|
|
--method "$PRESSURE_METHOD"
|
|
--output "$OUTPUT"
|
|
)
|
|
|
|
if [[ -n "${AUTH_HEADER:-}" ]]; then
|
|
args+=(--header "$AUTH_HEADER")
|
|
fi
|
|
|
|
if [[ -n "${EXTRA_HEADERS:-}" ]]; then
|
|
while IFS= read -r header; do
|
|
[[ -z "$header" ]] && continue
|
|
args+=(--header "$header")
|
|
done <<< "$EXTRA_HEADERS"
|
|
fi
|
|
|
|
if [[ -n "${PRESSURE_BODY_FILE:-}" ]]; then
|
|
args+=(--body-file "$PRESSURE_BODY_FILE")
|
|
elif [[ -n "${PRESSURE_BODY:-}" ]]; then
|
|
args+=(--body "$PRESSURE_BODY")
|
|
fi
|
|
|
|
if [[ -n "${PRESSURE_RESPONSE_MODE:-}" ]]; then
|
|
args+=(--response-mode "$PRESSURE_RESPONSE_MODE")
|
|
fi
|
|
|
|
echo "running gateway pressure probe"
|
|
echo " target: $TARGET_URL"
|
|
echo " metrics: $METRICS_URL"
|
|
echo " requests: $PRESSURE_REQUESTS"
|
|
echo " concurrency: $PRESSURE_CONCURRENCY"
|
|
echo " cargo: $PRESSURE_CARGO_PROFILE"
|
|
echo " output: $OUTPUT"
|
|
|
|
# Use quiet cargo output so sensitive header values (for example Authorization)
|
|
# are not echoed back as part of Cargo's `Running ...` command line.
|
|
cargo -q "${args[@]}"
|
|
|
|
echo
|
|
echo "pressure report written to $OUTPUT"
|