[DEPRECATED] Go implementation of plcbundle
1#!/usr/bin/env bash
2
3ENDPOINT="${1:-http://localhost:8080}"
4NUM="${2:-100}"
5DIR="${3:-.}"
6
7echo "=== DID Resolver Benchmark ==="
8echo "Endpoint: $ENDPOINT"
9echo "Requests: $NUM"
10echo ""
11
12# Extract DIDs
13echo "Extracting DIDs..."
14TEMP=$(mktemp)
15trap "rm -f $TEMP ${TEMP}.*" EXIT
16
17find "$DIR" -name "*.jsonl.zst" | head -5 | while read f; do
18 zstd -dc "$f" | jq -r '.did'
19done | sort -u | shuf -n $NUM > "$TEMP"
20
21TOTAL=$(wc -l < "$TEMP" | tr -d ' ')
22echo "Testing $TOTAL DIDs"
23echo ""
24
25# Run benchmark
26echo "Benchmarking..."
27SUCCESS=0
28FAILED=0
29
30while read did; do
31 START=$(date +%s%N)
32 CODE=$(curl -s -o /dev/null -w "%{http_code}" "$ENDPOINT/$did" 2>/dev/null)
33 END=$(date +%s%N)
34
35 MS=$(( (END - START) / 1000000 ))
36
37 if [[ $CODE == "200" ]]; then
38 SUCCESS=$((SUCCESS + 1))
39 echo "$MS" >> "${TEMP}.times"
40 else
41 FAILED=$((FAILED + 1))
42 fi
43
44 DONE=$((SUCCESS + FAILED))
45 if (( DONE % 10 == 0 )); then
46 printf "\r %d/%d " $DONE $TOTAL
47 fi
48done < "$TEMP"
49
50echo ""
51echo ""
52echo "Results:"
53echo " Success: $SUCCESS"
54echo " Failed: $FAILED"
55
56if [[ $SUCCESS -gt 0 ]]; then
57 sort -n "${TEMP}.times" -o "${TEMP}.times"
58
59 MIN=$(head -1 "${TEMP}.times")
60 MAX=$(tail -1 "${TEMP}.times")
61 AVG=$(awk '{s+=$1} END {printf "%.0f", s/NR}' "${TEMP}.times")
62
63 # Percentiles
64 P50=$(sed -n "$(awk "BEGIN {print int($SUCCESS * 0.50)}")p" "${TEMP}.times")
65 P90=$(sed -n "$(awk "BEGIN {print int($SUCCESS * 0.90)}")p" "${TEMP}.times")
66 P95=$(sed -n "$(awk "BEGIN {print int($SUCCESS * 0.95)}")p" "${TEMP}.times")
67
68 echo ""
69 echo " Min: ${MIN}ms"
70 echo " Avg: ${AVG}ms"
71 echo " p50: ${P50}ms"
72 echo " p90: ${P90}ms"
73 echo " p95: ${P95}ms"
74 echo " Max: ${MAX}ms"
75fi