108 lines
2.4 KiB
Bash
Executable File
108 lines
2.4 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
# Calculate start time as unix timestamp.
|
|
|
|
PLATFORM=`uname`
|
|
|
|
_date_to_unix_timestamp () {
|
|
if [ "$PLATFORM" = "Darwin" ] ; then
|
|
date -j -f "%b %d %T %Z %Y" "$1" "+%s"
|
|
elif [ "$PLATFORM" = "Linux" ] ; then
|
|
date -d "$1" "+%s"
|
|
else
|
|
echo "I don't know if your date can read a format and a time, failing"
|
|
exit 99
|
|
fi
|
|
}
|
|
|
|
_timestamp_to_time_string () {
|
|
if [ "$PLATFORM" = "Darwin" ] ; then
|
|
date -j -f "%s" "$1" +"%Y-%m-%dT%H:%M:%SZ"
|
|
elif [ "$PLATFORM" = "Linux" ] ; then
|
|
date -d "@$1" +"%Y-%m-%dT%H:%M:%SZ"
|
|
fi
|
|
}
|
|
|
|
# Starting the test at "Jan 01 00:00:00 GMT 2000"
|
|
TIME=`_date_to_unix_timestamp "Jan 01 00:00:00 GMT 2000"`
|
|
|
|
|
|
# Set defaults.
|
|
INTERVAL=10 # 1s
|
|
NUMCLIENTS=10
|
|
NUMSERIES=1
|
|
|
|
# Parse arguments
|
|
while getopts "s:c:i:h" opt; do
|
|
case $opt in
|
|
i)
|
|
INTERVAL=$OPTARG
|
|
;;
|
|
c)
|
|
NUMCLIENTS=$OPTARG
|
|
;;
|
|
s)
|
|
NUMSERIES=$OPTARG
|
|
;;
|
|
h)
|
|
echo "urlgen is a utility for generating URL files for siege."
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " urlgen.sh [OPTIONS]"
|
|
echo ""
|
|
echo "The following arguments can be specified:"
|
|
echo ""
|
|
echo " -i seconds"
|
|
echo " Interval between requests."
|
|
echo " Defaults to 10 seconds."
|
|
echo ""
|
|
echo " -s num"
|
|
echo " Number of unique series to generate."
|
|
echo " Defaults to 1 series."
|
|
echo ""
|
|
echo " -c num"
|
|
echo " Number of clients to simulate."
|
|
echo " One request per client."
|
|
echo " Defaults to 10 clients."
|
|
echo ""
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Generate a new request every interval per client.
|
|
for i in `seq 1 $NUMCLIENTS`;
|
|
do
|
|
# Move forward the current time.
|
|
TIME=$((TIME+INTERVAL))
|
|
TIMESTAMP=`_timestamp_to_time_string $TIME`
|
|
|
|
# Generate a URL for each series.
|
|
for series in `seq 1 $NUMSERIES`;
|
|
do
|
|
# Generate a URL for each second in the interval.
|
|
POINTS=""
|
|
for j in `seq 0 $INTERVAL`;
|
|
do
|
|
# Format the timestamp to ISO 8601.
|
|
let CURRTIME=TIME+j
|
|
TIMESTAMP=`_timestamp_to_time_string $CURRTIME`
|
|
|
|
# Add comma separator.
|
|
if [ "$j" -ne "0" ]
|
|
then
|
|
POINTS=$POINTS,
|
|
fi
|
|
|
|
# Append the point.
|
|
POINTS=$POINTS'{"name": "cpu", "tags": {"host": "server'$series'"}, "time": "'$TIMESTAMP'","fields": {"value": 100}}'
|
|
done
|
|
|
|
# Write out point.
|
|
echo 'http://localhost:8086/write POST {"database" : "db", "retentionPolicy" : "raw", "points": ['$POINTS']}'
|
|
done
|
|
|
|
# Move forward the current time.
|
|
let TIME=TIME+INTERVAL
|
|
done
|