traceview 3.8.0-java → 3.8.1-java
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +3 -3
- data/lib/joboe_metal.rb +4 -4
- data/lib/oboe_metal.rb +3 -3
- data/lib/traceview/api/layerinit.rb +2 -2
- data/lib/traceview/api/logging.rb +12 -12
- data/lib/traceview/api/profiling.rb +6 -6
- data/lib/traceview/api/tracing.rb +1 -1
- data/lib/traceview/api/util.rb +1 -1
- data/lib/traceview/base.rb +14 -7
- data/lib/traceview/config.rb +8 -5
- data/lib/traceview/frameworks/padrino/templates.rb +4 -4
- data/lib/traceview/frameworks/rails.rb +2 -2
- data/lib/traceview/frameworks/rails/inst/action_controller.rb +6 -2
- data/lib/traceview/frameworks/rails/inst/action_controller2.rb +4 -2
- data/lib/traceview/frameworks/rails/inst/action_controller3.rb +5 -4
- data/lib/traceview/frameworks/rails/inst/action_controller4.rb +4 -2
- data/lib/traceview/frameworks/rails/inst/action_controller5.rb +22 -11
- data/lib/traceview/frameworks/rails/inst/action_controller5_api.rb +23 -12
- data/lib/traceview/frameworks/sinatra/templates.rb +4 -4
- data/lib/traceview/inst/bunny-client.rb +8 -8
- data/lib/traceview/inst/bunny-consumer.rb +1 -1
- data/lib/traceview/inst/curb.rb +19 -19
- data/lib/traceview/inst/dalli.rb +4 -4
- data/lib/traceview/inst/delayed_job.rb +4 -4
- data/lib/traceview/inst/em-http-request.rb +6 -6
- data/lib/traceview/inst/excon.rb +18 -18
- data/lib/traceview/inst/faraday.rb +13 -13
- data/lib/traceview/inst/http.rb +12 -12
- data/lib/traceview/inst/httpclient.rb +19 -19
- data/lib/traceview/inst/memcache.rb +5 -5
- data/lib/traceview/inst/memcached.rb +4 -4
- data/lib/traceview/inst/mongo.rb +6 -6
- data/lib/traceview/inst/moped.rb +28 -28
- data/lib/traceview/inst/rack.rb +24 -24
- data/lib/traceview/inst/redis.rb +6 -6
- data/lib/traceview/inst/resque.rb +6 -6
- data/lib/traceview/inst/rest-client.rb +4 -4
- data/lib/traceview/inst/sequel.rb +12 -12
- data/lib/traceview/inst/sidekiq-client.rb +3 -3
- data/lib/traceview/inst/sidekiq-worker.rb +3 -3
- data/lib/traceview/inst/twitter-cassandra.rb +17 -17
- data/lib/traceview/inst/typhoeus.rb +13 -13
- data/lib/traceview/method_profiling.rb +2 -2
- data/lib/traceview/ruby.rb +1 -1
- data/lib/traceview/util.rb +4 -4
- data/lib/traceview/version.rb +1 -1
- data/test/frameworks/rails3x_test.rb +105 -0
- data/test/frameworks/rails4x_test.rb +97 -0
- data/test/frameworks/rails5x_api_test.rb +98 -1
- data/test/frameworks/rails5x_test.rb +99 -2
- data/test/profiling/legacy_method_profiling_test.rb +1 -1
- data/test/support/backcompat_test.rb +2 -2
- data/test/support/config_test.rb +1 -1
- metadata +2 -2
@@ -29,7 +29,7 @@ module TraceView
|
|
29
29
|
# args: 0: worker_class, 1: msg, 2: queue, 3: redis_pool
|
30
30
|
report_kvs = collect_kvs(args)
|
31
31
|
|
32
|
-
TraceView::API.log_entry('sidekiq-client', report_kvs)
|
32
|
+
TraceView::API.log_entry(:'sidekiq-client', report_kvs)
|
33
33
|
args[1]['SourceTrace'] = TraceView::Context.toString if TraceView.tracing?
|
34
34
|
|
35
35
|
result = yield
|
@@ -37,10 +37,10 @@ module TraceView
|
|
37
37
|
report_kvs = { :JobID => result['jid'] }
|
38
38
|
result
|
39
39
|
rescue => e
|
40
|
-
TraceView::API.log_exception('sidekiq-client', e, report_kvs)
|
40
|
+
TraceView::API.log_exception(:'sidekiq-client', e, report_kvs)
|
41
41
|
raise
|
42
42
|
ensure
|
43
|
-
TraceView::API.log_exit('sidekiq-client', report_kvs)
|
43
|
+
TraceView::API.log_exit(:'sidekiq-client', report_kvs)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -18,10 +18,10 @@ module TraceView
|
|
18
18
|
report_kvs[:JobName] = worker.class.to_s
|
19
19
|
report_kvs[:MsgID] = msg['jid']
|
20
20
|
report_kvs[:Args] = msg['args'].to_s[0..1024] if TV::Config[:sidekiqworker][:log_args]
|
21
|
-
report_kvs[
|
21
|
+
report_kvs[:Backtrace] = TV::API.backtrace if TV::Config[:sidekiqworker][:collect_backtraces]
|
22
22
|
|
23
23
|
# Webserver Spec KVs
|
24
|
-
report_kvs['HTTP-Host'] = Socket.gethostname
|
24
|
+
report_kvs[:'HTTP-Host'] = Socket.gethostname
|
25
25
|
report_kvs[:Controller] = "Sidekiq_#{queue}"
|
26
26
|
report_kvs[:Action] = msg['class']
|
27
27
|
report_kvs[:URL] = "/sidekiq/#{queue}/#{msg['class']}"
|
@@ -49,7 +49,7 @@ module TraceView
|
|
49
49
|
report_kvs['X-TV-Meta'] = args[1]['SourceTrace']
|
50
50
|
end
|
51
51
|
|
52
|
-
result = TraceView::API.start_trace('sidekiq-worker', nil, report_kvs) do
|
52
|
+
result = TraceView::API.start_trace(:'sidekiq-worker', nil, report_kvs) do
|
53
53
|
yield
|
54
54
|
end
|
55
55
|
|
@@ -48,7 +48,7 @@ module TraceView
|
|
48
48
|
|
49
49
|
report_kvs = extract_trace_details(:insert, column_family, key, hash, options)
|
50
50
|
|
51
|
-
TraceView::API.trace(
|
51
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
52
52
|
insert_without_traceview(column_family, key, hash, options = {})
|
53
53
|
end
|
54
54
|
end
|
@@ -59,7 +59,7 @@ module TraceView
|
|
59
59
|
args = [column_family, key] + columns_and_options
|
60
60
|
report_kvs = extract_trace_details(:remove, column_family, key, columns_and_options)
|
61
61
|
|
62
|
-
TraceView::API.trace(
|
62
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
63
63
|
send :remove_without_traceview, *args
|
64
64
|
end
|
65
65
|
end
|
@@ -70,7 +70,7 @@ module TraceView
|
|
70
70
|
args = [column_family, key] + columns_and_options
|
71
71
|
report_kvs = extract_trace_details(:count_columns, column_family, key, columns_and_options)
|
72
72
|
|
73
|
-
TraceView::API.trace(
|
73
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
74
74
|
send :count_columns_without_traceview, *args
|
75
75
|
end
|
76
76
|
end
|
@@ -81,7 +81,7 @@ module TraceView
|
|
81
81
|
if TraceView.tracing? && !TraceView.tracing_layer_op?(:multi_get_columns)
|
82
82
|
report_kvs = extract_trace_details(:get_columns, column_family, key, columns_and_options)
|
83
83
|
|
84
|
-
TraceView::API.trace(
|
84
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
85
85
|
send :get_columns_without_traceview, *args
|
86
86
|
end
|
87
87
|
else
|
@@ -95,7 +95,7 @@ module TraceView
|
|
95
95
|
args = [column_family, key] + columns_and_options
|
96
96
|
report_kvs = extract_trace_details(:multi_get_columns, column_family, key, columns_and_options)
|
97
97
|
|
98
|
-
TraceView::API.trace(
|
98
|
+
TraceView::API.trace(:cassandra, report_kvs, :multi_get_columns) do
|
99
99
|
send :multi_get_columns_without_traceview, *args
|
100
100
|
end
|
101
101
|
end
|
@@ -106,7 +106,7 @@ module TraceView
|
|
106
106
|
args = [column_family, key] + columns_and_options
|
107
107
|
report_kvs = extract_trace_details(:get, column_family, key, columns_and_options)
|
108
108
|
|
109
|
-
TraceView::API.trace(
|
109
|
+
TraceView::API.trace(:cassandra, report_kvs, :get) do
|
110
110
|
send :get_without_traceview, *args
|
111
111
|
end
|
112
112
|
end
|
@@ -117,7 +117,7 @@ module TraceView
|
|
117
117
|
if TraceView.tracing? && !TraceView.tracing_layer_op?(:get)
|
118
118
|
report_kvs = extract_trace_details(:multi_get, column_family, key, columns_and_options)
|
119
119
|
|
120
|
-
TraceView::API.trace(
|
120
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
121
121
|
send :multi_get_without_traceview, *args
|
122
122
|
end
|
123
123
|
else
|
@@ -131,7 +131,7 @@ module TraceView
|
|
131
131
|
args = [column_family, key] + columns_and_options
|
132
132
|
report_kvs = extract_trace_details(:exists?, column_family, key, columns_and_options)
|
133
133
|
|
134
|
-
TraceView::API.trace(
|
134
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
135
135
|
send :exists_without_traceview?, *args
|
136
136
|
end
|
137
137
|
end
|
@@ -140,7 +140,7 @@ module TraceView
|
|
140
140
|
if TraceView.tracing? && !TraceView.tracing_layer_op?(:get_range_batch)
|
141
141
|
report_kvs = extract_trace_details(:get_range_single, column_family, nil, nil)
|
142
142
|
|
143
|
-
TraceView::API.trace(
|
143
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
144
144
|
get_range_single_without_traceview(column_family, options)
|
145
145
|
end
|
146
146
|
else
|
@@ -153,7 +153,7 @@ module TraceView
|
|
153
153
|
|
154
154
|
report_kvs = extract_trace_details(:get_range_batch, column_family, nil, nil)
|
155
155
|
|
156
|
-
TraceView::API.trace(
|
156
|
+
TraceView::API.trace(:cassandra, report_kvs, :get_range_batch) do
|
157
157
|
get_range_batch_without_traceview(column_family, options)
|
158
158
|
end
|
159
159
|
end
|
@@ -164,7 +164,7 @@ module TraceView
|
|
164
164
|
args = [column_family, index_clause] + columns_and_options
|
165
165
|
report_kvs = extract_trace_details(:get_indexed_slices, column_family, nil, columns_and_options)
|
166
166
|
|
167
|
-
TraceView::API.trace(
|
167
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
168
168
|
send :get_indexed_slices_without_traceview, *args
|
169
169
|
end
|
170
170
|
end
|
@@ -183,7 +183,7 @@ module TraceView
|
|
183
183
|
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
184
184
|
end
|
185
185
|
|
186
|
-
TraceView::API.trace(
|
186
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
187
187
|
create_index_without_traceview(keyspace, column_family, column_name, validation_class)
|
188
188
|
end
|
189
189
|
end
|
@@ -199,7 +199,7 @@ module TraceView
|
|
199
199
|
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
200
200
|
end
|
201
201
|
|
202
|
-
TraceView::API.trace(
|
202
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
203
203
|
drop_index_without_traceview(keyspace, column_family, column_name)
|
204
204
|
end
|
205
205
|
end
|
@@ -214,7 +214,7 @@ module TraceView
|
|
214
214
|
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
215
215
|
end
|
216
216
|
|
217
|
-
TraceView::API.trace(
|
217
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
218
218
|
add_column_family_without_traceview(cf_def)
|
219
219
|
end
|
220
220
|
end
|
@@ -224,7 +224,7 @@ module TraceView
|
|
224
224
|
|
225
225
|
report_kvs = extract_trace_details(:drop_column_family, column_family, nil, nil)
|
226
226
|
|
227
|
-
TraceView::API.trace(
|
227
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
228
228
|
drop_column_family_without_traceview(column_family)
|
229
229
|
end
|
230
230
|
end
|
@@ -235,7 +235,7 @@ module TraceView
|
|
235
235
|
report_kvs = extract_trace_details(:add_keyspace, nil, nil, nil)
|
236
236
|
report_kvs[:Name] = ks_def.name rescue ''
|
237
237
|
|
238
|
-
TraceView::API.trace(
|
238
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
239
239
|
add_keyspace_without_traceview(ks_def)
|
240
240
|
end
|
241
241
|
end
|
@@ -246,7 +246,7 @@ module TraceView
|
|
246
246
|
report_kvs = extract_trace_details(:drop_keyspace, nil, nil, nil)
|
247
247
|
report_kvs[:Name] = keyspace.to_s rescue ''
|
248
248
|
|
249
|
-
TraceView::API.trace(
|
249
|
+
TraceView::API.trace(:cassandra, report_kvs) do
|
250
250
|
drop_keyspace_without_traceview(keyspace)
|
251
251
|
end
|
252
252
|
end
|
@@ -12,7 +12,7 @@ module TraceView
|
|
12
12
|
def run_with_traceview
|
13
13
|
return run_without_traceview unless TraceView.tracing?
|
14
14
|
|
15
|
-
TraceView::API.log_entry(
|
15
|
+
TraceView::API.log_entry(:typhoeus)
|
16
16
|
|
17
17
|
# Prepare X-Trace header handling
|
18
18
|
blacklisted = TraceView::API.blacklisted?(url)
|
@@ -23,26 +23,26 @@ module TraceView
|
|
23
23
|
response = run_without_traceview
|
24
24
|
|
25
25
|
if response.code == 0
|
26
|
-
TraceView::API.log(
|
27
|
-
|
26
|
+
TraceView::API.log(:typhoeus, :error, { :ErrorClass => response.return_code,
|
27
|
+
:ErrorMsg => response.return_message })
|
28
28
|
end
|
29
29
|
|
30
30
|
kvs = {}
|
31
|
-
kvs[
|
31
|
+
kvs[:IsService] = 1
|
32
32
|
kvs[:HTTPStatus] = response.code
|
33
|
-
kvs[
|
33
|
+
kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:typhoeus][:collect_backtraces]
|
34
34
|
|
35
35
|
uri = URI(response.effective_url)
|
36
36
|
|
37
37
|
# Conditionally log query params
|
38
38
|
if TraceView::Config[:typhoeus][:log_args]
|
39
|
-
kvs[
|
39
|
+
kvs[:RemoteURL] = uri.to_s
|
40
40
|
else
|
41
|
-
kvs[
|
41
|
+
kvs[:RemoteURL] = uri.to_s.split('?').first
|
42
42
|
end
|
43
43
|
|
44
|
-
kvs[
|
45
|
-
kvs[
|
44
|
+
kvs[:HTTPMethod] = ::TraceView::Util.upcase(options[:method])
|
45
|
+
kvs[:Blacklisted] = true if blacklisted
|
46
46
|
|
47
47
|
# Re-attach net::http edge unless it's blacklisted or if we don't have a
|
48
48
|
# valid X-Trace header
|
@@ -60,13 +60,13 @@ module TraceView
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
TraceView::API.log(
|
63
|
+
TraceView::API.log(:typhoeus, :info, kvs)
|
64
64
|
response
|
65
65
|
rescue => e
|
66
|
-
TraceView::API.log_exception(
|
66
|
+
TraceView::API.log_exception(:typhoeus, e)
|
67
67
|
raise e
|
68
68
|
ensure
|
69
|
-
TraceView::API.log_exit(
|
69
|
+
TraceView::API.log_exit(:typhoeus)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -84,7 +84,7 @@ module TraceView
|
|
84
84
|
# FIXME: Until we figure out a strategy to deal with libcurl internal
|
85
85
|
# threading and Ethon's use of easy handles, here we just do a simple
|
86
86
|
# trace of the hydra run.
|
87
|
-
TraceView::API.trace(
|
87
|
+
TraceView::API.trace(:typhoeus_hydra, kvs) do
|
88
88
|
run_without_traceview
|
89
89
|
end
|
90
90
|
end
|
@@ -5,7 +5,7 @@ module TraceView
|
|
5
5
|
report_kvs[:Backtrace] = TraceView::API.backtrace(2) if opts[:backtrace]
|
6
6
|
report_kvs[:Arguments] = args if opts[:arguments]
|
7
7
|
|
8
|
-
TraceView::API.log(nil,
|
8
|
+
TraceView::API.log(nil, :profile_entry, report_kvs)
|
9
9
|
|
10
10
|
begin
|
11
11
|
rv = self.send(method, *args, &block)
|
@@ -18,7 +18,7 @@ module TraceView
|
|
18
18
|
report_kvs.delete(:Backtrace)
|
19
19
|
report_kvs.delete(:Controller)
|
20
20
|
report_kvs.delete(:Action)
|
21
|
-
TraceView::API.log(nil,
|
21
|
+
TraceView::API.log(nil, :profile_exit, report_kvs)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/traceview/ruby.rb
CHANGED
data/lib/traceview/util.rb
CHANGED
@@ -42,8 +42,8 @@ module TraceView
|
|
42
42
|
cls.private_method_defined?(without_traceview.to_sym)
|
43
43
|
|
44
44
|
cls.class_eval do
|
45
|
-
alias_method without_traceview,
|
46
|
-
alias_method
|
45
|
+
alias_method without_traceview, method.to_s
|
46
|
+
alias_method method.to_s, with_traceview
|
47
47
|
end
|
48
48
|
end
|
49
49
|
else
|
@@ -71,8 +71,8 @@ module TraceView
|
|
71
71
|
|
72
72
|
# Only alias if we haven't done so already
|
73
73
|
unless cls.singleton_methods.include? without_traceview.to_sym
|
74
|
-
cls.singleton_class.send(:alias_method, without_traceview,
|
75
|
-
cls.singleton_class.send(:alias_method,
|
74
|
+
cls.singleton_class.send(:alias_method, without_traceview, method.to_s)
|
75
|
+
cls.singleton_class.send(:alias_method, method.to_s, with_traceview)
|
76
76
|
end
|
77
77
|
else TraceView.logger.warn "[traceview/loading] Couldn't properly instrument #{name}. Partial traces may occur."
|
78
78
|
end
|
data/lib/traceview/version.rb
CHANGED
@@ -8,9 +8,14 @@ if defined?(::Rails)
|
|
8
8
|
describe "Rails3x" do
|
9
9
|
before do
|
10
10
|
clear_all_traces
|
11
|
+
@collect_backtraces = TraceView::Config[:action_controller][:collect_backtraces]
|
11
12
|
ENV['DBTYPE'] = "postgresql" unless ENV['DBTYPE']
|
12
13
|
end
|
13
14
|
|
15
|
+
after do
|
16
|
+
TraceView::Config[:action_controller][:collect_backtraces] = @collect_backtraces
|
17
|
+
end
|
18
|
+
|
14
19
|
it "should trace a request to a rails stack" do
|
15
20
|
|
16
21
|
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
@@ -294,5 +299,105 @@ if defined?(::Rails)
|
|
294
299
|
r.header.key?('X-Trace').must_equal true
|
295
300
|
r.header['X-Trace'].must_equal traces[13]['X-Trace']
|
296
301
|
end
|
302
|
+
|
303
|
+
it "should collect backtraces when true" do
|
304
|
+
|
305
|
+
TraceView::Config[:action_controller][:collect_backtraces] = true
|
306
|
+
|
307
|
+
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
308
|
+
r = Net::HTTP.get_response(uri)
|
309
|
+
|
310
|
+
traces = get_all_traces
|
311
|
+
|
312
|
+
traces.count.must_equal 8
|
313
|
+
unless defined?(JRUBY_VERSION)
|
314
|
+
# We don't test this under JRuby because the Java instrumentation
|
315
|
+
# for the DB drivers doesn't use our test reporter hence we won't
|
316
|
+
# see all trace events. :-( To be improved.
|
317
|
+
valid_edges?(traces).must_equal true
|
318
|
+
end
|
319
|
+
validate_outer_layers(traces, 'rack')
|
320
|
+
|
321
|
+
traces[0]['Layer'].must_equal "rack"
|
322
|
+
traces[0]['Label'].must_equal "entry"
|
323
|
+
traces[0]['URL'].must_equal "/hello/world"
|
324
|
+
|
325
|
+
traces[1]['Layer'].must_equal "rack"
|
326
|
+
traces[1]['Label'].must_equal "info"
|
327
|
+
|
328
|
+
traces[2]['Layer'].must_equal "rails"
|
329
|
+
traces[2]['Label'].must_equal "entry"
|
330
|
+
|
331
|
+
traces[3]['Label'].must_equal "info"
|
332
|
+
traces[3]['Controller'].must_equal "HelloController"
|
333
|
+
traces[3]['Action'].must_equal "world"
|
334
|
+
traces[3].key?('Backtrace').must_equal true
|
335
|
+
|
336
|
+
traces[4]['Layer'].must_equal "actionview"
|
337
|
+
traces[4]['Label'].must_equal "entry"
|
338
|
+
|
339
|
+
traces[5]['Layer'].must_equal "actionview"
|
340
|
+
traces[5]['Label'].must_equal "exit"
|
341
|
+
|
342
|
+
traces[6]['Layer'].must_equal "rails"
|
343
|
+
traces[6]['Label'].must_equal "exit"
|
344
|
+
|
345
|
+
traces[7]['Layer'].must_equal "rack"
|
346
|
+
traces[7]['Label'].must_equal "exit"
|
347
|
+
|
348
|
+
# Validate the existence of the response header
|
349
|
+
r.header.key?('X-Trace').must_equal true
|
350
|
+
r.header['X-Trace'].must_equal traces[7]['X-Trace']
|
351
|
+
end
|
352
|
+
|
353
|
+
it "should NOT collect backtraces when false" do
|
354
|
+
|
355
|
+
TraceView::Config[:action_controller][:collect_backtraces] = false
|
356
|
+
|
357
|
+
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
358
|
+
r = Net::HTTP.get_response(uri)
|
359
|
+
|
360
|
+
traces = get_all_traces
|
361
|
+
|
362
|
+
traces.count.must_equal 8
|
363
|
+
unless defined?(JRUBY_VERSION)
|
364
|
+
# We don't test this under JRuby because the Java instrumentation
|
365
|
+
# for the DB drivers doesn't use our test reporter hence we won't
|
366
|
+
# see all trace events. :-( To be improved.
|
367
|
+
valid_edges?(traces).must_equal true
|
368
|
+
end
|
369
|
+
validate_outer_layers(traces, 'rack')
|
370
|
+
|
371
|
+
traces[0]['Layer'].must_equal "rack"
|
372
|
+
traces[0]['Label'].must_equal "entry"
|
373
|
+
traces[0]['URL'].must_equal "/hello/world"
|
374
|
+
|
375
|
+
traces[1]['Layer'].must_equal "rack"
|
376
|
+
traces[1]['Label'].must_equal "info"
|
377
|
+
|
378
|
+
traces[2]['Layer'].must_equal "rails"
|
379
|
+
traces[2]['Label'].must_equal "entry"
|
380
|
+
|
381
|
+
traces[3]['Label'].must_equal "info"
|
382
|
+
traces[3]['Controller'].must_equal "HelloController"
|
383
|
+
traces[3]['Action'].must_equal "world"
|
384
|
+
traces[3].key?('Backtrace').must_equal false
|
385
|
+
|
386
|
+
traces[4]['Layer'].must_equal "actionview"
|
387
|
+
traces[4]['Label'].must_equal "entry"
|
388
|
+
|
389
|
+
traces[5]['Layer'].must_equal "actionview"
|
390
|
+
traces[5]['Label'].must_equal "exit"
|
391
|
+
|
392
|
+
traces[6]['Layer'].must_equal "rails"
|
393
|
+
traces[6]['Label'].must_equal "exit"
|
394
|
+
|
395
|
+
traces[7]['Layer'].must_equal "rack"
|
396
|
+
traces[7]['Label'].must_equal "exit"
|
397
|
+
|
398
|
+
# Validate the existence of the response header
|
399
|
+
r.header.key?('X-Trace').must_equal true
|
400
|
+
r.header['X-Trace'].must_equal traces[7]['X-Trace']
|
401
|
+
end
|
297
402
|
end
|
298
403
|
end
|
@@ -8,9 +8,14 @@ if defined?(::Rails)
|
|
8
8
|
describe "Rails4x" do
|
9
9
|
before do
|
10
10
|
clear_all_traces
|
11
|
+
@collect_backtraces = TraceView::Config[:action_controller][:collect_backtraces]
|
11
12
|
ENV['DBTYPE'] = "postgresql" unless ENV['DBTYPE']
|
12
13
|
end
|
13
14
|
|
15
|
+
after do
|
16
|
+
TraceView::Config[:action_controller][:collect_backtraces] = @collect_backtraces
|
17
|
+
end
|
18
|
+
|
14
19
|
it "should trace a request to a rails stack" do
|
15
20
|
|
16
21
|
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
@@ -286,5 +291,97 @@ if defined?(::Rails)
|
|
286
291
|
# Validate the existence of the response header
|
287
292
|
r['X-Trace'].must_equal traces[4]['X-Trace']
|
288
293
|
end
|
294
|
+
|
295
|
+
it "should collect backtraces when true" do
|
296
|
+
TraceView::Config[:action_controller][:collect_backtraces] = true
|
297
|
+
|
298
|
+
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
299
|
+
r = Net::HTTP.get_response(uri)
|
300
|
+
|
301
|
+
traces = get_all_traces
|
302
|
+
|
303
|
+
traces.count.must_equal 7
|
304
|
+
unless defined?(JRUBY_VERSION)
|
305
|
+
# We don't test this under JRuby because the Java instrumentation
|
306
|
+
# for the DB drivers doesn't use our test reporter hence we won't
|
307
|
+
# see all trace events. :-( To be improved.
|
308
|
+
valid_edges?(traces).must_equal true
|
309
|
+
end
|
310
|
+
validate_outer_layers(traces, 'rack')
|
311
|
+
|
312
|
+
traces[0]['Layer'].must_equal "rack"
|
313
|
+
traces[0]['Label'].must_equal "entry"
|
314
|
+
traces[0]['URL'].must_equal "/hello/world"
|
315
|
+
|
316
|
+
traces[1]['Layer'].must_equal "rack"
|
317
|
+
traces[1]['Label'].must_equal "info"
|
318
|
+
|
319
|
+
traces[2]['Layer'].must_equal "rails"
|
320
|
+
traces[2]['Label'].must_equal "entry"
|
321
|
+
traces[2]['Controller'].must_equal "HelloController"
|
322
|
+
traces[2]['Action'].must_equal "world"
|
323
|
+
traces[2].key?('Backtrace').must_equal true
|
324
|
+
|
325
|
+
traces[3]['Layer'].must_equal "actionview"
|
326
|
+
traces[3]['Label'].must_equal "entry"
|
327
|
+
|
328
|
+
traces[4]['Layer'].must_equal "actionview"
|
329
|
+
traces[4]['Label'].must_equal "exit"
|
330
|
+
|
331
|
+
traces[5]['Layer'].must_equal "rails"
|
332
|
+
traces[5]['Label'].must_equal "exit"
|
333
|
+
|
334
|
+
traces[6]['Layer'].must_equal "rack"
|
335
|
+
traces[6]['Label'].must_equal "exit"
|
336
|
+
|
337
|
+
# Validate the existence of the response header
|
338
|
+
r['X-Trace'].must_equal traces[6]['X-Trace']
|
339
|
+
end
|
340
|
+
|
341
|
+
it "should NOT collect backtraces when false" do
|
342
|
+
TraceView::Config[:action_controller][:collect_backtraces] = false
|
343
|
+
|
344
|
+
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
345
|
+
r = Net::HTTP.get_response(uri)
|
346
|
+
|
347
|
+
traces = get_all_traces
|
348
|
+
|
349
|
+
traces.count.must_equal 7
|
350
|
+
unless defined?(JRUBY_VERSION)
|
351
|
+
# We don't test this under JRuby because the Java instrumentation
|
352
|
+
# for the DB drivers doesn't use our test reporter hence we won't
|
353
|
+
# see all trace events. :-( To be improved.
|
354
|
+
valid_edges?(traces).must_equal true
|
355
|
+
end
|
356
|
+
validate_outer_layers(traces, 'rack')
|
357
|
+
|
358
|
+
traces[0]['Layer'].must_equal "rack"
|
359
|
+
traces[0]['Label'].must_equal "entry"
|
360
|
+
traces[0]['URL'].must_equal "/hello/world"
|
361
|
+
|
362
|
+
traces[1]['Layer'].must_equal "rack"
|
363
|
+
traces[1]['Label'].must_equal "info"
|
364
|
+
|
365
|
+
traces[2]['Layer'].must_equal "rails"
|
366
|
+
traces[2]['Label'].must_equal "entry"
|
367
|
+
traces[2]['Controller'].must_equal "HelloController"
|
368
|
+
traces[2]['Action'].must_equal "world"
|
369
|
+
traces[2].key?('Backtrace').must_equal false
|
370
|
+
|
371
|
+
traces[3]['Layer'].must_equal "actionview"
|
372
|
+
traces[3]['Label'].must_equal "entry"
|
373
|
+
|
374
|
+
traces[4]['Layer'].must_equal "actionview"
|
375
|
+
traces[4]['Label'].must_equal "exit"
|
376
|
+
|
377
|
+
traces[5]['Layer'].must_equal "rails"
|
378
|
+
traces[5]['Label'].must_equal "exit"
|
379
|
+
|
380
|
+
traces[6]['Layer'].must_equal "rack"
|
381
|
+
traces[6]['Label'].must_equal "exit"
|
382
|
+
|
383
|
+
# Validate the existence of the response header
|
384
|
+
r['X-Trace'].must_equal traces[6]['X-Trace']
|
385
|
+
end
|
289
386
|
end
|
290
387
|
end
|