stella 0.5.1 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/README.txt +84 -24
  2. data/Rakefile +6 -1
  3. data/lib/stella.rb +5 -4
  4. data/lib/stella/adapter/ab.rb +31 -4
  5. data/lib/stella/adapter/base.rb +15 -1
  6. data/lib/stella/adapter/httperf.rb +35 -4
  7. data/lib/stella/adapter/siege.rb +51 -29
  8. data/lib/stella/cli.rb +45 -22
  9. data/lib/stella/cli/agents.rb +73 -0
  10. data/lib/stella/cli/language.rb +2 -0
  11. data/lib/stella/cli/localtest.rb +5 -0
  12. data/lib/stella/command/base.rb +1 -1
  13. data/lib/stella/command/localtest.rb +84 -68
  14. data/lib/stella/test/{summarybase.rb → base.rb} +3 -7
  15. data/lib/stella/test/definition.rb +10 -5
  16. data/lib/stella/test/{runsummary.rb → run/summary.rb} +4 -6
  17. data/lib/stella/test/{testsummary.rb → summary.rb} +27 -29
  18. data/lib/utils/escape.rb +302 -0
  19. data/lib/utils/mathutil.rb +36 -34
  20. data/support/text/en.yaml +7 -1
  21. metadata +8 -102
  22. data/doc/classes/Crypto.html +0 -248
  23. data/doc/classes/Crypto/Key.html +0 -308
  24. data/doc/classes/Enumerable.html +0 -309
  25. data/doc/classes/FileUtil.html +0 -310
  26. data/doc/classes/HTTPUtil.html +0 -530
  27. data/doc/classes/MathUtil.html +0 -210
  28. data/doc/classes/Stella.html +0 -238
  29. data/doc/classes/Stella/Adapter.html +0 -127
  30. data/doc/classes/Stella/Adapter/ApacheBench.html +0 -1076
  31. data/doc/classes/Stella/Adapter/Base.html +0 -432
  32. data/doc/classes/Stella/Adapter/CommandNotReady.html +0 -146
  33. data/doc/classes/Stella/Adapter/Httperf.html +0 -949
  34. data/doc/classes/Stella/Adapter/Siege.html +0 -1011
  35. data/doc/classes/Stella/CLI.html +0 -914
  36. data/doc/classes/Stella/CLI/Base.html +0 -186
  37. data/doc/classes/Stella/CLI/Language.html +0 -149
  38. data/doc/classes/Stella/CLI/LocalTest.html +0 -268
  39. data/doc/classes/Stella/Command.html +0 -111
  40. data/doc/classes/Stella/Command/Base.html +0 -335
  41. data/doc/classes/Stella/Config.html +0 -292
  42. data/doc/classes/Stella/InvalidArgument.html +0 -242
  43. data/doc/classes/Stella/LocalTest.html +0 -450
  44. data/doc/classes/Stella/Logger.html +0 -548
  45. data/doc/classes/Stella/Response.html +0 -846
  46. data/doc/classes/Stella/Storable.html +0 -928
  47. data/doc/classes/Stella/Test.html +0 -142
  48. data/doc/classes/Stella/Test/DaySummary.html +0 -249
  49. data/doc/classes/Stella/Test/Definition.html +0 -294
  50. data/doc/classes/Stella/Test/Definition/Rampup.html +0 -215
  51. data/doc/classes/Stella/Test/RunSummary.html +0 -315
  52. data/doc/classes/Stella/Test/SummaryBase.html +0 -286
  53. data/doc/classes/Stella/Test/TestSummary.html +0 -200
  54. data/doc/classes/Stella/Text.html +0 -581
  55. data/doc/classes/Stella/Text/Resource.html +0 -289
  56. data/doc/classes/Stella/UnavailableAdapter.html +0 -242
  57. data/doc/classes/Stella/UnknownValue.html +0 -242
  58. data/doc/classes/Stella/UnsupportedLanguage.html +0 -115
  59. data/doc/classes/Stella/Util.html +0 -348
  60. data/doc/classes/TextGraph.html +0 -460
  61. data/doc/classes/TimerUtil.html +0 -431
  62. data/doc/created.rid +0 -1
  63. data/doc/files/LICENSE_txt.html +0 -129
  64. data/doc/files/README_txt.html +0 -209
  65. data/doc/files/lib/stella/adapter/ab_rb.html +0 -101
  66. data/doc/files/lib/stella/adapter/base_rb.html +0 -101
  67. data/doc/files/lib/stella/adapter/httperf_rb.html +0 -101
  68. data/doc/files/lib/stella/adapter/siege_rb.html +0 -101
  69. data/doc/files/lib/stella/cli/base_rb.html +0 -101
  70. data/doc/files/lib/stella/cli/language_rb.html +0 -101
  71. data/doc/files/lib/stella/cli/localtest_rb.html +0 -101
  72. data/doc/files/lib/stella/cli_rb.html +0 -112
  73. data/doc/files/lib/stella/command/base_rb.html +0 -101
  74. data/doc/files/lib/stella/command/localtest_rb.html +0 -101
  75. data/doc/files/lib/stella/logger_rb.html +0 -101
  76. data/doc/files/lib/stella/response_rb.html +0 -101
  77. data/doc/files/lib/stella/storable_rb.html +0 -109
  78. data/doc/files/lib/stella/support_rb.html +0 -101
  79. data/doc/files/lib/stella/test/daysummary_rb.html +0 -101
  80. data/doc/files/lib/stella/test/definition_rb.html +0 -101
  81. data/doc/files/lib/stella/test/runsummary_rb.html +0 -101
  82. data/doc/files/lib/stella/test/summarybase_rb.html +0 -101
  83. data/doc/files/lib/stella/test/testsummary_rb.html +0 -108
  84. data/doc/files/lib/stella/text/resource_rb.html +0 -108
  85. data/doc/files/lib/stella/text_rb.html +0 -108
  86. data/doc/files/lib/stella_rb.html +0 -128
  87. data/doc/files/lib/utils/crypto-key_rb.html +0 -116
  88. data/doc/files/lib/utils/fileutil_rb.html +0 -108
  89. data/doc/files/lib/utils/httputil_rb.html +0 -110
  90. data/doc/files/lib/utils/mathutil_rb.html +0 -101
  91. data/doc/files/lib/utils/textgraph_rb.html +0 -138
  92. data/doc/files/lib/utils/timerutil_rb.html +0 -108
  93. data/doc/fr_class_index.html +0 -66
  94. data/doc/fr_file_index.html +0 -62
  95. data/doc/fr_method_index.html +0 -309
  96. data/doc/index.html +0 -24
  97. data/doc/rdoc-style.css +0 -208
  98. data/lib/stella/test/daysummary.rb +0 -93
  99. data/spec/base.rb +0 -26
  100. data/spec/shell_spec.rb +0 -12
