From 951dc0fcdb85a0e4601bc27fa7998fed02afe697 Mon Sep 17 00:00:00 2001 From: Kyle Marsh Date: Wed, 6 Jul 2011 12:53:11 -0700 Subject: [PATCH] dho-qa: Add siege config file and document running siege Adds siege.conf file for siege configuration options Adds docstring to main function in generate_objects.py describing how to run the static content load test. --- generate_objects.conf | 3 +- generate_objects.py | 12 ++ siege.conf | 382 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 siege.conf diff --git a/generate_objects.conf b/generate_objects.conf index 2be00e3..b38a150 100644 --- a/generate_objects.conf +++ b/generate_objects.conf @@ -1,3 +1,2 @@ -- [3, 20, 5] -- [3, 30, 2] +- [10, 2000, 200] diff --git a/generate_objects.py b/generate_objects.py index e0c94c1..4cf6d22 100755 --- a/generate_objects.py +++ b/generate_objects.py @@ -91,6 +91,18 @@ def generate_objects(bucket, quantity, mean, stddev, seed, checksum=False): def main(): + '''To run the static content load test: + ./generate_objects.py -a S3_ACCESS_KEY -s S3_SECRET_KEY -O urls.txt --seed 1234 generate_objects.conf && siege -rc ./siege.conf -r 5 + + This creates a bucket with your S3 credentials and fills it with + garbage objects as described in generate_objects.conf. It writes a + list of URLS to those objects to ./urls.txt. siege then reads the + ./siege.conf config file which tells it to read from ./urls.txt and + log to ./siege.log and hammers each url in urls.txt 5 times (-r flag). + + Results are printed to the terminal and written in CSV format to + ./siege.log + ''' (options, args) = parse_opts(); #SETUP diff --git a/siege.conf b/siege.conf new file mode 100644 index 0000000..c40b334 --- /dev/null +++ b/siege.conf @@ -0,0 +1,382 @@ +# Updated by Siege 2.69, May-24-2010 +# Copyright 2000-2007 by Jeffrey Fulmer, et al. +# +# Siege configuration file -- edit as necessary +# For more information about configuring and running +# this program, visit: http://www.joedog.org/ + +# +# Variable declarations. You can set variables here +# for use in the directives below. Example: +# PROXY = proxy.joedog.org +# Reference variables inside ${} or $(), example: +# proxy-host = ${PROXY} +# You can also reference ENVIRONMENT variables without +# actually declaring them, example: +# logfile = $(HOME)/var/siege.log + +# +# Signify verbose mode, true turns on verbose output +# ex: verbose = true|false +# +verbose = true + +# +# CSV Verbose format: with this option, you can choose +# to format verbose output in traditional siege format +# or comma separated format. The latter will allow you +# to redirect output to a file for import into a spread +# sheet, i.e., siege > file.csv +# ex: csv = true|false (default false) +# +csv = true + +# +# Full URL verbose format: By default siege displays +# the URL path and not the full URL. With this option, +# you # can instruct siege to show the complete URL. +# ex: fullurl = true|false (default false) +# +# fullurl = true + +# +# Display id: in verbose mode, display the siege user +# id associated with the HTTP transaction information +# ex: display-id = true|false +# +# display-id = + +# +# Show logfile location. By default, siege displays the +# logfile location at the end of every run when logging +# You can turn this message off with this directive. +# ex: show-logfile = false +# +show-logfile = true + +# +# Default logging status, true turns logging on. +# ex: logging = true|false +# +logging = true + +# +# Logfile, the default siege logfile is $PREFIX/var/siege.log +# This directive allows you to choose an alternative log file. +# Environment variables may be used as shown in the examples: +# ex: logfile = /home/jeff/var/log/siege.log +# logfile = ${HOME}/var/log/siege.log +# logfile = ${LOGFILE} +# +logfile = ./siege.log + +# +# HTTP protocol. Options HTTP/1.1 and HTTP/1.0. +# Some webservers have broken implementation of the +# 1.1 protocol which skews throughput evaluations. +# If you notice some siege clients hanging for +# extended periods of time, change this to HTTP/1.0 +# ex: protocol = HTTP/1.1 +# protocol = HTTP/1.0 +# +protocol = HTTP/1.1 + +# +# Chunked encoding is required by HTTP/1.1 protocol +# but siege allows you to turn it off as desired. +# +# ex: chunked = true +# +chunked = true + +# +# Cache revalidation. +# Siege supports cache revalidation for both ETag and +# Last-modified headers. If a copy is still fresh, the +# server responds with 304. +# HTTP/1.1 200 0.00 secs: 2326 bytes ==> /apache_pb.gif +# HTTP/1.1 304 0.00 secs: 0 bytes ==> /apache_pb.gif +# HTTP/1.1 304 0.00 secs: 0 bytes ==> /apache_pb.gif +# +# ex: cache = true +# +cache = false + +# +# Connection directive. Options "close" and "keep-alive" +# Starting with release 2.57b3, siege implements persistent +# connections in accordance to RFC 2068 using both chunked +# encoding and content-length directives to determine the +# page size. To run siege with persistent connections set +# the connection directive to keep-alive. (Default close) +# CAUTION: use the keep-alive directive with care. +# DOUBLE CAUTION: this directive does not work well on HPUX +# TRIPLE CAUTION: don't use keep-alives until further notice +# ex: connection = close +# connection = keep-alive +# +connection = close + +# +# Default number of simulated concurrent users +# ex: concurrent = 25 +# +concurrent = 15 + +# +# Default duration of the siege. The right hand argument has +# a modifier which specifies the time units, H=hours, M=minutes, +# and S=seconds. If a modifier is not specified, then minutes +# are assumed. +# ex: time = 50M +# +# time = + +# +# Repetitions. The length of siege may be specified in client +# reps rather then a time duration. Instead of specifying a time +# span, you can tell each siege instance to hit the server X number +# of times. So if you chose 'reps = 20' and you've selected 10 +# concurrent users, then siege will hit the server 200 times. +# ex: reps = 20 +# +# reps = + +# +# Default URLs file, set at configuration time, the default +# file is PREFIX/etc/urls.txt. So if you configured siege +# with --prefix=/usr/local then the urls.txt file is installed +# int /usr/local/etc/urls.txt. Use the "file = " directive to +# configure an alternative URLs file. You may use environment +# variables as shown in the examples below: +# ex: file = /export/home/jdfulmer/MYURLS.txt +# file = $HOME/etc/urls.txt +# file = $URLSFILE +# +file = ./urls.txt + +# +# Default URL, this is a single URL that you want to test. This +# is usually set at the command line with the -u option. When +# used, this option overrides the urls.txt (-f FILE/--file=FILE) +# option. You will HAVE to comment this out for in order to use +# the urls.txt file option. +# ex: url = https://shemp.whoohoo.com/docs/index.jsp +# +# url = + +# +# Default delay value, see the siege(1) man page. +# This value is used for load testing, it is not used +# for benchmarking. +# ex: delay = 3 +# +delay = 1 + +# +# Connection timeout value. Set the value in seconds for +# socket connection timeouts. The default value is 30 seconds. +# ex: timeout = 30 +# +# timeout = + +# +# Session expiration: This directive allows you to delete all +# cookies after you pass through the URLs. This means siege will +# grab a new session with each run through its URLs. The default +# value is false. +# ex: expire-session = true +# +# expire-session = + +# +# Failures: This is the number of total connection failures allowed +# before siege aborts. Connection failures (timeouts, socket failures, +# etc.) are combined with 400 and 500 level errors in the final stats, +# but those errors do not count against the abort total. If you set +# this total to 10, then siege will abort after ten socket timeouts, +# but it will NOT abort after ten 404s. This is designed to prevent +# a run-away mess on an unattended siege. The default value is 1024 +# ex: failures = 50 +# +# failures = + +# +# Internet simulation. If true, siege clients will hit +# the URLs in the urls.txt file randomly, thereby simulating +# internet usage. If false, siege will run through the +# urls.txt file in order from first to last and back again. +# ex: internet = true +# +internet = false + +# +# Default benchmarking value, If true, there is NO delay +# between server requests, siege runs as fast as the web +# server and the network will let it. Set this to false +# for load testing. +# ex: benchmark = true +# +benchmark = false + +# +# Set the siege User-Agent to identify yourself at the +# host, the default is: JoeDog/1.00 [en] (X11; I; Siege #.##) +# But that wreaks of corporate techno speak. Feel free +# to make it more interesting :-) Since Limey is recovering +# from minor surgery as I write this, I'll dedicate the +# example to him... +# ex: user-agent = Limey The Bulldog +# +# user-agent = + +# +# Accept-encoding. This option allows you to specify +# acceptable encodings returned by the server. Use this +# directive to turn on compression. By default we accept +# gzip compression. +# +# ex: accept-encoding = * +# accept-encoding = gzip +# accept-encoding = compress;q=0.5;gzip;q=1 +accept-encoding = gzip + +# +# TURN OFF THAT ANNOYING SPINNER! +# Siege spawns a thread and runs a spinner to entertain you +# as it collects and computes its stats. If you don't like +# this feature, you may turn it off here. +# ex: spinner = false +# +spinner = true + +# +# WWW-Authenticate login. When siege hits a webpage +# that requires basic authentication, it will search its +# logins for authentication which matches the specific realm +# requested by the server. If it finds a match, it will send +# that login information. If it fails to match the realm, it +# will send the default login information. (Default is "all"). +# You may configure siege with several logins as long as no +# two realms match. The format for logins is: +# username:password[:realm] where "realm" is optional. +# If you do not supply a realm, then it will default to "all" +# ex: login = jdfulmer:topsecret:Admin +# login = jeff:supersecret +# +# login = + +# +# WWW-Authenticate username and password. When siege +# hits a webpage that requires authentication, it will +# send this user name and password to the server. Note +# this is NOT form based authentication. You will have +# to construct URLs for that. +# ex: username = jdfulmer +# password = whoohoo +# +# username = +# password = + +# +# ssl-cert +# This optional feature allows you to specify a path to a client +# certificate. It is not neccessary to specify a certificate in +# order to use https. If you don't know why you would want one, +# then you probably don't need this feature. Use openssl to +# generate a certificate and key with the following command: +# $ openssl req -nodes -new -days 365 -newkey rsa:1024 \ +# -keyout key.pem -out cert.pem +# Specify a path to cert.pem as follows: +# ex: ssl-cert = /home/jeff/.certs/cert.pem +# +# ssl-cert = + +# +# ssl-key +# Use this option to specify the key you generated with the command +# above. ex: ssl-key = /home/jeff/.certs/key.pem +# You may actually skip this option and combine both your cert and +# your key in a single file: +# $ cat key.pem > client.pem +# $ cat cert.pem >> client.pem +# Now set the path for ssl-cert: +# ex: ssl-cert = /home/jeff/.certs/client.pem +# (in this scenario, you comment out ssl-key) +# +# ssl-key = + +# +# ssl-timeout +# This option sets a connection timeout for the ssl library +# ex: ssl-timeout = 30 +# +# ssl-timeout = + +# +# ssl-ciphers +# You can use this feature to select a specific ssl cipher +# for HTTPs. To view the ones available with your library run +# the following command: openssl ciphers +# ex: ssl-ciphers = EXP-RC4-MD5 +# +# ssl-ciphers = + +# +# Login URL. This is the first URL to be hit by every siege +# client. This feature was designed to allow you to login to +# a server and establish a session. It will only be hit once +# so if you need to hit this URL more then once, make sure it +# also appears in your urls.txt file. +# +# ex: login-url = http://eos.haha.com/login.jsp POST name=jeff&pass=foo +# +# login-url = + +# +# Proxy protocol. This option allows you to select a proxy +# server stress testing. The proxy will request the URL(s) +# specified by -u"my.url.org" OR from the urls.txt file. +# +# ex: proxy-host = proxy.whoohoo.org +# proxy-port = 8080 +# +# proxy-host = +# proxy-port = + +# +# Proxy-Authenticate. When scout hits a proxy server which +# requires username and password authentication, it will this +# username and password to the server. The format is username, +# password and optional realm each separated by a colon. You +# may enter more than one proxy-login as long as each one has +# a different realm. If you do not enter a realm, then scout +# will send that login information to all proxy challenges. If +# you have more than one proxy-login, then scout will attempt +# to match the login to the realm. +# ex: proxy-login: jeff:secret:corporate +# proxy-login: jeff:whoohoo +# +# proxy-login = + +# +# Redirection support. This option allows to to control +# whether a Location: hint will be followed. Most users +# will want to follow redirection information, but sometimes +# it's desired to just get the Location information. +# +# ex: follow-location = false +# +# follow-location = + +# Zero-length data. siege can be configured to disregard +# results in which zero bytes are read after the headers. +# Alternatively, such results can be counted in the final +# tally of outcomes. +# +# ex: zero-data-ok = false +# +# zero-data-ok = + +# +# end of siegerc