influxdb/tests/siege/urlgen

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