Here is my first script, which I had to use to retrieve statistics about HTTP GET (handy for stress testing against webservers and so):
#!/bin/bash
#
# Filename: httpStressTest.sh
#
# Description: Generate simple report for single-threaded http get response
#
# Author: BRAGA, Bruno
#
# Last Updated: 2008/06/29
#
# Remarks:
#
# The following parameters can be used:
#
# --url (Mandatory) define the URL to be tested
# --loop how many connections will be done to build the stats
# if not specified, it will use [10]
# --help displays the help information
#
# Eg. httpStressTest.sh --url http://www.google.com --loop 100
#
#
# Dependencies: gawk, sed, grep, time, wget
#
# Function: get_webpage_dowload_time
#
# Description: retrieve how long (in milliseconds) does the web
# takes to respond.
#
# Parameters: {url}
# The url to be contacted
#
# Remarks: Verify your internet connection before proceeding
#
# Dependencies: gawk, sed, grep, time, wget
#
function get_webpage_dowload_time()
{
# define the input value
local url=$1
# create temp file
local temp_file=`mktemp`
# store the server time for accessing url
(time wget -q $url --delete-after) 2> $temp_file
# get server time value from temp file
local elapsed_time=`cat $temp_file | grep real | \
sed "s/real//;s/[\t]//;s/m/./;s/s//" | \
gawk 'BEGIN {FS="."} {x=$1;y=$2;z=$3; res= x*60000 + y*1000 + z; print res}'`
# remove temp file
rm $temp_file
# Done!
echo $elapsed_time
}
function help()
{
cat << EOF
Usage: httpStressTest.sh --url {URL} [OPTIONS]
Generate simple report for single-threaded http get response
--url (Mandatory) define the URL to be tested
--loop how many connections will be done to build the stats
if not specified, it will use [10]
--help displays the help information
Example: httpStressTest.sh --url http://www.google.com
Author: BRAGA, Bruno.
BUGS: Feel free to send a message to me at bruno.braga@gmail.com.
EOF
}
# Check the parameters
opts=$(getopt -l -o "help,url,loop")
while [ $# -gt 0 ]; do
case $1 in
--help)
help
exit 0
;;
--url)
url=$2
shift 2
;;
--loop)
loop=$2
shift 2
;;
*)
echo "Invalid option: $1" 1>&2
exit 1
;;
esac
done
# Exit in case no parameters were provided (url is mandatory)
if [ ! -n "$url" ]; then
echo "Parameter [url] missing!"
echo "Try '$progname --help' for more information" 1>&2
exit 1
fi
# Define defaults
if [ ! -n "$loop" ]
then
loop=10
fi
# Clear the terminal
clear
echo "Starting URL http get response time statistics test..."
echo
echo "Parameters: url=[$url], loop=[$loop]"
echo
# Loop n tries
for ((i = 1; i <= $loop; i++))
do
elapsed_time=`get_webpage_dowload_time $url`
temp="$temp $elapsed_time"
echo "Test [$i] took [$elapsed_time] milliseconds."
done
# Building statistics...
# Set the array
array=(`echo $temp`)
avg_time=0
max_time=0
min_time=10000000
for value in ${array[*]}
do
# get average
avg_time=$(($avg_time + $value/$loop))
# get min value
if (( $value < $min_time ))
then
min_time=$value
fi
# get max value
if (( $value > $max_time ))
then
max_time=$value
fi
done
echo
echo "-----------"
echo "Total of tests: [$loop]"
echo "max_time=[$max_time], min_time=[$min_time], avg_time=[$avg_time]"
echo
echo "Done!"
exit 0
If you are interested on how I colored the code page (took me a while to find it), here it goes:
use the VIM (what? that simple? YES)... just one note to add is that the VIM rendered HTML is for black background, then you would need to change the color settings by yourself. What I did was to install the GVIM in my machine, and then just export the syntax to html. And that'S the result you see here! Isn't it great?