#!/bin/bash #!/bin/bash set -euo pipefail METRIC=${1:-cpu_usage} RATE=${2:-100} INTERVAL=$(awk "BEGIN {print 1/$RATE}") COUNT=0 START_TS=$(date +%s) print_summary() { END_TS=$(date +%s) DURATION=$((END_TS - START_TS)) if [ "$DURATION" -le 0 ]; then DURATION=1 fi AVG_RATE=$(awk "BEGIN {printf \"%.2f\", $COUNT/$DURATION}") echo echo "=== worker.sh summary ===" echo "metric : $METRIC" echo "rate target : $RATE req/s" echo "duration : ${DURATION}s" echo "sent : $COUNT" echo "avg rate : $AVG_RATE req/s" } cleanup() { print_summary exit 0 } trap cleanup SIGINT SIGTERM while true; do VALUE=$RANDOM START=$(date +%s%N) curl -s -X POST http://localhost:3000/metrics \ -H "Content-Type: application/json" \ -d "{\"metric\":\"$METRIC\",\"timestamp\":$(date +%s),\"value\":$VALUE}" >/dev/null COUNT=$((COUNT + 1)) END=$(date +%s%N) ELAPSED=$(awk "BEGIN {print ($END - $START)/1000000000}") SLEEP=$(awk "BEGIN {print $INTERVAL - $ELAPSED}") if (( $(echo "$SLEEP > 0" | bc -l) )); then sleep "$SLEEP" fi done