[DEPRECATED] Go implementation of plcbundle
at main 1.8 kB view raw
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