stella 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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