2026-03-24 13:30:27 +00:00

57 lines
1.1 KiB
Bash
Executable File

#!/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