traceview 3.8.1-java → 3.8.2-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/.codeclimate.yml +43 -0
- data/.travis.yml +5 -4
- data/CHANGELOG.md +114 -114
- data/Gemfile +5 -6
- data/README.md +3 -3
- data/Rakefile +18 -21
- data/examples/DNT.md +3 -3
- data/examples/carrying_context.rb +26 -31
- data/examples/instrumenting_metal_controller.rb +1 -1
- data/examples/puma_on_heroku_config.rb +3 -3
- data/examples/tracing_async_threads.rb +9 -9
- data/examples/tracing_background_jobs.rb +5 -7
- data/examples/tracing_forked_processes.rb +13 -14
- data/examples/unicorn_on_heroku_config.rb +4 -4
- data/gemfiles/rails50.gemfile +1 -1
- data/lib/joboe_metal.rb +2 -5
- data/lib/oboe/backward_compatibility.rb +3 -5
- data/lib/oboe_metal.rb +37 -43
- data/lib/traceview/api/logging.rb +1 -2
- data/lib/traceview/base.rb +3 -0
- data/lib/traceview/config.rb +19 -3
- data/lib/traceview/frameworks/rails/inst/action_controller.rb +2 -2
- data/lib/traceview/frameworks/rails/inst/{action_controller5_api.rb → action_controller_api.rb} +0 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +2 -2
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils5x.rb +3 -4
- data/lib/traceview/inst/httpclient.rb +12 -12
- data/lib/traceview/inst/mongo2.rb +7 -8
- data/lib/traceview/inst/moped.rb +334 -343
- data/lib/traceview/inst/rack.rb +14 -2
- data/lib/traceview/inst/redis.rb +104 -110
- data/lib/traceview/inst/sequel.rb +43 -37
- data/lib/traceview/inst/twitter-cassandra.rb +12 -6
- data/lib/traceview/support.rb +34 -32
- data/lib/traceview/util.rb +7 -4
- data/lib/traceview/version.rb +1 -1
- data/test/instrumentation/curb_test.rb +2 -24
- data/test/instrumentation/httpclient_test.rb +7 -18
- data/test/instrumentation/{cassandra_test.rb → twitter-cassandra_test.rb} +32 -0
- data/test/minitest_helper.rb +0 -3
- data/test/settings +0 -0
- data/test/support/avw_handling_test.rb +13 -23
- data/test/support/config_test.rb +1 -1
- data/test/support/tracing_mode_test.rb +44 -0
- metadata +21 -17
@@ -6,16 +6,14 @@
|
|
6
6
|
require 'math'
|
7
7
|
require 'oboe'
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
TraceView::Config[:tracing_mode] = :always
|
10
|
+
TraceView::Config[:verbose] = true
|
11
11
|
|
12
12
|
# The parent process/loop which collects data
|
13
|
-
|
14
|
-
|
13
|
+
Kernel.loop do
|
15
14
|
# For each loop, we instrument the work retrieval. These traces
|
16
15
|
# will show up as layer 'get_the_work'.
|
17
|
-
|
18
|
-
|
16
|
+
TraceView::API.start_trace('get_the_work') do
|
19
17
|
work = get_the_work
|
20
18
|
|
21
19
|
# Loop through work and pass to `do_the_work` method
|
@@ -23,11 +21,11 @@ while true do
|
|
23
21
|
work.each do |job|
|
24
22
|
fork do
|
25
23
|
# Since the context is copied from the parent process, we clear it
|
26
|
-
# and start a new trace via `
|
27
|
-
|
24
|
+
# and start a new trace via `TraceView::API.start_trace`.
|
25
|
+
TraceView::Context.clear
|
28
26
|
result = nil
|
29
27
|
|
30
|
-
|
28
|
+
TraceView::API.start_trace('do_the_work', nil, :job_id => job.id) do
|
31
29
|
result = do_the_work(job)
|
32
30
|
end
|
33
31
|
|
@@ -75,11 +73,11 @@ end
|
|
75
73
|
#
|
76
74
|
# To do this:
|
77
75
|
# 1. Don't clear the context in the child process
|
78
|
-
# 2. Use `
|
76
|
+
# 2. Use `TraceView::API.trace` instead
|
79
77
|
# 3. Pass the `Async` flag to mark this child as asynchronous
|
80
78
|
#
|
81
|
-
|
82
|
-
|
79
|
+
Kernel.loop do
|
80
|
+
TraceView::API.start_trace('get_the_work') do
|
83
81
|
|
84
82
|
work = get_the_work
|
85
83
|
|
@@ -87,9 +85,9 @@ while true do
|
|
87
85
|
fork do
|
88
86
|
result = nil
|
89
87
|
# 1 Don't clear context
|
90
|
-
# 2 Use `
|
88
|
+
# 2 Use `TraceView::API.trace` instead
|
91
89
|
# 3 Pass the Async flag
|
92
|
-
|
90
|
+
TraceView::API.trace('do_the_work', { :job_id => job.id, :Async => 1 }) do
|
93
91
|
result = do_the_work(job)
|
94
92
|
end
|
95
93
|
|
@@ -97,4 +95,5 @@ while true do
|
|
97
95
|
end
|
98
96
|
end
|
99
97
|
end
|
98
|
+
sleep 5
|
100
99
|
end
|
@@ -11,8 +11,8 @@ before_fork do |server, worker|
|
|
11
11
|
defined?(ActiveRecord::Base) and
|
12
12
|
ActiveRecord::Base.connection.disconnect!
|
13
13
|
|
14
|
-
defined?(::
|
15
|
-
::
|
14
|
+
defined?(::TraceView) and
|
15
|
+
::TraceView.disconnect!
|
16
16
|
end
|
17
17
|
|
18
18
|
after_fork do |server, worker|
|
@@ -23,6 +23,6 @@ after_fork do |server, worker|
|
|
23
23
|
defined?(ActiveRecord::Base) and
|
24
24
|
ActiveRecord::Base.establish_connection
|
25
25
|
|
26
|
-
defined?(::
|
27
|
-
::
|
26
|
+
defined?(::TraceView) and
|
27
|
+
::TraceView.reconnect!
|
28
28
|
end
|
data/gemfiles/rails50.gemfile
CHANGED
data/lib/joboe_metal.rb
CHANGED
@@ -146,10 +146,7 @@ module TraceView
|
|
146
146
|
def sample?(opts = {})
|
147
147
|
begin
|
148
148
|
# Return false if no-op mode
|
149
|
-
return false
|
150
|
-
|
151
|
-
# Return false if never or through mode without AVW flag
|
152
|
-
return false if TraceView.never? || (TraceView.through? && !opts.key?('X-TV-Meta'))
|
149
|
+
return false unless TraceView.loaded
|
153
150
|
|
154
151
|
return true if ENV.key?('TRACEVIEW_GEM_TEST') && !opts.key?('X-TV-Meta')
|
155
152
|
|
@@ -163,7 +160,7 @@ module TraceView
|
|
163
160
|
opts[:xtrace] ||= nil
|
164
161
|
opts['X-TV-Meta'] ||= nil
|
165
162
|
|
166
|
-
sr_cfg = Java::ComTracelyticsJoboe::LayerUtil.shouldTraceRequest(
|
163
|
+
sr_cfg = Java::ComTracelyticsJoboe::LayerUtil.shouldTraceRequest(opts[:layer], { 'X-Trace' => opts[:xtrace], 'X-TV-Meta' => opts['X-TV-Meta'] })
|
167
164
|
|
168
165
|
# Store the returned SampleRateConfig into TraceView::Config
|
169
166
|
if sr_cfg
|
@@ -18,7 +18,7 @@ module Oboe
|
|
18
18
|
# Notify of deprecation only once
|
19
19
|
unless @deprecated_notified
|
20
20
|
TraceView.logger.warn "[traceview/warn] Note that Oboe::API has been renamed to TraceView::API. (#{sym}:#{args})"
|
21
|
-
TraceView.logger.warn
|
21
|
+
TraceView.logger.warn '[traceview/warn] Oboe::API will be deprecated in a future version.'
|
22
22
|
TraceView.logger.warn "[traceview/warn] Caller: #{Kernel.caller[0]}"
|
23
23
|
@deprecated_notified = true
|
24
24
|
end
|
@@ -38,7 +38,7 @@ module Oboe
|
|
38
38
|
# Notify of deprecation only once
|
39
39
|
unless @deprecated_notified
|
40
40
|
TraceView.logger.warn "[traceview/warn] Note that Oboe::Config has been renamed to TraceView::Config. (#{sym}:#{args})"
|
41
|
-
TraceView.logger.warn
|
41
|
+
TraceView.logger.warn '[traceview/warn] Oboe::Config will be deprecated in a future version.'
|
42
42
|
TraceView.logger.warn "[traceview/warn] Caller: #{Kernel.caller[0]}"
|
43
43
|
@deprecated_notified = true
|
44
44
|
end
|
@@ -57,7 +57,7 @@ module Oboe
|
|
57
57
|
# Notify of deprecation only once
|
58
58
|
unless @deprecated_notified
|
59
59
|
TraceView.logger.warn "[traceview/warn] Note that Oboe::Ruby has been renamed to TraceView::Ruby. (#{sym}:#{args})"
|
60
|
-
TraceView.logger.warn
|
60
|
+
TraceView.logger.warn '[traceview/warn] Oboe::Ruby will be deprecated in a future version.'
|
61
61
|
TraceView.logger.warn "[traceview/warn] Caller: #{Kernel.caller[0]}"
|
62
62
|
@deprecated_notified = true
|
63
63
|
end
|
@@ -66,7 +66,6 @@ module Oboe
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
|
70
69
|
#
|
71
70
|
# Support for OboeMethodProfiling
|
72
71
|
#
|
@@ -79,4 +78,3 @@ module OboeMethodProfiling
|
|
79
78
|
include TraceViewMethodProfiling::ClassMethods
|
80
79
|
end
|
81
80
|
end
|
82
|
-
|
data/lib/oboe_metal.rb
CHANGED
@@ -12,7 +12,6 @@ module TraceView
|
|
12
12
|
|
13
13
|
class Reporter
|
14
14
|
class << self
|
15
|
-
|
16
15
|
##
|
17
16
|
# start
|
18
17
|
#
|
@@ -25,7 +24,7 @@ module TraceView
|
|
25
24
|
Oboe_metal::Context.init
|
26
25
|
|
27
26
|
if ENV.key?('TRACEVIEW_GEM_TEST')
|
28
|
-
TraceView.reporter = TraceView::FileReporter.new(
|
27
|
+
TraceView.reporter = TraceView::FileReporter.new(TRACE_FILE)
|
29
28
|
else
|
30
29
|
TraceView.reporter = TraceView::UdpReporter.new(TraceView::Config[:reporter_host], TraceView::Config[:reporter_port])
|
31
30
|
end
|
@@ -58,7 +57,7 @@ module TraceView
|
|
58
57
|
# Truncates the trace output file to zero
|
59
58
|
#
|
60
59
|
def clear_all_traces
|
61
|
-
File.truncate(
|
60
|
+
File.truncate(TRACE_FILE, 0)
|
62
61
|
end
|
63
62
|
|
64
63
|
##
|
@@ -67,7 +66,7 @@ module TraceView
|
|
67
66
|
# Retrieves all traces written to the trace file
|
68
67
|
#
|
69
68
|
def get_all_traces
|
70
|
-
io = File.open(
|
69
|
+
io = File.open(TRACE_FILE, 'r')
|
71
70
|
contents = io.readlines(nil)
|
72
71
|
|
73
72
|
return contents if contents.empty?
|
@@ -84,11 +83,11 @@ module TraceView
|
|
84
83
|
s = StringIO.new(contents[0])
|
85
84
|
|
86
85
|
until s.eof?
|
87
|
-
if ::BSON.respond_to? :read_bson_document
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
traces << if ::BSON.respond_to? :read_bson_document
|
87
|
+
BSON.read_bson_document(s)
|
88
|
+
else
|
89
|
+
BSON::Document.from_bson(s)
|
90
|
+
end
|
92
91
|
end
|
93
92
|
else
|
94
93
|
bbb = BSON::ByteBuffer.new(contents[0])
|
@@ -110,43 +109,38 @@ module TraceView
|
|
110
109
|
|
111
110
|
class << self
|
112
111
|
def sample?(opts = {})
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
# When in test, always trace and don't clear
|
130
|
-
# the stored sample rate/source
|
131
|
-
TraceView.sample_rate ||= -1
|
132
|
-
TraceView.sample_source ||= -1
|
133
|
-
true
|
134
|
-
else
|
135
|
-
TraceView.sample_rate = -1
|
136
|
-
TraceView.sample_source = -1
|
137
|
-
false
|
138
|
-
end
|
139
|
-
else
|
140
|
-
# liboboe version > 1.3.1 returning a bit masked integer with SampleRate and
|
141
|
-
# source embedded
|
142
|
-
TraceView.sample_rate = (rv & SAMPLE_RATE_MASK)
|
143
|
-
TraceView.sample_source = (rv & SAMPLE_SOURCE_MASK) >> 24
|
112
|
+
# Return false if no-op mode
|
113
|
+
return false unless TraceView.loaded
|
114
|
+
|
115
|
+
# Assure defaults since SWIG enforces Strings
|
116
|
+
layer = opts[:layer] ? opts[:layer].to_s.strip.freeze : TV_STR_BLANK
|
117
|
+
xtrace = opts[:xtrace] ? opts[:xtrace].to_s.strip : TV_STR_BLANK
|
118
|
+
tv_meta = opts['X-TV-Meta'] ? opts['X-TV-Meta'].to_s.strip : TV_STR_BLANK
|
119
|
+
|
120
|
+
rv = TraceView::Context.sampleRequest(layer, xtrace, tv_meta)
|
121
|
+
|
122
|
+
if rv == 0
|
123
|
+
if ENV.key?('TRACEVIEW_GEM_TEST')
|
124
|
+
# When in test, always trace and don't clear
|
125
|
+
# the stored sample rate/source
|
126
|
+
TraceView.sample_rate ||= -1
|
127
|
+
TraceView.sample_source ||= -1
|
144
128
|
true
|
129
|
+
else
|
130
|
+
TraceView.sample_rate = -1
|
131
|
+
TraceView.sample_source = -1
|
132
|
+
false
|
145
133
|
end
|
146
|
-
|
147
|
-
|
148
|
-
|
134
|
+
else
|
135
|
+
# liboboe version > 1.3.1 returning a bit masked integer with SampleRate and
|
136
|
+
# source embedded
|
137
|
+
TraceView.sample_rate = (rv & SAMPLE_RATE_MASK)
|
138
|
+
TraceView.sample_source = (rv & SAMPLE_SOURCE_MASK) >> 24
|
139
|
+
true
|
149
140
|
end
|
141
|
+
rescue StandardError => e
|
142
|
+
TraceView.logger.debug "[oboe/error] sample? error: #{e.inspect}"
|
143
|
+
false
|
150
144
|
end
|
151
145
|
|
152
146
|
def set_tracing_mode(mode)
|
@@ -86,8 +86,7 @@ module TraceView
|
|
86
86
|
# TraceView::API.log_start(:layer_name, nil, { :id => @user.id })
|
87
87
|
#
|
88
88
|
def log_start(layer, xtrace = nil, opts = {})
|
89
|
-
return if !TraceView.loaded || TraceView.
|
90
|
-
(opts.key?(:URL) && ::TraceView::Util.static_asset?(opts[:URL]))
|
89
|
+
return if !TraceView.loaded || (opts.key?(:URL) && ::TraceView::Util.static_asset?(opts[:URL]))
|
91
90
|
|
92
91
|
# For entry only layers (DelayedJob workers, Sidekiq workers), auto-set the tracing mode
|
93
92
|
# Don't do this if tracing mode is already :always or :never
|
data/lib/traceview/base.rb
CHANGED
@@ -26,6 +26,9 @@ TV_STR_BLANK = ''.freeze
|
|
26
26
|
TV_STR_LAYER = 'Layer'.freeze
|
27
27
|
TV_STR_LABEL = 'Label'.freeze
|
28
28
|
|
29
|
+
# Used in tests to store local trace data
|
30
|
+
TRACE_FILE = '/tmp/traceview_traces.bson'.freeze
|
31
|
+
|
29
32
|
##
|
30
33
|
# This module is the base module for the various implementations of TraceView reporting.
|
31
34
|
# Current variations as of 2014-09-10 are a c-extension, JRuby (using TraceView Java
|
data/lib/traceview/config.rb
CHANGED
@@ -30,6 +30,13 @@ module TraceView
|
|
30
30
|
@@config
|
31
31
|
end
|
32
32
|
|
33
|
+
##
|
34
|
+
# initialize
|
35
|
+
#
|
36
|
+
# Initializer method to set everything up with a
|
37
|
+
# default configuration.
|
38
|
+
#
|
39
|
+
# rubocop:disable Metrics/AbcSize
|
33
40
|
def self.initialize(_data = {})
|
34
41
|
# Setup default instrumentation values
|
35
42
|
@@instrumentation.each do |k|
|
@@ -144,7 +151,7 @@ module TraceView
|
|
144
151
|
# Requests with positive matches (non nil) will not be traced.
|
145
152
|
# See lib/traceview/util.rb: TraceView::Util.static_asset?
|
146
153
|
#
|
147
|
-
@@config[:dnt_regexp] =
|
154
|
+
@@config[:dnt_regexp] = '\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg|less)$'
|
148
155
|
@@config[:dnt_opts] = Regexp::IGNORECASE
|
149
156
|
|
150
157
|
# In Rails, raised exceptions with rescue handlers via
|
@@ -202,6 +209,7 @@ module TraceView
|
|
202
209
|
|
203
210
|
@@config[:verbose] = ENV.key?('TRACEVIEW_GEM_VERBOSE') ? true : false
|
204
211
|
end
|
212
|
+
# rubocop:enable Metrics/AbcSize
|
205
213
|
|
206
214
|
def self.update!(data)
|
207
215
|
data.each do |key, value|
|
@@ -210,18 +218,25 @@ module TraceView
|
|
210
218
|
end
|
211
219
|
|
212
220
|
def self.merge!(data)
|
213
|
-
|
221
|
+
update!(data)
|
214
222
|
end
|
215
223
|
|
216
224
|
def self.[](key)
|
217
225
|
if key == :resque
|
218
|
-
TraceView.logger.warn
|
226
|
+
TraceView.logger.warn '[traceview/warn] :resque config is deprecated. It is now split into :resqueclient and :resqueworker.'
|
219
227
|
TraceView.logger.warn "[traceview/warn] Called from #{Kernel.caller[0]}"
|
220
228
|
end
|
221
229
|
|
222
230
|
@@config[key.to_sym]
|
223
231
|
end
|
224
232
|
|
233
|
+
##
|
234
|
+
# []=
|
235
|
+
#
|
236
|
+
# Config variable assignment method. Here we validate and store the
|
237
|
+
# assigned value(s) and trigger any secondary action needed.
|
238
|
+
#
|
239
|
+
# rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
225
240
|
def self.[]=(key, value)
|
226
241
|
@@config[key.to_sym] = value
|
227
242
|
|
@@ -271,6 +286,7 @@ module TraceView
|
|
271
286
|
@@config[key.to_sym] = value.to_sym
|
272
287
|
end
|
273
288
|
end
|
289
|
+
# rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
274
290
|
|
275
291
|
def self.method_missing(sym, *args)
|
276
292
|
class_var_name = "@@#{sym}"
|
@@ -83,10 +83,10 @@ if defined?(ActionController::Base) && TraceView::Config[:action_controller][:en
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
# ActionController::API
|
86
|
+
# ActionController::API - Rails 5+ or via the rails-api gem
|
87
87
|
if defined?(ActionController::API) && TraceView::Config[:action_controller_api][:enabled]
|
88
88
|
TraceView.logger.info '[traceview/loading] Instrumenting actioncontroller api' if TraceView::Config[:verbose]
|
89
|
-
require "traceview/frameworks/rails/inst/
|
89
|
+
require "traceview/frameworks/rails/inst/action_controller_api"
|
90
90
|
::ActionController::API.send(:prepend, ::TraceView::Inst::ActionControllerAPI)
|
91
91
|
end
|
92
92
|
|
data/lib/traceview/frameworks/rails/inst/{action_controller5_api.rb → action_controller_api.rb}
RENAMED
File without changes
|
@@ -50,7 +50,7 @@ module TraceView
|
|
50
50
|
def ignore_payload?(name)
|
51
51
|
%w(SCHEMA EXPLAIN CACHE).include?(name.to_s) ||
|
52
52
|
(name && name.to_sym == :skip_logging) ||
|
53
|
-
|
53
|
+
name == 'ActiveRecord::SchemaMigration Load'
|
54
54
|
end
|
55
55
|
|
56
56
|
# def cfg
|
@@ -107,7 +107,7 @@ module TraceView
|
|
107
107
|
|
108
108
|
def begin_db_transaction_with_traceview
|
109
109
|
if TraceView.tracing?
|
110
|
-
TraceView::API.trace('activerecord',
|
110
|
+
TraceView::API.trace('activerecord', :Query => 'BEGIN') do
|
111
111
|
begin_db_transaction_without_traceview
|
112
112
|
end
|
113
113
|
else
|
@@ -17,7 +17,7 @@ module TraceView
|
|
17
17
|
# Report raw SQL and any binds if they exist
|
18
18
|
opts[:Query] = sql.to_s
|
19
19
|
if binds && !binds.empty?
|
20
|
-
opts[:QueryArgs] = binds.map
|
20
|
+
opts[:QueryArgs] = binds.map(&:value)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -47,7 +47,7 @@ module TraceView
|
|
47
47
|
TraceView.logger.debug e.backtrace.join('\n')
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
opts || {}
|
51
51
|
end
|
52
52
|
|
53
53
|
# We don't want to trace framework caches. Only instrument SQL that
|
@@ -55,11 +55,10 @@ module TraceView
|
|
55
55
|
def ignore_payload?(name)
|
56
56
|
%w(SCHEMA EXPLAIN CACHE).include?(name.to_s) ||
|
57
57
|
(name && name.to_sym == :skip_logging) ||
|
58
|
-
|
58
|
+
name == 'ActiveRecord::SchemaMigration Load'
|
59
59
|
end
|
60
60
|
|
61
61
|
def exec_query_with_traceview(sql, name = nil, binds = [], prepare: false)
|
62
|
-
|
63
62
|
if TraceView.tracing? && !ignore_payload?(name)
|
64
63
|
|
65
64
|
opts = extract_trace_details(sql, name, binds)
|
@@ -39,7 +39,7 @@ module TraceView
|
|
39
39
|
|
40
40
|
def do_request_with_traceview(method, uri, query, body, header, &block)
|
41
41
|
# If we're not tracing, just do a fast return.
|
42
|
-
|
42
|
+
unless TraceView.tracing?
|
43
43
|
return do_request_without_traceview(method, uri, query, body, header, &block)
|
44
44
|
end
|
45
45
|
|
@@ -55,11 +55,11 @@ module TraceView
|
|
55
55
|
TraceView::API.log_entry(:httpclient, kvs)
|
56
56
|
kvs.clear
|
57
57
|
|
58
|
-
req_context = TraceView::Context.toString
|
58
|
+
req_context = TraceView::Context.toString
|
59
59
|
|
60
60
|
# Be aware of various ways to call/use httpclient
|
61
61
|
if header.is_a?(Array)
|
62
|
-
header.push [
|
62
|
+
header.push ['X-Trace', req_context]
|
63
63
|
elsif header.is_a?(Hash)
|
64
64
|
header['X-Trace'] = req_context unless blacklisted
|
65
65
|
end
|
@@ -71,8 +71,8 @@ module TraceView
|
|
71
71
|
kvs[:HTTPStatus] = response.status_code
|
72
72
|
|
73
73
|
# If we get a redirect, report the location header
|
74
|
-
if ((300..308).to_a.include? response.status.to_i) && response.headers.key?(
|
75
|
-
kvs[:Location] = response.headers[
|
74
|
+
if ((300..308).to_a.include? response.status.to_i) && response.headers.key?('Location')
|
75
|
+
kvs[:Location] = response.headers['Location']
|
76
76
|
end
|
77
77
|
|
78
78
|
if response_context && !blacklisted
|
@@ -95,7 +95,7 @@ module TraceView
|
|
95
95
|
# we stowaway the context in the request headers to be picked up
|
96
96
|
# (and removed from req headers) in do_get_stream.
|
97
97
|
if header.is_a?(Array)
|
98
|
-
header.push [
|
98
|
+
header.push ['traceview.context', TraceView::Context.toString]
|
99
99
|
elsif header.is_a?(Hash)
|
100
100
|
header['traceview.context'] = TraceView::Context.toString
|
101
101
|
end
|
@@ -105,13 +105,13 @@ module TraceView
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def do_get_stream_with_traceview(req, proxy, conn)
|
108
|
-
unless req.headers.key?(
|
108
|
+
unless req.headers.key?('traceview.context')
|
109
109
|
return do_get_stream_without_traceview(req, proxy, conn)
|
110
110
|
end
|
111
111
|
|
112
112
|
# Pickup context and delete the headers stowaway
|
113
|
-
TraceView::Context.fromString req.headers[
|
114
|
-
req.header.delete
|
113
|
+
TraceView::Context.fromString req.headers['traceview.context']
|
114
|
+
req.header.delete 'traceview.context'
|
115
115
|
|
116
116
|
begin
|
117
117
|
response = nil
|
@@ -129,7 +129,7 @@ module TraceView
|
|
129
129
|
TraceView::API.log_entry(:httpclient, kvs)
|
130
130
|
kvs.clear
|
131
131
|
|
132
|
-
req_context = TraceView::Context.toString
|
132
|
+
req_context = TraceView::Context.toString
|
133
133
|
req.header.add('X-Trace', req_context)
|
134
134
|
|
135
135
|
# The core httpclient call
|
@@ -146,8 +146,8 @@ module TraceView
|
|
146
146
|
kvs[:HTTPStatus] = response.status_code
|
147
147
|
|
148
148
|
# If we get a redirect, report the location header
|
149
|
-
if ((300..308).to_a.include? response.status.to_i) && response.headers.key?(
|
150
|
-
kvs[:Location] = response.headers[
|
149
|
+
if ((300..308).to_a.include? response.status.to_i) && response.headers.key?('Location')
|
150
|
+
kvs[:Location] = response.headers['Location']
|
151
151
|
end
|
152
152
|
|
153
153
|
if response_context && !blacklisted
|