stella 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +16 -0
- data/Rudyfile +63 -27
- data/bin/stella +1 -0
- data/examples/essentials/plan.rb +1 -1
- data/examples/exceptions/plan.rb +1 -1
- data/lib/stella.rb +5 -1
- data/lib/stella/cli.rb +1 -1
- data/lib/stella/client.rb +119 -53
- data/lib/stella/client/container.rb +264 -14
- data/lib/stella/client/modifiers.rb +1 -0
- data/lib/stella/data.rb +182 -61
- data/lib/stella/data/http/request.rb +20 -2
- data/lib/stella/engine.rb +6 -2
- data/lib/stella/engine/functional.rb +35 -20
- data/lib/stella/engine/load_create.rb +2 -0
- data/lib/stella/engine/load_queue.rb +27 -7
- data/lib/stella/engine/loadbase.rb +22 -12
- data/lib/stella/testplan.rb +8 -1
- data/lib/stella/testplan/usecase.rb +14 -1
- data/lib/stella/version.rb +2 -2
- data/stella.gemspec +3 -1
- data/support/sample_webapp/app.rb +0 -1
- data/tryouts/configs/failed_requests.rb +31 -0
- data/tryouts/configs/global_sequential.rb +18 -0
- data/vendor/httpclient-2.1.5.2/httpclient.rb +2 -2
- metadata +5 -3
data/CHANGES.txt
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
STELLA, CHANGES
|
2
2
|
|
3
3
|
|
4
|
+
#### 0.7.2 (2009-10-29) ###############################
|
5
|
+
|
6
|
+
* FIXED: bin/stella exits with 1 if any request fails.
|
7
|
+
* CHANGE: sequential and rsequential resourcing is now global
|
8
|
+
across all clients.
|
9
|
+
* ADDED: Automatic form parsing for html pages
|
10
|
+
* ADDED: Container now has params and headers from the request
|
11
|
+
* ADDED: Assume HTTP response codes >= 400 are failed requests
|
12
|
+
unless a response block is defined for that status in which
|
13
|
+
case the block must return fail.
|
14
|
+
* ADDED: Support for HTTP Basic authentication
|
15
|
+
* ADDED: Templating for resources parameters and headers.
|
16
|
+
* ADDED: Built-in variable :HOSTNAME can be overriden by CLI argument.
|
17
|
+
* ADDED: Automatic JSON parsing in response blocks (as 'doc')
|
18
|
+
|
19
|
+
|
4
20
|
#### 0.7.1 (2009-10-21) ###############################
|
5
21
|
|
6
22
|
NOTE: Complete rewrite. Features include:
|
data/Rudyfile
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
machines do
|
4
4
|
|
5
5
|
region :'us-east-1' do
|
6
|
-
ami 'ami-
|
6
|
+
ami 'ami-212ccf48' # Stella Debian 5.0, 32-bit (US)
|
7
7
|
end
|
8
8
|
region :'eu-west-1' do
|
9
9
|
ami 'ami-6ecde51a' # Alestic Debian 5.0, 32-bit (EU)
|
@@ -20,8 +20,14 @@ machines do
|
|
20
20
|
role :gen do
|
21
21
|
user :root
|
22
22
|
size 'm1.large'
|
23
|
-
ami 'ami-
|
23
|
+
ami 'ami-7133d018'
|
24
24
|
end
|
25
|
+
|
26
|
+
role :demo do
|
27
|
+
user :root
|
28
|
+
size 'm1.small'
|
29
|
+
end
|
30
|
+
|
25
31
|
end
|
26
32
|
|
27
33
|
|
@@ -40,9 +46,11 @@ commands do
|
|
40
46
|
allow :stella
|
41
47
|
allow :rm
|
42
48
|
allow :ulimit
|
43
|
-
|
49
|
+
allow :ruby19, "/usr/local/bin/ruby"
|
50
|
+
allow :gem19_install, "/usr/local/bin/gem", "install"
|
44
51
|
allow :rackup_path do
|
45
|
-
|
52
|
+
v = [Stella::VERSION::MAJOR, Stella::VERSION::MINOR, Stella::VERSION::TINY].join('.')
|
53
|
+
"/usr/lib/ruby/gems/1.8/gems/stella-#{v}/support/sample_webapp/config.ru"
|
46
54
|
end
|
47
55
|
end
|
48
56
|
|
@@ -53,9 +61,9 @@ routines do
|
|
53
61
|
# rudy -r app -v start
|
54
62
|
start do
|
55
63
|
remote do
|
56
|
-
ulimit :n, '30000'
|
57
|
-
ulimit :n
|
58
|
-
rm 'thin.log'
|
64
|
+
#ulimit :n, '30000'
|
65
|
+
#ulimit :n
|
66
|
+
rm :f, 'thin.log'
|
59
67
|
mkdir :p, 'stats'
|
60
68
|
thin :d, :l, 'thin.log', :p, 3114, :R, rackup_path, '--stats', './stats', '--max-conns', 8192, 'start'
|
61
69
|
end
|
@@ -69,28 +77,33 @@ routines do
|
|
69
77
|
ps 'ux'
|
70
78
|
end
|
71
79
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
# rudy -v -r gen verify ip-10-251-27-245.ec2.internal:3114
|
85
|
+
verify do
|
86
|
+
remote do |arg|
|
87
|
+
file_upload 'examples/essentials/plan.rb'
|
88
|
+
file_upload 'examples/essentials/search_terms.txt'
|
89
|
+
file_upload 'examples/essentials/logo.png'
|
90
|
+
stella :v, 'verify', :p, 'plan.rb', "#{arg.first}"
|
78
91
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
92
|
+
end
|
93
|
+
|
94
|
+
# rudy -v -r gen generate ip-10-251-27-245.ec2.internal:3114
|
95
|
+
generate do
|
96
|
+
remote do |arg|
|
97
|
+
file_upload 'examples/essentials/plan.rb'
|
98
|
+
file_upload 'examples/essentials/search_terms.txt'
|
99
|
+
file_upload 'examples/essentials/logo.png'
|
100
|
+
stella :v, 'generate', :p, 'plan.rb', :c, 1, :d, '1m', :W, "#{arg.first}"
|
87
101
|
end
|
88
|
-
|
89
102
|
end
|
90
|
-
|
103
|
+
|
104
|
+
|
91
105
|
setup do
|
92
|
-
|
93
|
-
after :sysupdate, :installdeps, :install_gem
|
106
|
+
after :sysupdate, :installdeps, :install_ruby19
|
94
107
|
end
|
95
108
|
|
96
109
|
shutdown do
|
@@ -105,6 +118,7 @@ routines do
|
|
105
118
|
|
106
119
|
install_rubyforge do
|
107
120
|
remote :root do
|
121
|
+
gem19_install 'stella', :V
|
108
122
|
gem_install 'stella', :V
|
109
123
|
end
|
110
124
|
end
|
@@ -139,6 +153,17 @@ routines do
|
|
139
153
|
|
140
154
|
end
|
141
155
|
|
156
|
+
install_zlib do
|
157
|
+
remote do
|
158
|
+
wget "http://www.zlib.net/zlib-1.2.3.tar.gz"
|
159
|
+
tar :x, :z, :f, "zlib-1.2.3.tar.gz"
|
160
|
+
cd "zlib-1.2.3"
|
161
|
+
configure '--prefix=/usr/local'
|
162
|
+
make
|
163
|
+
make "install"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
142
167
|
installdeps do
|
143
168
|
remote :root do
|
144
169
|
gem_install "test-spec", "rspec", "camping", "fcgi", "memcache-client"
|
@@ -148,12 +173,23 @@ routines do
|
|
148
173
|
end
|
149
174
|
end
|
150
175
|
|
176
|
+
install_jruby do
|
177
|
+
remote do
|
178
|
+
wget 'http://jruby.kenai.com/downloads/1.4.0RC2/jruby-bin-1.4.0RC2.tar.gz'
|
179
|
+
tar :x, :z, :f, 'jruby-bin-1.4.0RC2.tar.gz'
|
180
|
+
mv 'jruby-1.4.0RC2', '/usr/jruby'
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
151
184
|
install_ruby19 do
|
185
|
+
before :install_zlib
|
152
186
|
remote do
|
153
|
-
|
187
|
+
apt_get "install", "libssl-dev", "libreadline5-dev", "zlib1g-dev"
|
188
|
+
#wget 'ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.bz2'
|
189
|
+
rm :r, :f, 'ruby-1.9.1-p243'
|
154
190
|
tar :x, :j, :v, :f, 'ruby-1.9.1-p243.tar.bz2'
|
155
191
|
cd 'ruby-1.9.1-p243'
|
156
|
-
configure '--prefix=/usr/local'
|
192
|
+
configure '--prefix=/usr/local'
|
157
193
|
make
|
158
194
|
make 'install'
|
159
195
|
end
|
data/bin/stella
CHANGED
@@ -100,6 +100,7 @@ class Stella::CLI::Definition
|
|
100
100
|
option :W, :nowait, "Ignore wait times"
|
101
101
|
option :w, :wait, Float, "Wait time (in seconds) between client requests (ignored if testplan supplied)"
|
102
102
|
option :p, :testplan, String, "Path to testplan"
|
103
|
+
option :'disable-templates', "Disable template parsing"
|
103
104
|
command :generate => Stella::CLI
|
104
105
|
|
105
106
|
about "Initialize Stella configuration"
|
data/examples/essentials/plan.rb
CHANGED
@@ -214,7 +214,7 @@ usecase 25, "YAML API" do
|
|
214
214
|
# vuser will have its own copy of the Array and
|
215
215
|
# iterate through it independently.
|
216
216
|
#
|
217
|
-
param :lid =>
|
217
|
+
param :lid => sequential(:listing_ids)
|
218
218
|
|
219
219
|
# We can use response blocks to affect behaviour
|
220
220
|
# the user. Here we specify that every virtual
|
data/examples/exceptions/plan.rb
CHANGED
data/lib/stella.rb
CHANGED
@@ -12,6 +12,7 @@ autoload :OpenStruct, 'ostruct'
|
|
12
12
|
autoload :Storable, 'storable'
|
13
13
|
autoload :Gibbler, 'gibbler/aliases'
|
14
14
|
autoload :Attic, 'attic'
|
15
|
+
autoload :ERB, 'erb'
|
15
16
|
|
16
17
|
require 'benelux'
|
17
18
|
|
@@ -52,7 +53,10 @@ module Stella
|
|
52
53
|
def le(*msg); @logger.puts " " << msg.join("#{$/} ").color(:red); end
|
53
54
|
# Puts +msg+ to +@logger+ if +Rudy.debug?+ returns true
|
54
55
|
def ld(*msg)
|
55
|
-
|
56
|
+
if debug?
|
57
|
+
@logger.puts "D(#{Thread.current.object_id}): " << msg.join("#{$/}D: ")
|
58
|
+
Stella.lflush
|
59
|
+
end
|
56
60
|
end
|
57
61
|
|
58
62
|
def sysinfo
|
data/lib/stella/cli.rb
CHANGED
@@ -26,7 +26,7 @@ class Stella::CLI < Drydock::Command
|
|
26
26
|
def generate
|
27
27
|
opts = {}
|
28
28
|
opts[:hosts] = @hosts
|
29
|
-
[:nowait, :clients, :repetitions, :duration].each do |opt|
|
29
|
+
[:nowait, :clients, :repetitions, :duration, :'disable-templates'].each do |opt|
|
30
30
|
opts[opt] = @option.send(opt) unless @option.send(opt).nil?
|
31
31
|
end
|
32
32
|
|
data/lib/stella/client.rb
CHANGED
@@ -15,9 +15,12 @@ module Stella
|
|
15
15
|
attr_accessor :base_uri
|
16
16
|
attr_accessor :proxy
|
17
17
|
|
18
|
-
def initialize(base_uri=nil, client_id=1)
|
18
|
+
def initialize(base_uri=nil, client_id=1, opts={})
|
19
|
+
opts = {
|
20
|
+
:parse_templates => true
|
21
|
+
}.merge! opts
|
22
|
+
@opts = opts
|
19
23
|
@base_uri, @client_id = base_uri, client_id
|
20
|
-
|
21
24
|
#@cookie_file = File.new("cookies-#{client_id}", 'w')
|
22
25
|
@proxy = OpenStruct.new
|
23
26
|
end
|
@@ -27,7 +30,7 @@ module Stella
|
|
27
30
|
|
28
31
|
http_client = create_http_client
|
29
32
|
stats = {}
|
30
|
-
container = Container.new(usecase)
|
33
|
+
container = Container.new(self.digest_cache, usecase)
|
31
34
|
counter = 0
|
32
35
|
usecase.requests.each do |req|
|
33
36
|
counter += 1
|
@@ -36,11 +39,27 @@ module Stella
|
|
36
39
|
|
37
40
|
stats ||= Benelux::Stats.new
|
38
41
|
update(:prepare_request, usecase, req, counter)
|
39
|
-
|
42
|
+
|
43
|
+
# This is for the values that were "set"
|
44
|
+
# in the part before the response body.
|
45
|
+
prepare_resources(container, req.resources)
|
46
|
+
|
40
47
|
params = prepare_params(container, req.params)
|
41
48
|
headers = prepare_headers(container, req.headers)
|
42
|
-
|
43
|
-
|
49
|
+
|
50
|
+
container.params, container.headers = params, headers
|
51
|
+
|
52
|
+
uri = build_request_uri req.uri, params, container
|
53
|
+
|
54
|
+
if usecase.http_auth
|
55
|
+
# TODO: The first arg is domain and can include a URI path.
|
56
|
+
# Are there cases where this is important?
|
57
|
+
domain = '%s://%s%s' % [uri.scheme, uri.host, '/'] #File.dirname(uri.path)
|
58
|
+
user, pass = usecase.http_auth.user, usecase.http_auth.pass
|
59
|
+
Stella.li2 " AUTH (#{usecase.http_auth.kind}) #{domain} (#{user}/#{pass})"
|
60
|
+
http_client.set_auth(domain, user, pass)
|
61
|
+
end
|
62
|
+
raise NoHostDefined, req.uri if uri.host.nil? || uri.host.empty?
|
44
63
|
stella_id = [Time.now, self.digest_cache, req.digest_cache, params, headers, counter].gibbler
|
45
64
|
|
46
65
|
Benelux.add_thread_tags :request => req.digest_cache
|
@@ -50,39 +69,60 @@ module Stella
|
|
50
69
|
params['__stella'] = headers['X-Stella-ID']= stella_id[0..10]
|
51
70
|
|
52
71
|
meth = req.http_method.to_s.downcase
|
53
|
-
Stella.ld "#{req.http_method}: " << "#{
|
54
|
-
|
72
|
+
Stella.ld "#{req.http_method}: " << "#{req.uri} " << params.inspect
|
73
|
+
|
74
|
+
ret, asset_duration = nil, 0
|
55
75
|
begin
|
56
76
|
send_request http_client, usecase, meth, uri, req, params, headers, container, counter
|
57
|
-
|
58
77
|
Benelux.add_thread_tags :status => container.status
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
78
|
+
res = container.response
|
79
|
+
[
|
80
|
+
[:request_header_size, res.request.header.dump.size],
|
81
|
+
[:request_content_size, res.request.body.content.size],
|
82
|
+
[:response_headers_size, res.header.dump.size],
|
83
|
+
[:response_content_size, res.body.content.size]
|
84
|
+
].each do |att|
|
85
|
+
Benelux.thread_timeline.add_count att[0], att[1]
|
86
|
+
end
|
63
87
|
ret = execute_response_handler container, req
|
64
|
-
|
65
|
-
|
88
|
+
|
89
|
+
asset_start = Time.now
|
90
|
+
container.assets.each do |uri|
|
91
|
+
Benelux.add_thread_tags :asset => uri
|
92
|
+
a = http_client.get uri
|
93
|
+
Stella.li3 " FETCH ASSET: #{uri} #{a.status}"
|
94
|
+
Benelux.remove_thread_tags :asset
|
95
|
+
end
|
96
|
+
asset_duration = Time.now - asset_start
|
97
|
+
|
66
98
|
rescue => ex
|
67
99
|
Benelux.thread_timeline.add_count :failed, 1
|
68
100
|
update(:request_error, usecase, uri, req, params, ex)
|
101
|
+
Benelux.remove_thread_tags :status, :retry, :request, :stella_id
|
69
102
|
next
|
70
103
|
end
|
71
104
|
|
72
105
|
Stella.lflush
|
73
106
|
|
74
|
-
run_sleeper(req.wait) if req.wait && !nowait?
|
107
|
+
run_sleeper(req.wait, asset_duration) if req.wait != 0 && !nowait?
|
75
108
|
|
76
109
|
# TODO: consider throw/catch
|
77
110
|
case ret.class.to_s
|
78
111
|
when "Stella::Client::Repeat"
|
112
|
+
Benelux.remove_thread_tags :status
|
79
113
|
update(:repeat_request, counter, ret.times+1)
|
80
114
|
redo if counter <= ret.times
|
81
115
|
when "Stella::Client::Quit"
|
116
|
+
Benelux.remove_thread_tags :status
|
82
117
|
update(:quit_usecase, ret.message)
|
83
118
|
break
|
119
|
+
when "Stella::Client::Fail"
|
120
|
+
Benelux.thread_timeline.add_count :failed, 1
|
121
|
+
update(:fail_request, ret.message)
|
84
122
|
end
|
85
|
-
|
123
|
+
|
124
|
+
Benelux.remove_thread_tags :status
|
125
|
+
|
86
126
|
counter = 0 # reset
|
87
127
|
end
|
88
128
|
Benelux.remove_thread_tags :retry, :request, :stella_id
|
@@ -103,14 +143,18 @@ module Stella
|
|
103
143
|
changed and notify_observers(kind, self.digest_cache, *args)
|
104
144
|
end
|
105
145
|
|
106
|
-
def run_sleeper(wait)
|
146
|
+
def run_sleeper(wait, already_waited=0)
|
147
|
+
# The time it took to download the assets can
|
148
|
+
# be removed from the specified wait time.
|
107
149
|
if wait.is_a?(::Range)
|
108
150
|
ms = rand(wait.last * 1000).to_f
|
109
151
|
ms = wait.first if ms < wait.first
|
110
152
|
else
|
111
153
|
ms = wait * 1000
|
112
154
|
end
|
113
|
-
|
155
|
+
sec = ms / 1000
|
156
|
+
Stella.ld "WAIT ADJUSTED FROM %.1f TO: %.1f" % [sec, (sec - already_waited)]
|
157
|
+
sleep (sec - already_waited) if (sec - already_waited) > 0
|
114
158
|
end
|
115
159
|
|
116
160
|
def create_http_client
|
@@ -123,24 +167,32 @@ module Stella
|
|
123
167
|
http_client.set_proxy_auth(@proxy.user, @proxy.pass) if @proxy.user
|
124
168
|
http_client.debug_dev = STDOUT if Stella.debug? && Stella.loglev > 3
|
125
169
|
http_client.protocol_version = "HTTP/1.1"
|
170
|
+
http_client.ssl_config.verify_mode = ::OpenSSL::SSL::VERIFY_NONE
|
126
171
|
http_client
|
127
172
|
end
|
128
173
|
|
129
|
-
def
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
v = container.instance_eval &v if v.is_a?(Proc)
|
134
|
-
newparams[n] = v
|
135
|
-
end
|
136
|
-
newparams
|
174
|
+
def prepare_resources(container, resources)
|
175
|
+
h = prepare_runtime_hash container, resources
|
176
|
+
# p [container.client_id.shorter, h]
|
177
|
+
container.resources.merge! h
|
137
178
|
end
|
138
179
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
headers
|
180
|
+
# Process resource values from the request object
|
181
|
+
def prepare_runtime_hash(container, hashobj, &extra)
|
182
|
+
newh = {}
|
183
|
+
#Stella.ld "PREPARE HEADERS: #{headers}"
|
184
|
+
hashobj.each_pair do |n,v|
|
185
|
+
v = container.instance_eval &v if v.is_a?(Proc)
|
186
|
+
if @opts[:parse_templates]
|
187
|
+
v = container.parse_template v if String === v
|
188
|
+
end
|
189
|
+
v = extra.call(v) unless extra.nil?
|
190
|
+
newh[n] = v
|
191
|
+
end
|
192
|
+
newh
|
143
193
|
end
|
194
|
+
alias_method :prepare_headers, :prepare_runtime_hash
|
195
|
+
alias_method :prepare_params, :prepare_runtime_hash
|
144
196
|
|
145
197
|
# Testplan URIs can be relative or absolute. Either one can
|
146
198
|
# contain variables in the form <tt>:varname</tt>, as in:
|
@@ -151,7 +203,17 @@ module Stella
|
|
151
203
|
# if necessary and replaces all variables with literal values.
|
152
204
|
# If no replacement value can be found, the variable will remain.
|
153
205
|
def build_request_uri(uri, params, container)
|
154
|
-
|
206
|
+
newuri = uri.clone # don't modify uri template
|
207
|
+
# We call uri.clone b/c we modify uri.
|
208
|
+
uri.scan(/:([a-z_]+)/i) do |instances|
|
209
|
+
instances.each do |varname|
|
210
|
+
val = find_replacement_value(varname, params, container, base_uri)
|
211
|
+
#Stella.ld "FOUND: #{val}"
|
212
|
+
newuri.gsub! /:#{varname}/, val.to_s unless val.nil?
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
uri = URI.parse(newuri)
|
155
217
|
|
156
218
|
if uri.host.nil? && base_uri.nil?
|
157
219
|
Stella.abort!
|
@@ -163,15 +225,7 @@ module Stella
|
|
163
225
|
uri.port = base_uri.port if uri.port.nil?
|
164
226
|
uri.path ||= ''
|
165
227
|
uri.path.gsub! /\/$/, '' # Don't double up on the first slash
|
166
|
-
|
167
|
-
# to modify request_uri inside the loop.
|
168
|
-
uri.path.clone.scan(/:([a-z_]+)/i) do |instances|
|
169
|
-
instances.each do |varname|
|
170
|
-
val = find_replacement_value(varname, params, container)
|
171
|
-
#Stella.ld "FOUND: #{val}"
|
172
|
-
uri.path.gsub! /:#{varname}/, val.to_s unless val.nil?
|
173
|
-
end
|
174
|
-
end
|
228
|
+
|
175
229
|
uri
|
176
230
|
end
|
177
231
|
|
@@ -179,35 +233,47 @@ module Stella
|
|
179
233
|
# This method looks at the request parameters and then at the
|
180
234
|
# usecase's resource hash for a replacement value.
|
181
235
|
# If not found, returns nil.
|
182
|
-
def find_replacement_value(name, params, container)
|
236
|
+
def find_replacement_value(name, params, container, base_uri)
|
183
237
|
value = nil
|
184
238
|
#Stella.ld "REPLACE: #{name}"
|
185
239
|
#Stella.ld "PARAMS: #{params.inspect}"
|
186
240
|
#Stella.ld "IVARS: #{container.instance_variables}"
|
187
|
-
|
241
|
+
if name.to_sym == :HOSTNAME && !base_uri.nil?
|
242
|
+
value = base_uri.host
|
243
|
+
elsif params.has_key?(name.to_sym)
|
244
|
+
value = params.delete name.to_sym
|
245
|
+
end
|
188
246
|
value = container.resource name.to_sym if value.nil?
|
189
247
|
value
|
190
248
|
end
|
191
249
|
|
192
250
|
# Find the appropriate response handler by executing the
|
193
251
|
# HTTP response status against the configured handlers.
|
194
|
-
# If several match, the first one is
|
195
|
-
def
|
252
|
+
# If several match, the first one is returned.
|
253
|
+
def find_response_handler(container, req)
|
196
254
|
handler = nil
|
197
255
|
req.response.each_pair do |regex,h|
|
198
256
|
Stella.ld "HANDLER REGEX: #{regex.to_s} (#{container.status})"
|
199
257
|
regex = /#{regex}/ unless regex.is_a? Regexp
|
200
258
|
handler = h and break if container.status.to_s =~ regex
|
201
259
|
end
|
260
|
+
handler
|
261
|
+
end
|
262
|
+
|
263
|
+
|
264
|
+
def execute_response_handler(container, req)
|
202
265
|
ret = nil
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
266
|
+
handler = find_response_handler container, req
|
267
|
+
if handler.nil?
|
268
|
+
Benelux.thread_timeline.add_count :failed, 1 if container.status >= 400
|
269
|
+
return
|
270
|
+
end
|
271
|
+
begin
|
272
|
+
ret = container.instance_eval &handler
|
273
|
+
update(:execute_response_handler, req, container)
|
274
|
+
rescue => ex
|
275
|
+
update(:error_execute_response_handler, ex, req, container)
|
276
|
+
Stella.ld ex.message, ex.backtrace
|
211
277
|
end
|
212
278
|
ret
|
213
279
|
end
|