@@ -2,13 +2,14 @@
2
2
  require 'optparse'
3
3
  require 'ostruct'
4
4
 
5
- # All command-line interface wrappers
6
5
  require 'stella/cli/base'
7
- require 'stella/cli/language'
8
- require 'stella/cli/localtest'
9
6
 
10
7
  module Stella
11
8
 
9
+ # Stella::Config
10
+ #
11
+ # This Config class manages the content of ENV['HOME]/.stella. The functionality
12
+ # is currently disabled so stella is stateless.
12
13
  class Config < Storable
13
14
  DEFAULT_HOME = File.join(ENV['HOME'], '.stella').freeze unless defined? DEFAULT_HOME
14
15
  DEFAULT_DATA_HOME = File.join(Dir.getwd, 'stella').freeze unless defined? DEFAULT_DATA_HOME
@@ -42,27 +43,36 @@ module Stella
42
43
 
43
44
  end
44
45
 
45
-
46
+ # Stella::CLI
47
+ #
48
+ # The is the front-end class for the command-line implementation. The stella script
49
+ # creates an instance of this class which is the glue between the command-line
50
+ # and the Stella command classes.
51
+ # Note: All Stella::CLI classes are autoloaded and they add themselves to @@commands.
46
52
  class CLI
47
53
 
54
+ # Auto populated with 'command' => Stella::CLI::[class] by each cli class on 'require'.
55
+ @@commands = {}
56
+
48
57
  attr_reader :options
49
58
  attr_reader :logger
