hansel 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/hansel.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hansel}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Paul Mylchreest"]
12
- s.date = %q{2010-01-24}
12
+ s.date = %q{2010-02-27}
13
13
  s.default_executable = %q{hansel}
14
14
  s.description = %q{Ruby driver for httperf - automated load and performance testing}
15
15
  s.email = %q{paul.mylchreest@mac.com}
data/lib/arg_parser.rb CHANGED
@@ -17,6 +17,7 @@ class ArgParser
17
17
  options.rate_step = 1
18
18
  options.output_format = :yaml
19
19
  options.output = nil
20
+ options.output_dir = File.join ENV['HOME'], 'hansel_output'
20
21
 
21
22
  opts = OptionParser.new do |opts|
22
23
  opts.banner = "Usage: hansel [options]"
@@ -72,6 +73,10 @@ class ArgParser
72
73
  options.output = opt
73
74
  end
74
75
 
76
+ opts.on("-d", "--output_dir=PATH", "Specify an output directory.") do |opt|
77
+ options.output_dir = opt
78
+ end
79
+
75
80
  opts.separator ""
76
81
  opts.separator "Common options:"
77
82
 
data/lib/hansel.rb CHANGED
@@ -1,23 +1,29 @@
1
+ require 'fileutils'
2
+
1
3
  class Hansel
2
4
  def initialize(options = {})
3
5
  @options = options
4
6
  @results = {}
5
7
  end
6
8
 
9
+ def options
10
+ @options
11
+ end
12
+
7
13
  def verbose?
8
- @options.verbose
14
+ options.verbose
9
15
  end
10
16
 
11
17
  def benchmark(rate)
12
18
  result = {:output => ""}
13
19
  httperf_cmd = [
14
20
  "httperf --hog",
15
- "--server=#{@options.server}",
16
- "--port=#{@options.port}",
17
- "--uri=#{@options.uri}",
18
- "--num-conns=#{@options.num_conns}",
21
+ "--server=#{options.server}",
22
+ "--port=#{options.port}",
23
+ "--uri=#{options.uri}",
24
+ "--num-conns=#{options.num_conns}",
19
25
  "--rate=#{rate}",
20
- @options.cookie && "--add-header='Cookie: #{@options.cookie}\\n'"
26
+ options.cookie && "--add-header='Cookie: #{options.cookie}\\n'"
21
27
  ].compact.join ' '
22
28
 
23
29
  IO.popen("#{httperf_cmd} 2>&1") do |pipe|
@@ -43,9 +49,12 @@ class Hansel
43
49
  end
44
50
 
45
51
  def output
46
- if @options.output
47
- File.open(@options.output, "w+") do |f|
48
- formatter = case @options.output_format
52
+ if options.output
53
+ FileUtils.mkdir_p options.output_dir
54
+ output_file = File.join options.output_dir, [options.server, options.num_conns.to_s].join('.')
55
+ type = { :yaml => 'yml', :csv => 'csv', :octave => 'm' }[options.output_format]
56
+ File.open([output_file, type].join('.'), "w+") do |f|
57
+ formatter = case options.output_format
49
58
  when :yaml
50
59
  load File.here '/../lib/yaml_formatter.rb'
51
60
  YamlFormatter.new(@results)
@@ -54,7 +63,7 @@ class Hansel
54
63
  CsvFormatter.new(@results)
55
64
  when :octave
56
65
  load File.here '/../lib/octave_formatter.rb'
57
- OctaveFormatter.new(@results)
66
+ OctaveFormatter.new(@results, {:output_file => output_file})
58
67
  end
59
68
  f.puts formatter.format
60
69
  end
@@ -63,12 +72,12 @@ class Hansel
63
72
 
64
73
  def run
65
74
  puts "starting run..." if verbose?
66
- (@options.low_rate..@options.high_rate).step(@options.rate_step) do |rate|
75
+ (options.low_rate..options.high_rate).step(options.rate_step) do |rate|
67
76
  puts "benchmarking at rate: #{rate}" if verbose?
68
- @results[:server] = @options.server
69
- @results[:port] = @options.port
70
- @results[:uri] = @options.uri
71
- @results[:num_conns] = @options.num_conns
77
+ @results[:server] = options.server
78
+ @results[:port] = options.port
79
+ @results[:uri] = options.uri
80
+ @results[:num_conns] = options.num_conns
72
81
  @results[rate] = benchmark(rate)
73
82
  end
74
83
  puts "ending run..." if verbose?
@@ -1,6 +1,8 @@
1
1
  class OctaveFormatter
2
- def initialize(data)
2
+ def initialize(data, options = {})
3
3
  @data = data
4
+ @options = options
5
+ @png_output = [(options[:output_file] || 'stats'), 'png'].join('.')
4
6
  end
5
7
 
6
8
  def format
@@ -39,7 +41,7 @@ class OctaveFormatter
39
41
  title('Hansel report for #{@data[:server]}:#{@data[:port]}#{@data[:uri]} (#{@data[:num_conns]} connections per run)')
40
42
  xlabel('Demanded Request Rate');
41
43
  legend('Request Rate', 'Connection Rate', 'Avg. reply rate', 'Max. reply rate', 'Reply rate StdDev', 'Errors');
42
- print('stats.png', '-dpng')
44
+ print('#{@png_output}', '-dpng')
43
45
  EOS
44
46
  result = result.gsub ' ', ''
45
47
  result
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hansel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Mylchreest
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-24 00:00:00 -05:00
12
+ date: 2010-02-27 00:00:00 -05:00
13
13
  default_executable: hansel
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency