57 lines
1.1 KiB
Bash
Executable File
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
|