50
- attr_accessor :commands
59
+
51
60
 
61
+
52
62
  def initialize(arguments=[], stdin=nil)
53
63
  @arguments = arguments
54
64
  @stdin = stdin
55
65
 
56
- @commands = {
57
- 'ab' => Stella::CLI::LocalTest,
58
- 'siege' => Stella::CLI::LocalTest,
59
- 'httperf' => Stella::CLI::LocalTest,
60
- 'lang' => Stella::CLI::Language
61
- }
62
66
  @config = Stella::Config.new
63
67
  @options = OpenStruct.new
64
68
  @options.verbose = 0
69
+ @options.data_path = @config.working_directory
65
70
  @options.agents = []
71
+
72
+ end
73
+
74
+ def commands
75
+ @@commands
66
76
  end
67
77
 
68
78
  def run
@@ -76,13 +86,13 @@ module Stella
76
86
 
77
87
  # Pull the requested command object out of the list
78
88
  # and tell it what shortname that was used to call it.
79
- command = @commands[@command_name].new(@command_name)
89
+ command = @@commands[@command_name].new(@command_name)
80
90
 
81
91
  # Give the command object access to the config and runtime options
82
92
  #command.global_config = @config
83
93
  command.stella_options = @options
84
94
  command.arguments = @command_arguments
85
- command.working_directory = @config.working_directory
95
+ command.working_directory = @options.data_path
86
96
 
87
97
  command.run
88
98
 
@@ -104,7 +114,7 @@ module Stella
104
114
 
105
115
  @command_name = nil
106
116
  @arguments.each do |arg|
107
- if (@commands.has_key? arg)
117
+ if (@@commands.has_key? arg)
108
118
  @command_name = arg
109
119
  index = @arguments.index(@command_name)
110
120
  @command_arguments = @arguments[index + 1..@arguments.size]
@@ -133,7 +143,7 @@ module Stella
133
143
 
134
144
  opts = OptionParser.new
135
145
  opts.banner = Stella::TEXT.msg(:option_help_usage)
136
- opts.on Stella::TEXT.msg(:option_help_preamble, @commands.keys.join(', '))
146
+ opts.on Stella::TEXT.msg(:option_help_preamble, @@commands.keys.join(', '))
137
147
 
138
148
  opts.on(Stella::TEXT.msg(:option_help_options_title))
139
149
  opts.on('-V', '--version', Stella::TEXT.msg(:option_help_version)) do
@@ -149,9 +159,13 @@ module Stella
149
159
  opts.on('-q', '--quiet', Stella::TEXT.msg(:option_help_quiet)) do
150
160
  @options.quiet = true
151
161
  end
152
- opts.on('--overhead', String, Stella::TEXT.msg(:option_help_overhead)) do
153
- @options.showoverhead = true
154
- end
162
+
163
+ # Overhead is interesting for development and auditing but we're not
164
+ # currently tracking this. It needed to be re-implemented from scratch
165
+ # so we'll redo this soon. It's also useful for comparing Ruby/JRuby/IronRuby
166
+ #opts.on('--overhead', String, Stella::TEXT.msg(:option_help_overhead)) do
167
+ # @options.showoverhead = true
168
+ #end
155
169
 
156
170
  opts.on('-O', '--stdout', Stella::TEXT.msg(:option_help_stdout)) do
157
171
  @options.stdout = true
@@ -183,10 +197,9 @@ module Stella
183
197
  @options.warmup = MathUtil.enforce_limit(((v) ? v : 0), 0.1, 1)
184
198
  end
185
199
 
186
- opts.on('-a', '--agent=S', String, Stella::TEXT.msg(:option_help_agent)) do |v|
187
- raise "Agent is empty" if v.empty?
200
+ opts.on('-a', '--agent=[S]', String, Stella::TEXT.msg(:option_help_agent)) do |v|
188
201
  @options.agents ||= []
189
- agent_ary = Stella::Util::expand_str(v)
202
+ agent_ary = Stella::Util::expand_str(v || 'random')
190
203
  @options.agents.push(agent_ary)
191
204
  end
192
205
 
@@ -248,7 +261,7 @@ module Stella
248
261
  # Stella::LOGGER.debug("ENV[#{n}]=#{v}")
249
262
  #end
