59 lines
1.5 KiB
Bash
59 lines
1.5 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Load generator for Pyroscope demo
|
|
# Run this to generate traffic that will show up in Pyroscope
|
|
#
|
|
|
|
BASE_URL="${1:-http://localhost:5000}"
|
|
DURATION="${2:-60}" # seconds
|
|
|
|
echo "Generating load to $BASE_URL for $DURATION seconds"
|
|
echo "Press Ctrl+C to stop"
|
|
echo ""
|
|
|
|
end_time=$(($(date +%s) + DURATION))
|
|
request_count=0
|
|
|
|
while [ $(date +%s) -lt $end_time ]; do
|
|
# Mix of different endpoints
|
|
case $((RANDOM % 10)) in
|
|
0|1|2|3)
|
|
# 40% - CPU intensive (primes)
|
|
n=$((1000 + RANDOM % 4000))
|
|
curl -s "$BASE_URL/api/primes/$n" > /dev/null
|
|
;;
|
|
4|5)
|
|
# 20% - Hash (uncached)
|
|
data="data_$(($RANDOM % 100))"
|
|
curl -s "$BASE_URL/api/hash/$data" > /dev/null
|
|
;;
|
|
6|7)
|
|
# 20% - Hash (cached)
|
|
data="data_$(($RANDOM % 10))" # Smaller set for better cache hits
|
|
curl -s "$BASE_URL/api/hash_cached/$data" > /dev/null
|
|
;;
|
|
8)
|
|
# 10% - Slow I/O
|
|
curl -s "$BASE_URL/api/slow_io" > /dev/null
|
|
;;
|
|
9)
|
|
# 10% - Mixed
|
|
curl -s "$BASE_URL/api/mixed/500" > /dev/null
|
|
;;
|
|
esac
|
|
|
|
request_count=$((request_count + 1))
|
|
|
|
# Print progress every 10 requests
|
|
if [ $((request_count % 10)) -eq 0 ]; then
|
|
echo -ne "\rRequests: $request_count"
|
|
fi
|
|
|
|
# Small delay to avoid overwhelming
|
|
sleep 0.1
|
|
done
|
|
|
|
echo ""
|
|
echo "Done! Total requests: $request_count"
|
|
echo "Check Pyroscope at http://localhost:4040"
|