feat: HTTP registry, app/bench harnesses, and DWARF #line maps
Ship QUALITY_PLAN sessions 31–33: fetchable package index URLs, showcase app and micro/nexus benchmarks, and debugger-friendly C codegen. - Registry: BUX_REGISTRY accepts http(s) URLs (curl/wget → ~/.bux/cache) - E.2: make test-apps smoke for nexus/boko/simpledb/jwt-pitbul - E.5: benches/micro + C/Nim/Zig twins; make bench-nexus (wrk) - E.4: HIR locs → #line .bux; default -O0 -g; --release -O2; make test-dwarf
This commit is contained in:
Executable
+88
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
# Nexus HTTP throughput bench (E.5) — wrk against /api/health
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
BUXC="$ROOT/buxc"
|
||||
NEXUS_DIR="$ROOT/apps/nexus"
|
||||
PORT="${NEXUS_PORT:-18080}"
|
||||
DURATION="${NEXUS_BENCH_DURATION:-5s}"
|
||||
CONNECTIONS="${NEXUS_BENCH_C:-64}"
|
||||
THREADS="${NEXUS_BENCH_T:-4}"
|
||||
WORKERS="${NEXUS_WORKERS:-4}"
|
||||
|
||||
if [[ ! -x "$BUXC" ]]; then
|
||||
(cd "$ROOT" && make build >/dev/null)
|
||||
fi
|
||||
|
||||
if ! command -v wrk >/dev/null 2>&1; then
|
||||
echo "error: wrk not found (apt install wrk / package manager)" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
echo "error: curl required" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== build nexus ==="
|
||||
(cd "$NEXUS_DIR" && "$BUXC" build)
|
||||
|
||||
# Free port if something leftover
|
||||
if command -v fuser >/dev/null 2>&1; then
|
||||
fuser -k "${PORT}/tcp" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
export NEXUS_PORT="$PORT"
|
||||
export NEXUS_BIND="127.0.0.1"
|
||||
export NEXUS_WORKERS="$WORKERS"
|
||||
export NEXUS_PUBLIC="$NEXUS_DIR/public"
|
||||
|
||||
PID=""
|
||||
cleanup() {
|
||||
if [[ -n "$PID" ]]; then
|
||||
kill "$PID" 2>/dev/null || true
|
||||
wait "$PID" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "=== start nexus :${PORT} (workers=${WORKERS}) ==="
|
||||
(
|
||||
cd "$NEXUS_DIR"
|
||||
./build/nexus
|
||||
) >"$ROOT/benches/nexus_run.log" 2>&1 &
|
||||
PID=$!
|
||||
|
||||
URL="http://127.0.0.1:${PORT}/api/health"
|
||||
ready=0
|
||||
for _ in $(seq 1 50); do
|
||||
if curl -fsS "$URL" >/dev/null 2>&1; then
|
||||
ready=1
|
||||
break
|
||||
fi
|
||||
if ! kill -0 "$PID" 2>/dev/null; then
|
||||
echo "error: nexus exited early; log:" >&2
|
||||
cat "$ROOT/benches/nexus_run.log" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
if [[ "$ready" -ne 1 ]]; then
|
||||
echo "error: nexus did not become ready on $URL" >&2
|
||||
cat "$ROOT/benches/nexus_run.log" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== curl sanity ==="
|
||||
curl -fsS "$URL"
|
||||
echo ""
|
||||
|
||||
echo "=== wrk -t${THREADS} -c${CONNECTIONS} -d${DURATION} ${URL} ==="
|
||||
wrk -t"$THREADS" -c"$CONNECTIONS" -d"$DURATION" --latency "$URL" | tee "$ROOT/benches/nexus_wrk.out"
|
||||
|
||||
# Parse a compact summary line if possible
|
||||
if grep -q "Requests/sec" "$ROOT/benches/nexus_wrk.out"; then
|
||||
rps=$(grep "Requests/sec" "$ROOT/benches/nexus_wrk.out" | awk '{print $2}')
|
||||
echo "BENCH nexus_health rps=${rps} port=${PORT} workers=${WORKERS} c=${CONNECTIONS} t=${THREADS} d=${DURATION}"
|
||||
fi
|
||||
|
||||
echo "PASS: nexus throughput bench"
|
||||
Reference in New Issue
Block a user