250
263
 
251
- Stella::LOGGER.debug("Commands (#{@command_name}): #{@commands.keys.join(',')}")
264
+ Stella::LOGGER.debug("Commands (#{@command_name}): #{@@commands.keys.join(',')}")
252
265
 
253
266
  #Stella::LOGGER.debug("Configs: ")
254
267
  #@config.to_hash.each_pair do |n,v|
@@ -265,4 +278,14 @@ module Stella
265
278
  Stella::LOGGER.debug("Command Arguments: #{@command_arguments.join(',')}" )
266
279
  end
267
280
  end
281
+ end
282
+
283
+ # Autoload CLI classes. These classes add themselves to the class variable @@commands.
284
+ begin
285
+ cli_classes = Dir.glob(File.join(STELLA_HOME, 'lib', 'stella', 'cli', "*.rb"))
286
+ cli_classes.each do |path|
287
+ require path
288
+ end
289
+ rescue LoadError => ex
290
+ Stella::LOGGER.info("Error loading #{path}: #{ex.message}")
268
291
  end
@@ -0,0 +1,73 @@
1
+
2
+
3
+
4
+ module Stella
5
+ class CLI
6
+
7
+ class Agents < Stella::CLI::Base
8
+
9
+ attr_accessor :full
10
+ attr_accessor :list
11
+ attr_accessor :search
12
+ attr_accessor :help
13
+
14
+ def initialize(adapter)
15
+ super(adapter)
16
+ @full = false
17
+ @list = false
18
+ @help = false
19
+ end
20
+
21
+ def run
22
+ process_options
23
+
24
+ if @help
25
+ process_options(:display)
26
+ return
27
+ end
28
+
29
+ # The LocalTest command is the keeper of the user agents
30
+ localtest = Stella::LocalTest.new
31
+
32
+ agents = []
33
+ all_agents = localtest.available_agents
34
+ all_agents.each_pair do |key,value|
35
+ if (@full)
36
+ value.each do |full_value|
37
+ agent = full_value.join(' ')
38
+ agents << agent if (!@search || agent.to_s.match(/#{search}/i))
39
+ end
40
+ else
41
+ agents << key.to_s if (!@search || key.to_s.match(/#{search}/i))
42
+ end
43
+ end
44
+
45
+ puts (@list) ? agents.uniq.sort.join("\n") : Stella::TEXT.msg(:agents_count_message, agents.uniq.size)
46
+
47
+ end
48
+
49
+ def process_options(display=false)
50
+
51
+ opts = OptionParser.new
52
+ opts.banner = Stella::TEXT.msg(:option_help_usage)
53
+ opts.on('-h', '--help', Stella::TEXT.msg(:option_help_help)) { @help = true }
54
+ opts.on('-f', '--full', Stella::TEXT.msg(:agents_option_full)) { @full = true }
55
+ opts.on('-l', '--list', Stella::TEXT.msg(:agents_option_list)) { @list = true }
56
+ # TODO: display agents based on shortnames. This is important to maintain continuity with the stella option.
57
+ #opts.on('-a', '--agent', Stella::TEXT.msg(:agents_option_list)) { @list = true }
58
+ opts.on('-s', '--search=S', String, Stella::TEXT.msg(:agents_option_search)) { |v| @search = v }
59
+
60
+ opts.parse!(@arguments)
61
+
62
+ if display
63
+ Stella::LOGGER.info opts
64
+ return
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ @@commands['agents'] = Stella::CLI::Agents
72
+ end
73
+ end
@@ -12,5 +12,7 @@ module Stella
12
12
  end
13
13
 
14
14
  end
15
+
16
+ @@commands['lang'] = Stella::CLI::Language
15
17
  end
16
18
  end
@@ -71,5 +71,10 @@ module Stella
71
71
 
72
72
 
73
73
  end
74
+
75
+
76
+ @@commands['ab'] = Stella::CLI::LocalTest
77
+ @@commands['siege'] = Stella::CLI::LocalTest
78
+ @@commands['httperf'] = Stella::CLI::LocalTest
74
79
  end
75
80
  end
@@ -41,7 +41,7 @@ module Stella::Command
41
41
  def run_sleeper(duration)
42
42
  remainder = duration % 1
43
43
  duration.to_i.times {
44
- Stella::LOGGER.info_print('.')
44
+ Stella::LOGGER.info_print('.') unless @quiet
45
45
  sleep 1
46
46
  }
47
47
  sleep remainder if remainder > 0
@@ -27,6 +27,7 @@ module Stella
27
27
  attr_reader :paths
28
28
 
29
29
  attr_accessor :working_directory
30
+ attr_reader :available_agents
30
31
 
31
32
  def initialize(testdef=nil, adapter=nil)
32
33
  @testdef = testdef if testdef
@@ -73,18 +74,16 @@ module Stella
73
74
 
74
75
  test_path = _generate_test_path
75
76
 
76
-
77
77
  prepare_test(test_path)
78
78
 
79
79
  threshold = (@testdef.rampup) ? @testdef.rampup.ceiling : @adapter.vusers
80
80
 
81
-
82
81
  runnum = "00"
83
82
  while(@adapter.vusers <= threshold) do
84
83
 
85
84
  # Make sure the load factor is set to 1. If there was a warmup,
86
85
  # then this value will be less than 1.
87
- testrun = testrun_maker(1)
86
+ testrun = maker_of_testruns(1)
88
87
 
89
88
  # We empty test_runpaths so we can keep track of the runpaths for each
90
89
  # level of virtual users. This is useful during a rampup test so we can
@@ -117,7 +116,7 @@ module Stella
117
116
  if @testdef.sleep && @testdef.sleep.to_f > 0 && @testdef.repetitions > 1
118
117
  run_sleeper(@testdef.sleep)
119
118
  end
120
- Stella::LOGGER.info('') # We want the newline
119
+ Stella::LOGGER.info('') unless @quiet # We want the newline
121
120
  end
122
121
 
123
122
  # Rampup tests produce multiple summary files which include the batch
@@ -146,7 +145,7 @@ module Stella
146
145
 
147
146
 
148
147
  # Non-rampup tests only need to run through the loop once.
149
- break if (@adapter.vusers == threshold)
148
+ break if (!@testdef.rampup && @adapter.vusers == threshold)
150
149
 
151
150
  end
152
151
 
@@ -167,14 +166,66 @@ module Stella
167
166
 
168
167
  private
169
168
 
170
- # testrun_maker
169
+ # prepare_test
170
+ #
171
+ # Execute the group of testruns associated to this test. This includes
172
+ # zero or one warmup and one or more testruns.
173
+ #
174
+ # INPUT:
175
+ # +test_path+ filesystem path to store all test data
176
+ #
177
+ def prepare_test(test_path)
178
+
179
+ Stella::LOGGER.info("Writing test data to: #{test_path}\n\n") unless @quiet
180
+
181
+ # Make sure the test storage directory is created along with the
182
+ # latest symlink
183
+ FileUtil.create_dir(test_path)
184
+ File.unlink(latest_test_symlink_path) if File.exists?(latest_test_symlink_path)
185
+ File.symlink(File.expand_path(test_path), latest_test_symlink_path)
186
+
187
+ # Write the test ID to the storage directory
188
+ FileUtil.write_file(test_path + "/ID.txt", @guid, true)
189
+
190
+ # And the test run message
191
+ FileUtil.write_file(test_path + "/MESSAGE.txt", @testdef.message, true) if @testdef.message
192
+
193
+ @adapter.user_agent = @agents unless @agents.empty?
194
+
195
+ # The warmup is identical to a testrun except for two things:
196
+ # - we don't make note of the runpath
197
+ # - there is a one second sleep after the run.
198
+ # Everything else is identical.
199
+ if @testdef.warmup
200
+
201
+ testrun = maker_of_testruns(@testdef.warmup)
202
+
203
+ # Generate the filesystem path to store the run data.
204
+ # NOTE: We don't keep the warmup path in @test_runpaths because we
205
+ # include it in the final calculation for the test.
206
+ runpath = File.join(test_path, "warmup")
207
+
208
+ # Run the warmpup round
209
+ testrun.call("Warmup", runpath)
210
+
211
+ run_sleeper(@testdef.sleep || 1)
212
+
213
+ Stella::LOGGER.info('', '') unless @quiet # We just need the newline
214
+
215
+ end
216
+
217
+ print_title unless @quiet
218
+
219
+ end
220
+
221
+ # maker_of_testruns
171
222
  #
172
223
  # Generator of test runs. Everything that happens during a test
173
224
  # run is defined here. We use a Proc so we can toss the functionality
174
225
  # around like something that's dirty and loves a good tossing.
175
226
  # It's important that all output be on a single line without a
176
227
  # line terminator. Otherwise great descruction could occur.
177
- def testrun_maker(factor)
228
+ def maker_of_testruns(factor)
178
229
  testrun = Proc.new do |name,runpath|
179
230
  # Make sure the test run storage directory is created
180
231
  FileUtil.create_dir(runpath)
@@ -183,7 +234,7 @@ module Stella
183
234
  @adapter.working_directory = runpath
184
235
  @adapter.before
185
236
 
186
- Stella::LOGGER.info_printf("%10s: %6d@%-5d", name, @adapter.requests, @adapter.vusers) unless @quiet
237
+ Stella::LOGGER.info_printf("%8s: %10d@%-6s ", name, @adapter.requests, @adapter.vuser_rate) unless @quiet
187
238
 
188
239
  # Here we record the command arguments. This needs to be last because we modify
189
240
  # some of the arguments above.
@@ -202,65 +253,16 @@ module Stella
202
253
 
203
254
  save_summary(@adapter.summary_path(@format), stats)
204
255
 
205
-
256
+
206
257
  unless @quiet
207
- Stella::LOGGER.info_print(sprintf("%9.4fs %6.2f/s", stats.elapsed_time, stats.transaction_rate))
208
- Stella::LOGGER.info_print(sprintf("%9.4fs (%3.2f%%) ", stats.response_time, stats.availability))
209
- Stella::LOGGER.info_print(sprintf(" (ruby: %.4f with %.4f overhead)", run_timer.real, run_timer.overhead)) if @showoverhead
258
+ Stella::LOGGER.info_print(sprintf("%3.0f%% %9.2f/s %8.3fs ", stats.availability, stats.transaction_rate, stats.response_time))
259
+ Stella::LOGGER.info_print(sprintf("%8.3fMB/s %8.3fMB %8.3fs ", stats.throughput, stats.data_transferred, stats.elapsed_time))
210
260
  # NOTE: We don't print a line terminator here
211
261
  end
212
262
 
213
263
  end
214
264
  end
215
265
 
216
-
217
- # prepare_test
218
- #
219
- # Execute the group of testruns associated to this test. This includes
220
- # zero or one warmup and one or more testruns.
221
- #
222
- # INPUT:
223
- # +test_path+ filesystem path to store all test data
224
- #
225
- def prepare_test(test_path)
226
-
227
- Stella::LOGGER.info("Writing test data to: #{test_path}\n\n") unless @quiet
228
-
229
- # Make sure the test storage directory is created along with the
230
- # latest symlink
231
- FileUtil.create_dir(test_path)
232
- File.unlink(latest_test_symlink_path) if File.exists?(latest_test_symlink_path)
233
- File.symlink(File.expand_path(test_path), latest_test_symlink_path)
234
-
235
- # Write the test ID to the storage directory
236
- FileUtil.write_file(test_path + "/ID.txt", @guid, true)
237
-
238
- # And the test run message
239
- FileUtil.write_file(test_path + "/MESSAGE.txt", @testdef.message, true) if @testdef.message
240
-
241
- # The warmup is identical to a testrun except for two things:
242
- # - we don't make note of the runpath
243
- # - there is a one second sleep after the run.
244
- # Everything else is identical.
245
- if @testdef.warmup
246
-
247
- testrun = testrun_maker(@testdef.warmup)
248
-
249
- # Generate the filesystem path to store the run data.
250
- # NOTE: We don't keep the warmup path in @test_runpaths because we
251
- # include it in the final calculation for the test.
252
- runpath = File.join(test_path, "warmup")
253
-
254
- # Run the warmpup round
255
- testrun.call("Warmup", runpath)
256
-
257
- run_sleeper(@testdef.sleep || 1)
258
-
259
- Stella::LOGGER.info('', '') # We just need the newline
260
- end
261
-
262
-
263
- end
264
266
 
265
267
  # print_summary
266
268
  #
@@ -268,13 +270,27 @@ module Stella
268
270
  # it's also called at the end of all the runs.
269
271
  #
270
272
  # INPUT:
271
- # stats:: Any object that extends Stella::Test::SummaryBase object
273
+ # stats:: Any object that extends Stella::Test::Base object
272
274
  def print_summary(stats)
273
275
  Stella::LOGGER.info(' ' << "-"*67) unless @quiet
274
276
 
275
- Stella::LOGGER.info(sprintf("%9s %13s %9.4fs %6.2f/s %8.4fs", "Std Dev:", '', stats.elapsed_time_sdev, stats.transaction_rate_sdev, stats.response_time_sdev))
276
- Stella::LOGGER.info_printf("%9s %8d@%-5d%9.4fs %6.2f/s", "Total:", stats.transactions_total, stats.vusers_avg, stats.elapsed_time_total, stats.transaction_rate_avg)
277
- Stella::LOGGER.info_printf("%9.4fs (%3.2f%%) ", stats.response_time_avg, stats.availability)
277
+ Stella::LOGGER.info_printf("%8s: %10d@%-6d% 3.0f%% %9.2f/s ", "Total", stats.transactions_total, stats.vusers_avg, stats.availability, stats.transaction_rate_avg)
278
+ Stella::LOGGER.info_printf("%8.3fs %8.3fMB/s %8.3fMB %8.3fs", stats.response_time_avg, stats.throughput_avg, stats.data_transferred_total, stats.elapsed_time_total)
279
+ Stella::LOGGER.info('') # New line
280
+ Stella::LOGGER.info_printf("%8s: %22s %9.2f/s %8.3fs %8.3fMB/s %10s %8.3fs", "Std Dev", '', stats.transaction_rate_sdev, stats.response_time_sdev, stats.throughput_sdev, '', stats.elapsed_time_sdev)
281
+ Stella::LOGGER.info('') # New line
282
+ Stella::LOGGER.info('') unless @quiet # Extra new line
283
+ end
284
+
285
+ # print_title
286
+ #
287
+ # Prints the column headers for the test run output. Field widths match those
288
+ # in print_summary and test_maker
289
+ def print_title
290
+ Stella::LOGGER.info(' ' << "-"*67) unless @quiet
291
+
292
+ Stella::LOGGER.info_printf("%8s %10s@%-5s %5s %11s", "", 'REQ', 'VU/s', 'AVAIL', 'REQ/s')
293
+ Stella::LOGGER.info_printf("%10s %12s %10s %9s", 'RTIME', 'DATA/s', 'DATA', 'TIME')
278
294
  Stella::LOGGER.info('') # New line
279
295
  Stella::LOGGER.info('') unless @quiet # Extra new line
280
296
  end
@@ -285,7 +301,7 @@ module Stella
285
301
  #
286
302
  # INPUT:
287
303
  # filepath:: the complete path for the file (string)
288
- # stats:: Any object that extends Stella::Test::SummaryBase object
304
+ # stats:: Any object that extends Stella::Test::Base object
289
305
  def save_summary(filepath, stats)
290
306
  FileUtil.write_file(filepath, stats.dump(@format, :with_titles), true)
291
307
  end
@@ -293,12 +309,12 @@ module Stella
293
309
  # Load SUMMARY file for each run and create a summary with
294
310
  # totals, averages, and standard deviations.
295
311
  def process_test_stats(paths)
296
- test_stats = Stella::Test::TestSummary.new(@message)
312
+ test_stats = Stella::Test::Summary.new(@message)
297
313
  all_stats_obj = []
298
314
  paths.each do |path|
299
315
  file_contents = FileUtil.read_file_to_array("#{path}/SUMMARY.#{@format}")
300
- stats = Stella::Test::RunSummary.undump(@format, file_contents)
301
- stats_obj = Stella::Test::RunSummary.from_hash(stats)
316
+ stats = Stella::Test::Run::Summary.undump(@format, file_contents)
317
+ stats_obj = Stella::Test::Run::Summary.from_hash(stats)
302
318
  test_stats.add_run(stats_obj)
303
319
  end
304
320