stella 0.3.2 → 0.5.1
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.
- data/README.txt +24 -84
- data/Rakefile +1 -6
- data/doc/classes/Crypto.html +248 -0
- data/doc/classes/Crypto/Key.html +308 -0
- data/doc/classes/Enumerable.html +309 -0
- data/doc/classes/FileUtil.html +310 -0
- data/doc/classes/HTTPUtil.html +530 -0
- data/doc/classes/MathUtil.html +210 -0
- data/doc/classes/Stella.html +238 -0
- data/doc/classes/Stella/Adapter.html +127 -0
- data/doc/classes/Stella/Adapter/ApacheBench.html +1076 -0
- data/doc/classes/Stella/Adapter/Base.html +432 -0
- data/doc/classes/Stella/Adapter/CommandNotReady.html +146 -0
- data/doc/classes/Stella/Adapter/Httperf.html +949 -0
- data/doc/classes/Stella/Adapter/Siege.html +1011 -0
- data/doc/classes/Stella/CLI.html +914 -0
- data/doc/classes/Stella/CLI/Base.html +186 -0
- data/doc/classes/Stella/CLI/Language.html +149 -0
- data/doc/classes/Stella/CLI/LocalTest.html +268 -0
- data/doc/classes/Stella/Command.html +111 -0
- data/doc/classes/Stella/Command/Base.html +335 -0
- data/doc/classes/Stella/Config.html +292 -0
- data/doc/classes/Stella/InvalidArgument.html +242 -0
- data/doc/classes/Stella/LocalTest.html +450 -0
- data/doc/classes/Stella/Logger.html +548 -0
- data/doc/classes/Stella/Response.html +846 -0
- data/doc/classes/Stella/Storable.html +928 -0
- data/doc/classes/Stella/Test.html +142 -0
- data/doc/classes/Stella/Test/DaySummary.html +249 -0
- data/doc/classes/Stella/Test/Definition.html +294 -0
- data/doc/classes/Stella/Test/Definition/Rampup.html +215 -0
- data/doc/classes/Stella/Test/RunSummary.html +315 -0
- data/doc/classes/Stella/Test/SummaryBase.html +286 -0
- data/doc/classes/Stella/Test/TestSummary.html +200 -0
- data/doc/classes/Stella/Text.html +581 -0
- data/doc/classes/Stella/Text/Resource.html +289 -0
- data/doc/classes/Stella/UnavailableAdapter.html +242 -0
- data/doc/classes/Stella/UnknownValue.html +242 -0
- data/doc/classes/Stella/UnsupportedLanguage.html +115 -0
- data/doc/classes/Stella/Util.html +348 -0
- data/doc/classes/TextGraph.html +460 -0
- data/doc/classes/TimerUtil.html +431 -0
- data/doc/created.rid +1 -0
- data/doc/files/LICENSE_txt.html +129 -0
- data/doc/files/README_txt.html +209 -0
- data/doc/files/lib/stella/adapter/ab_rb.html +101 -0
- data/doc/files/lib/stella/adapter/base_rb.html +101 -0
- data/doc/files/lib/stella/adapter/httperf_rb.html +101 -0
- data/doc/files/lib/stella/adapter/siege_rb.html +101 -0
- data/doc/files/lib/stella/cli/base_rb.html +101 -0
- data/doc/files/lib/stella/cli/language_rb.html +101 -0
- data/doc/files/lib/stella/cli/localtest_rb.html +101 -0
- data/doc/files/lib/stella/cli_rb.html +112 -0
- data/doc/files/lib/stella/command/base_rb.html +101 -0
- data/doc/files/lib/stella/command/localtest_rb.html +101 -0
- data/doc/files/lib/stella/logger_rb.html +101 -0
- data/doc/files/lib/stella/response_rb.html +101 -0
- data/doc/files/lib/stella/storable_rb.html +109 -0
- data/doc/files/lib/stella/support_rb.html +101 -0
- data/doc/files/lib/stella/test/daysummary_rb.html +101 -0
- data/doc/files/lib/stella/test/definition_rb.html +101 -0
- data/doc/files/lib/stella/test/runsummary_rb.html +101 -0
- data/doc/files/lib/stella/test/summarybase_rb.html +101 -0
- data/doc/files/lib/stella/test/testsummary_rb.html +108 -0
- data/doc/files/lib/stella/text/resource_rb.html +108 -0
- data/doc/files/lib/stella/text_rb.html +108 -0
- data/doc/files/lib/stella_rb.html +128 -0
- data/doc/files/lib/utils/crypto-key_rb.html +116 -0
- data/doc/files/lib/utils/fileutil_rb.html +108 -0
- data/doc/files/lib/utils/httputil_rb.html +110 -0
- data/doc/files/lib/utils/mathutil_rb.html +101 -0
- data/doc/files/lib/utils/textgraph_rb.html +138 -0
- data/doc/files/lib/utils/timerutil_rb.html +108 -0
- data/doc/fr_class_index.html +66 -0
- data/doc/fr_file_index.html +62 -0
- data/doc/fr_method_index.html +309 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/stella.rb +5 -6
- data/lib/stella/adapter/ab.rb +4 -31
- data/lib/stella/adapter/base.rb +1 -15
- data/lib/stella/adapter/httperf.rb +4 -35
- data/lib/stella/adapter/siege.rb +29 -51
- data/lib/stella/cli.rb +22 -45
- data/lib/stella/cli/language.rb +0 -2
- data/lib/stella/cli/localtest.rb +0 -5
- data/lib/stella/command/base.rb +1 -1
- data/lib/stella/command/localtest.rb +68 -84
- data/lib/stella/test/daysummary.rb +93 -0
- data/lib/stella/test/definition.rb +5 -10
- data/lib/stella/test/{run/summary.rb → runsummary.rb} +6 -4
- data/lib/stella/test/{base.rb → summarybase.rb} +7 -3
- data/lib/stella/test/{summary.rb → testsummary.rb} +29 -27
- data/lib/utils/mathutil.rb +34 -36
- data/spec/base.rb +26 -0
- data/spec/shell_spec.rb +12 -0
- data/support/text/en.yaml +1 -7
- metadata +102 -8
- data/lib/stella/cli/agents.rb +0 -73
- data/lib/utils/escape.rb +0 -302
data/doc/index.html
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
|
5
|
+
|
|
6
|
+
<!--
|
|
7
|
+
|
|
8
|
+
stella, a friend in performance testing
|
|
9
|
+
|
|
10
|
+
-->
|
|
11
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
12
|
+
<head>
|
|
13
|
+
<title>stella, a friend in performance testing</title>
|
|
14
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
15
|
+
</head>
|
|
16
|
+
<frameset rows="20%, 80%">
|
|
17
|
+
<frameset cols="25%,35%,45%">
|
|
18
|
+
<frame src="fr_file_index.html" title="Files" name="Files" />
|
|
19
|
+
<frame src="fr_class_index.html" name="Classes" />
|
|
20
|
+
<frame src="fr_method_index.html" name="Methods" />
|
|
21
|
+
</frameset>
|
|
22
|
+
<frame src="files/LICENSE_txt.html" name="docwin" />
|
|
23
|
+
</frameset>
|
|
24
|
+
</html>
|
data/doc/rdoc-style.css
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
|
|
2
|
+
body {
|
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
|
4
|
+
font-size: 90%;
|
|
5
|
+
margin: 0;
|
|
6
|
+
margin-left: 40px;
|
|
7
|
+
padding: 0;
|
|
8
|
+
background: white;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
|
12
|
+
h1 { font-size: 150%; }
|
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
|
14
|
+
|
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
|
16
|
+
a:hover { background: #039; color: #eef; }
|
|
17
|
+
|
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
|
19
|
+
td > a {
|
|
20
|
+
background: transparent;
|
|
21
|
+
color: #039;
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* and inside a section title */
|
|
26
|
+
.section-title > a {
|
|
27
|
+
background: transparent;
|
|
28
|
+
color: #eee;
|
|
29
|
+
text-decoration: none;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* === Structural elements =================================== */
|
|
33
|
+
|
|
34
|
+
div#index {
|
|
35
|
+
margin: 0;
|
|
36
|
+
margin-left: -40px;
|
|
37
|
+
padding: 0;
|
|
38
|
+
font-size: 90%;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
div#index a {
|
|
43
|
+
margin-left: 0.7em;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
div#index .section-bar {
|
|
47
|
+
margin-left: 0px;
|
|
48
|
+
padding-left: 0.7em;
|
|
49
|
+
background: #ccc;
|
|
50
|
+
font-size: small;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
div#classHeader, div#fileHeader {
|
|
55
|
+
width: auto;
|
|
56
|
+
color: white;
|
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
|
58
|
+
margin: 0;
|
|
59
|
+
margin-left: -40px;
|
|
60
|
+
border-bottom: 3px solid #006;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
div#classHeader a, div#fileHeader a {
|
|
64
|
+
background: inherit;
|
|
65
|
+
color: white;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
div#classHeader td, div#fileHeader td {
|
|
69
|
+
background: inherit;
|
|
70
|
+
color: white;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
div#fileHeader {
|
|
75
|
+
background: #057;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
div#classHeader {
|
|
79
|
+
background: #048;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
.class-name-in-header {
|
|
84
|
+
font-size: 180%;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
div#bodyContent {
|
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
div#description {
|
|
94
|
+
padding: 0.5em 1.5em;
|
|
95
|
+
background: #efefef;
|
|
96
|
+
border: 1px dotted #999;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
|
100
|
+
color: #125;;
|
|
101
|
+
background: transparent;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
div#validator-badges {
|
|
105
|
+
text-align: center;
|
|
106
|
+
}
|
|
107
|
+
div#validator-badges img { border: 0; }
|
|
108
|
+
|
|
109
|
+
div#copyright {
|
|
110
|
+
color: #333;
|
|
111
|
+
background: #efefef;
|
|
112
|
+
font: 0.75em sans-serif;
|
|
113
|
+
margin-top: 5em;
|
|
114
|
+
margin-bottom: 0;
|
|
115
|
+
padding: 0.5em 2em;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/* === Classes =================================== */
|
|
120
|
+
|
|
121
|
+
table.header-table {
|
|
122
|
+
color: white;
|
|
123
|
+
font-size: small;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.type-note {
|
|
127
|
+
font-size: small;
|
|
128
|
+
color: #DEDEDE;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.xxsection-bar {
|
|
132
|
+
background: #eee;
|
|
133
|
+
color: #333;
|
|
134
|
+
padding: 3px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.section-bar {
|
|
138
|
+
color: #333;
|
|
139
|
+
border-bottom: 1px solid #999;
|
|
140
|
+
margin-left: -20px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
.section-title {
|
|
145
|
+
background: #79a;
|
|
146
|
+
color: #eee;
|
|
147
|
+
padding: 3px;
|
|
148
|
+
margin-top: 2em;
|
|
149
|
+
margin-left: -30px;
|
|
150
|
+
border: 1px solid #999;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.top-aligned-row { vertical-align: top }
|
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
|
155
|
+
|
|
156
|
+
/* --- Context section classes ----------------------- */
|
|
157
|
+
|
|
158
|
+
.context-row { }
|
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
|
162
|
+
|
|
163
|
+
/* --- Method classes -------------------------- */
|
|
164
|
+
.method-detail {
|
|
165
|
+
background: #efefef;
|
|
166
|
+
padding: 0;
|
|
167
|
+
margin-top: 0.5em;
|
|
168
|
+
margin-bottom: 1em;
|
|
169
|
+
border: 1px dotted #ccc;
|
|
170
|
+
}
|
|
171
|
+
.method-heading {
|
|
172
|
+
color: black;
|
|
173
|
+
background: #ccc;
|
|
174
|
+
border-bottom: 1px solid #666;
|
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
|
176
|
+
}
|
|
177
|
+
.method-signature { color: black; background: inherit; }
|
|
178
|
+
.method-name { font-weight: bold; }
|
|
179
|
+
.method-args { font-style: italic; }
|
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
|
181
|
+
|
|
182
|
+
/* --- Source code sections -------------------- */
|
|
183
|
+
|
|
184
|
+
a.source-toggle { font-size: 90%; }
|
|
185
|
+
div.method-source-code {
|
|
186
|
+
background: #262626;
|
|
187
|
+
color: #ffdead;
|
|
188
|
+
margin: 1em;
|
|
189
|
+
padding: 0.5em;
|
|
190
|
+
border: 1px dashed #999;
|
|
191
|
+
overflow: hidden;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
195
|
+
|
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
|
197
|
+
|
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
|
199
|
+
|
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
data/lib/stella.rb
CHANGED
|
@@ -10,7 +10,6 @@ require 'utils/httputil'
|
|
|
10
10
|
require 'utils/crypto-key'
|
|
11
11
|
require 'utils/fileutil'
|
|
12
12
|
require 'utils/mathutil'
|
|
13
|
-
require 'utils/escape'
|
|
14
13
|
|
|
15
14
|
# Common dependencies
|
|
16
15
|
require 'stella/support'
|
|
@@ -22,8 +21,8 @@ require 'stella/text'
|
|
|
22
21
|
require 'stella/logger'
|
|
23
22
|
require 'stella/response'
|
|
24
23
|
require 'stella/test/definition'
|
|
25
|
-
require 'stella/test/
|
|
26
|
-
require 'stella/test/
|
|
24
|
+
require 'stella/test/runsummary'
|
|
25
|
+
require 'stella/test/testsummary'
|
|
27
26
|
|
|
28
27
|
# Commands
|
|
29
28
|
require 'stella/command/base'
|
|
@@ -39,13 +38,13 @@ require 'stella/adapter/httperf'
|
|
|
39
38
|
# A friend in performance testing.
|
|
40
39
|
#
|
|
41
40
|
module Stella
|
|
42
|
-
LOGGER = Stella::Logger.new(:debug=>
|
|
41
|
+
LOGGER = Stella::Logger.new(:debug=>true)
|
|
43
42
|
TEXT = Stella::Text.new('en')
|
|
44
43
|
|
|
45
44
|
module VERSION #:nodoc:
|
|
46
45
|
MAJOR = 0.freeze unless defined? MAJOR
|
|
47
|
-
MINOR =
|
|
48
|
-
TINY =
|
|
46
|
+
MINOR = 5.freeze unless defined? MINOR
|
|
47
|
+
TINY = 1.freeze unless defined? TINY
|
|
49
48
|
def self.to_s
|
|
50
49
|
[MAJOR, MINOR, TINY].join('.')
|
|
51
50
|
end
|
data/lib/stella/adapter/ab.rb
CHANGED
|
@@ -86,9 +86,9 @@ module Stella
|
|
|
86
86
|
# because it applies the load factor.
|
|
87
87
|
value = self.send(canon)
|
|
88
88
|
if (value.is_a? Array)
|
|
89
|
-
value.each { |el| command << "-#{
|
|
89
|
+
value.each { |el| command << "-#{cannon} '#{el}' " }
|
|
90
90
|
else
|
|
91
|
-
command << "-#{canon} #{
|
|
91
|
+
command << "-#{canon} '#{value}' "
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
end
|
|
@@ -168,19 +168,7 @@ module Stella
|
|
|
168
168
|
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
|
|
172
|
-
@H ||= []
|
|
173
|
-
@H << "#{name}: #{value}"
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def user_agent=(list=[])
|
|
177
|
-
return unless list && !list.empty?
|
|
178
|
-
list = list.to_ary
|
|
179
|
-
list.each do |agent|
|
|
180
|
-
add_header("User-Agent", agent)
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
171
|
+
|
|
184
172
|
def vusers
|
|
185
173
|
c || 0
|
|
186
174
|
end
|
|
@@ -252,22 +240,7 @@ module Stella
|
|
|
252
240
|
raw[n.to_sym] = v.to_f unless raw.has_key? n.to_sym
|
|
253
241
|
}
|
|
254
242
|
|
|
255
|
-
|
|
256
|
-
# Document Length: 96 bytes
|
|
257
|
-
#
|
|
258
|
-
# Concurrency Level: 75
|
|
259
|
-
# Time taken for tests: 2.001 seconds
|
|
260
|
-
# Complete requests: 750
|
|
261
|
-
# Failed requests: 0
|
|
262
|
-
# Write errors: 0
|
|
263
|
-
# Total transferred: 174000 bytes
|
|
264
|
-
# HTML transferred: 72000 bytes
|
|
265
|
-
# Requests per second: 374.74 [#/sec] (mean)
|
|
266
|
-
# Time per request: 200.138 [ms] (mean)
|
|
267
|
-
# Time per request: 2.669 [ms] (mean, across all concurrent requests)
|
|
268
|
-
# Transfer rate: 84.90 [Kbytes/sec] received
|
|
269
|
-
|
|
270
|
-
stats = Stella::Test::Run::Summary.new
|
|
243
|
+
stats = Stella::Test::RunSummary.new
|
|
271
244
|
|
|
272
245
|
unless raw.empty? || !raw.has_key?(:time_taken_for_tests)
|
|
273
246
|
|
data/lib/stella/adapter/base.rb
CHANGED
|
@@ -60,27 +60,13 @@ module Stella::Adapter
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def name
|
|
63
|
-
@
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def rate
|
|
67
|
-
1
|
|
68
|
-
end
|
|
69
|
-
def vuser_rate
|
|
70
|
-
"#{vusers}/#{rate}"
|
|
63
|
+
@command_name
|
|
71
64
|
end
|
|
72
65
|
|
|
73
66
|
def command
|
|
74
67
|
raise Stella::TEXT.msg(:error_class_must_override, 'command')
|
|
75
68
|
end
|
|
76
69
|
|
|
77
|
-
def add_header
|
|
78
|
-
raise Stella::TEXT.msg(:error_class_must_override, 'add_header')
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def user_agent=
|
|
82
|
-
raise Stella::TEXT.msg(:error_class_must_override, 'user_agent=')
|
|
83
|
-
end
|
|
84
70
|
|
|
85
71
|
end
|
|
86
72
|
end
|
|
@@ -55,9 +55,9 @@ module Stella
|
|
|
55
55
|
# because it applies the load factor.
|
|
56
56
|
value = self.send(canon)
|
|
57
57
|
if (value.is_a? Array)
|
|
58
|
-
value.each { |el| command << "--#{canon.tr('_', '-')} #{
|
|
58
|
+
value.each { |el| command << "--#{canon.tr('_', '-')} '#{el}' " }
|
|
59
59
|
else
|
|
60
|
-
command << "--#{canon.tr('_', '-')} #{
|
|
60
|
+
command << "--#{canon.tr('_', '-')} '#{value}' "
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
end
|
|
@@ -102,7 +102,7 @@ module Stella
|
|
|
102
102
|
|
|
103
103
|
opts.on('--add-header=S', String) do |v| @add_header ||= []; @add_header << v; end
|
|
104
104
|
opts.on('--burst-length=N', Integer) do |v| @burst_length = v end
|
|
105
|
-
opts.on('--client=
|
|
105
|
+
opts.on('--client=N', Integer) do |v| @client = v end
|
|
106
106
|
opts.on('-d N', '--debug=N', Integer) do |v| @debug ||= 0; @debug = v end
|
|
107
107
|
opts.on('--failure-status=N', Integer) do |v| @failure_status = v end
|
|
108
108
|
|
|
@@ -161,22 +161,6 @@ module Stella
|
|
|
161
161
|
@name && !instance_variables.empty?
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
-
def add_header(name=false, value=false)
|
|
165
|
-
# This is a hack since we have an instance variable called add_header.
|
|
166
|
-
# I figure this is the best of two evils because I'd rather keep the
|
|
167
|
-
# instance variable naming consistent.
|
|
168
|
-
return @add_header if !name && !value
|
|
169
|
-
@add_header ||= []
|
|
170
|
-
@add_header << "#{name}: #{value}"
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
def user_agent=(list=[])
|
|
174
|
-
return unless list && !list.empty?
|
|
175
|
-
list = list.to_ary
|
|
176
|
-
list.each do |agent|
|
|
177
|
-
add_header("User-Agent", agent)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
164
|
def vusers
|
|
181
165
|
@rate
|
|
182
166
|
end
|
|
@@ -192,21 +176,6 @@ module Stella
|
|
|
192
176
|
def vuser_requests
|
|
193
177
|
0
|
|
194
178
|
end
|
|
195
|
-
def wsess
|
|
196
|
-
@wsess.join(',')
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def wset
|
|
200
|
-
@wset.join(',')
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
def wsesslog
|
|
205
|
-
@wsesslog.join(',')
|
|
206
|
-
end
|
|
207
|
-
def wlog
|
|
208
|
-
@wlog.join(',')
|
|
209
|
-
end
|
|
210
179
|
|
|
211
180
|
#def concurrent
|
|
212
181
|
# (@concurrent * @load_factor).to_i
|
|
@@ -266,7 +235,7 @@ module Stella
|
|
|
266
235
|
return unless stats_file
|
|
267
236
|
|
|
268
237
|
raw = stats_file.readlines.join
|
|
269
|
-
stats = Stella::Test::
|
|
238
|
+
stats = Stella::Test::RunSummary.new
|
|
270
239
|
|
|
271
240
|
raw.scan(/Request rate: (\d+?\.\d+?) req.s .(\d+?\.\d+?) ms.req./) do |rate,time|
|
|
272
241
|
stats.transaction_rate = rate.to_f
|
data/lib/stella/adapter/siege.rb
CHANGED
|
@@ -95,9 +95,9 @@ module Stella
|
|
|
95
95
|
# because it applies the load factor.
|
|
96
96
|
value = self.send(canon)
|
|
97
97
|
if (value.is_a? Array)
|
|
98
|
-
value.each { |el| command << "--#{
|
|
98
|
+
value.each { |el| command << "--#{cannon.tr('_', '-')} '#{el}' " }
|
|
99
99
|
else
|
|
100
|
-
command << "--#{canon.tr('_', '-')} #{
|
|
100
|
+
command << "--#{canon.tr('_', '-')} '#{value}' "
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
end
|
|
@@ -118,24 +118,24 @@ module Stella
|
|
|
118
118
|
def process_options(arguments)
|
|
119
119
|
options = OpenStruct.new
|
|
120
120
|
opts = OptionParser.new
|
|
121
|
-
opts.on('-V', '--version') do |v|
|
|
122
|
-
opts.on('-h', '--help') do |v|
|
|
123
|
-
opts.on('-C', '--config') do |v|
|
|
124
|
-
opts.on('-v', '--verbose') do |v|
|
|
125
|
-
opts.on('-g', '--get') do |v|
|
|
126
|
-
opts.on('-l', '--log') do |v|
|
|
127
|
-
opts.on('-m S', '--mark=S', String) do |v|
|
|
128
|
-
opts.on('-d N', '--delay=N', Float) do |v|
|
|
129
|
-
opts.on('-H S', '--header=S', String) do |v|
|
|
121
|
+
opts.on('-V', '--version') do |v| options.version = v end
|
|
122
|
+
opts.on('-h', '--help') do |v| options.help = v end
|
|
123
|
+
opts.on('-C', '--config') do |v| options.config = v end
|
|
124
|
+
opts.on('-v', '--verbose') do |v| options.verbose = v end
|
|
125
|
+
opts.on('-g', '--get') do |v| options.get = v end
|
|
126
|
+
opts.on('-l', '--log') do |v| options.log = v end
|
|
127
|
+
opts.on('-m S', '--mark=S', String) do |v| options.mark = v end
|
|
128
|
+
opts.on('-d N', '--delay=N', Float) do |v| options.delay = v end
|
|
129
|
+
opts.on('-H S', '--header=S', String) do |v| options.header ||= []; options.header << v end
|
|
130
130
|
|
|
131
|
-
opts.on('-r N', '--reps=N', Integer) do |v|
|
|
132
|
-
opts.on('-c N', '--concurrent=N', Integer) do |v|
|
|
133
|
-
opts.on('-R S', '--rc=S', String) do |v|
|
|
134
|
-
opts.on('-f S', '--file=S', String) do |v|
|
|
135
|
-
opts.on('-t S', '--time=S', String) do |v|
|
|
136
|
-
opts.on('-b', '--benchmark') do |v|
|
|
137
|
-
opts.on('-i', '--internet') do |v|
|
|
138
|
-
opts.on('-A S', '--user-agent=S', String) do |v|
|
|
131
|
+
opts.on('-r N', '--reps=N', Integer) do |v| options.reps = v.to_i end
|
|
132
|
+
opts.on('-c N', '--concurrent=N', Integer) do |v| options.concurrent = v.to_i end
|
|
133
|
+
opts.on('-R S', '--rc=S', String) do |v| options.rc = v end
|
|
134
|
+
opts.on('-f S', '--file=S', String) do |v| options.file = v end
|
|
135
|
+
opts.on('-t S', '--time=S', String) do |v| options.time = v end
|
|
136
|
+
opts.on('-b', '--benchmark') do |v| options.benchmark = true; end
|
|
137
|
+
opts.on('-i', '--internet') do |v| options.internet = true; end
|
|
138
|
+
opts.on('-A S', '--user-agent=S', String) do |v| options.user_agent = v end
|
|
139
139
|
|
|
140
140
|
raise "You cannot select both --internet and --benchmark" if options.internet && options.benchmark
|
|
141
141
|
|
|
@@ -150,19 +150,7 @@ module Stella
|
|
|
150
150
|
raise InvalidArgument.new(badarg)
|
|
151
151
|
end
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
def add_header(name, value)
|
|
155
|
-
@header ||= []
|
|
156
|
-
@header << "#{name}: #{value}"
|
|
157
|
-
end
|
|
158
|
-
def user_agent=(list=[])
|
|
159
|
-
return unless list && !list.empty?
|
|
160
|
-
list = list.to_ary
|
|
161
|
-
@user_agent ||= []
|
|
162
|
-
@user_agent << list
|
|
163
|
-
@user_agent.flatten
|
|
164
|
-
end
|
|
165
|
-
|
|
153
|
+
|
|
166
154
|
def vusers
|
|
167
155
|
concurrent || 0
|
|
168
156
|
end
|
|
@@ -284,33 +272,23 @@ module Stella
|
|
|
284
272
|
raw[n.to_sym] = v.to_f
|
|
285
273
|
}
|
|
286
274
|
|
|
287
|
-
stats = Stella::Test::
|
|
288
|
-
|
|
289
|
-
# Transactions: 750 hits
|
|
290
|
-
# Availability: 100.00 %
|
|
291
|
-
# Elapsed time: 2.33 secs
|
|
292
|
-
# Data transferred: 0.07 MB
|
|
293
|
-
# Response time: 0.21 secs
|
|
294
|
-
# Transaction rate: 321.89 trans/sec
|
|
295
|
-
# Throughput: 0.03 MB/sec
|
|
296
|
-
# Concurrency: 67.49
|
|
297
|
-
# Successful transactions: 750
|
|
298
|
-
# Failed transactions: 0
|
|
299
|
-
# Longest transaction: 0.33
|
|
300
|
-
# Shortest transaction: 0.10
|
|
301
|
-
|
|
275
|
+
stats = Stella::Test::RunSummary.new
|
|
276
|
+
|
|
302
277
|
stats.vusers = raw[:concurrency]
|
|
303
278
|
stats.data_transferred = raw[:data_transferred]
|
|
279
|
+
|
|
280
|
+
|
|
304
281
|
stats.elapsed_time = raw[:elapsed_time]
|
|
305
282
|
stats.response_time = raw[:response_time]
|
|
283
|
+
|
|
284
|
+
#stats.shortest_transaction = raw[:shortest_transaction]
|
|
285
|
+
#stats.longest_transaction = raw[:longest_transaction]
|
|
286
|
+
|
|
306
287
|
stats.transactions = raw[:transactions].to_i
|
|
307
288
|
stats.transaction_rate = raw[:transaction_rate]
|
|
308
289
|
stats.failed = raw[:failed_transactions].to_i
|
|
309
290
|
stats.successful = raw[:successful_transactions].to_i
|
|
310
|
-
|
|
311
|
-
#stats.shortest_transaction = raw[:shortest_transaction]
|
|
312
|
-
#stats.longest_transaction = raw[:longest_transaction]
|
|
313
|
-
|
|
291
|
+
#stats.raw = raw if @global_options.debug
|
|
314
292
|
stats
|
|
315
293
|
end
|
|
316
294
|
|