traceview 3.3.3-java → 3.4.0-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/.travis.yml +18 -18
- data/CHANGELOG.md +13 -0
- data/README.md +3 -1
- data/Rakefile +18 -9
- data/gemfiles/delayed_job.gemfile +38 -0
- data/gemfiles/frameworks.gemfile +1 -2
- data/gemfiles/libraries.gemfile +1 -2
- data/gemfiles/rails23.gemfile +1 -2
- data/gemfiles/rails30.gemfile +4 -2
- data/gemfiles/rails31.gemfile +4 -2
- data/gemfiles/rails32.gemfile +4 -2
- data/gemfiles/rails40.gemfile +4 -2
- data/gemfiles/rails41.gemfile +4 -2
- data/gemfiles/rails42.gemfile +4 -2
- data/lib/traceview/api/layerinit.rb +3 -5
- data/lib/traceview/api/logging.rb +63 -50
- data/lib/traceview/api/memcache.rb +10 -9
- data/lib/traceview/api/profiling.rb +6 -7
- data/lib/traceview/api/util.rb +1 -1
- data/lib/traceview/base.rb +21 -7
- data/lib/traceview/config.rb +8 -4
- data/lib/traceview/frameworks/padrino.rb +2 -2
- data/lib/traceview/frameworks/rails/inst/action_controller.rb +3 -3
- data/lib/traceview/frameworks/rails/inst/action_view.rb +4 -2
- data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +4 -2
- data/lib/traceview/frameworks/rails/inst/action_view_30.rb +4 -2
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +3 -3
- data/lib/traceview/frameworks/rails.rb +26 -32
- data/lib/traceview/frameworks/sinatra/templates.rb +1 -1
- data/lib/traceview/frameworks/sinatra.rb +1 -1
- data/lib/traceview/inst/dalli.rb +4 -5
- data/lib/traceview/inst/delayed_job.rb +92 -0
- data/lib/traceview/inst/em-http-request.rb +3 -0
- data/lib/traceview/inst/excon.rb +3 -3
- data/lib/traceview/inst/faraday.rb +4 -1
- data/lib/traceview/inst/mongo.rb +10 -5
- data/lib/traceview/inst/moped.rb +4 -4
- data/lib/traceview/inst/redis.rb +5 -7
- data/lib/traceview/inst/resque.rb +3 -3
- data/lib/traceview/inst/rest-client.rb +2 -2
- data/lib/traceview/inst/sidekiq-client.rb +3 -0
- data/lib/traceview/inst/sidekiq-worker.rb +3 -0
- data/lib/traceview/inst/twitter-cassandra.rb +8 -4
- data/lib/traceview/test.rb +30 -1
- data/lib/traceview/util.rb +7 -0
- data/lib/traceview/version.rb +2 -2
- data/test/frameworks/rails3x_test.rb +12 -2
- data/test/frameworks/rails4x_test.rb +12 -2
- data/test/instrumentation/curb_test.rb +2 -2
- data/test/instrumentation/dalli_test.rb +121 -118
- data/test/instrumentation/httpclient_test.rb +0 -1
- data/test/jobs/delayed_job/db_worker_job.rb +29 -0
- data/test/jobs/delayed_job/error_worker_job.rb +10 -0
- data/test/jobs/delayed_job/remote_call_worker_job.rb +20 -0
- data/test/minitest_helper.rb +8 -3
- data/test/models/widget.rb +19 -0
- data/test/queues/delayed_job-client_test.rb +95 -0
- data/test/queues/delayed_job-worker_test.rb +91 -0
- data/test/servers/delayed_job.rb +102 -0
- data/test/servers/rails3x_8140.rb +17 -1
- data/test/servers/rails4x_8140.rb +18 -1
- data/test/support/auto_tracing.rb +40 -0
- data/test/support/config_test.rb +5 -1
- data/traceview.gemspec +1 -0
- metadata +34 -6
- data/test/instrumentation/delayed_job-client_test.rb +0 -128
- data/test/instrumentation/delayed_job-worker_test.rb +0 -177
data/lib/traceview/api/util.rb
CHANGED
data/lib/traceview/base.rb
CHANGED
@@ -75,7 +75,7 @@ module TraceViewBase
|
|
75
75
|
|
76
76
|
# This gives us pretty accessors with questions marks at the end
|
77
77
|
# e.g. is_continued_trace --> is_continued_trace?
|
78
|
-
TraceView.methods.select{ |m| m =~ /^is_|^has_/ }.each do |c|
|
78
|
+
TraceView.methods.select { |m| m =~ /^is_|^has_/ }.each do |c|
|
79
79
|
unless c =~ /\?$|=$/
|
80
80
|
# TraceView.logger.debug "aliasing #{c}? to #{c}"
|
81
81
|
alias_method "#{c}?", c
|
@@ -111,7 +111,7 @@ module TraceViewBase
|
|
111
111
|
# operation tracing or one instrumented operation calling another.
|
112
112
|
#
|
113
113
|
def tracing_layer?(layer)
|
114
|
-
|
114
|
+
TraceView.layer == layer
|
115
115
|
end
|
116
116
|
|
117
117
|
##
|
@@ -131,6 +131,20 @@ module TraceViewBase
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
+
##
|
135
|
+
# entry_layer?
|
136
|
+
#
|
137
|
+
# Determines if the passed layer is an entry only
|
138
|
+
# layer where we would want to use smart tracing.
|
139
|
+
#
|
140
|
+
# Entry only layers are layers that _only_ start traces
|
141
|
+
# and doesn't directly receive incoming context such as
|
142
|
+
# DelayedJob or Sidekiq workers.
|
143
|
+
#
|
144
|
+
def entry_layer?(layer)
|
145
|
+
%w(delayed_job-worker).include?(layer.to_s)
|
146
|
+
end
|
147
|
+
|
134
148
|
##
|
135
149
|
# Returns true if the tracing_mode is set to always.
|
136
150
|
# False otherwise
|
@@ -160,7 +174,7 @@ module TraceViewBase
|
|
160
174
|
# False otherwise
|
161
175
|
#
|
162
176
|
def through?
|
163
|
-
TraceView::Config[:tracing_mode] == 'through'
|
177
|
+
TraceView::Config[:tracing_mode].to_s == 'through'
|
164
178
|
end
|
165
179
|
|
166
180
|
##
|
@@ -186,7 +200,7 @@ module TraceViewBase
|
|
186
200
|
#
|
187
201
|
def forking_webserver?
|
188
202
|
if (defined?(::Unicorn) && ($PROGRAM_NAME =~ /unicorn/i)) ||
|
189
|
-
(defined?(::Puma)
|
203
|
+
(defined?(::Puma) && ($PROGRAM_NAME =~ /puma/i))
|
190
204
|
true
|
191
205
|
else
|
192
206
|
false
|
@@ -199,7 +213,7 @@ module TraceViewBase
|
|
199
213
|
def pry!
|
200
214
|
# Only valid for development or test environments
|
201
215
|
env = ENV['RACK_ENV'] || ENV['RAILS_ENV']
|
202
|
-
return unless
|
216
|
+
return unless %w(development, test).include? env
|
203
217
|
|
204
218
|
if RUBY_VERSION > '1.8.7'
|
205
219
|
require 'pry-byebug'
|
@@ -210,7 +224,7 @@ module TraceViewBase
|
|
210
224
|
Pry.commands.alias_command 'n', 'next'
|
211
225
|
Pry.commands.alias_command 'f', 'finish'
|
212
226
|
|
213
|
-
Pry::Commands.command /^$/,
|
227
|
+
Pry::Commands.command /^$/, 'repeat last command' do
|
214
228
|
_pry_.run_command Pry.history.to_a.last
|
215
229
|
end
|
216
230
|
end
|
@@ -226,7 +240,7 @@ module TraceViewBase
|
|
226
240
|
# or not
|
227
241
|
#
|
228
242
|
def framework?
|
229
|
-
defined?(::Rails)
|
243
|
+
defined?(::Rails) && defined?(::Sinatra) && defined?(::Padrino) && defined?(::Grape)
|
230
244
|
end
|
231
245
|
|
232
246
|
##
|
data/lib/traceview/config.rb
CHANGED
@@ -12,10 +12,12 @@ module TraceView
|
|
12
12
|
@@config = {}
|
13
13
|
|
14
14
|
@@instrumentation = [:action_controller, :action_view, :active_record,
|
15
|
-
:cassandra, :curb, :dalli, :
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
15
|
+
:cassandra, :curb, :dalli, :delayed_jobclient,
|
16
|
+
:delayed_jobworker, :em_http_request, :excon,
|
17
|
+
:faraday, :grape, :httpclient, :nethttp, :memcached,
|
18
|
+
:memcache, :mongo, :moped, :rack, :redis, :resqueclient,
|
19
|
+
:resqueworker, :rest_client, :sequel, :sidekiqclient,
|
20
|
+
:sidekiqworker, :typhoeus]
|
19
21
|
|
20
22
|
# Subgrouping of instrumentation
|
21
23
|
@@http_clients = [:curb, :excon, :em_http_request, :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]
|
@@ -46,6 +48,8 @@ module TraceView
|
|
46
48
|
TraceView::Config[:cassandra][:collect_backtraces] = true
|
47
49
|
TraceView::Config[:curb][:collect_backtraces] = true
|
48
50
|
TraceView::Config[:dalli][:collect_backtraces] = false
|
51
|
+
TraceView::Config[:delayed_jobclient][:collect_backtraces] = false
|
52
|
+
TraceView::Config[:delayed_jobworker][:collect_backtraces] = false
|
49
53
|
TraceView::Config[:em_http_request][:collect_backtraces] = false
|
50
54
|
TraceView::Config[:excon][:collect_backtraces] = true
|
51
55
|
TraceView::Config[:faraday][:collect_backtraces] = false
|
@@ -22,7 +22,7 @@ module TraceView
|
|
22
22
|
r = dispatch_without_traceview
|
23
23
|
|
24
24
|
# Report Controller/Action as best possible
|
25
|
-
if request.controller
|
25
|
+
if request.controller && !request.controller.empty?
|
26
26
|
report_kvs[:Controller] = request.controller
|
27
27
|
else
|
28
28
|
report_kvs[:Controller] = self.class
|
@@ -44,7 +44,7 @@ end
|
|
44
44
|
if defined?(::Padrino)
|
45
45
|
# This instrumentation is a superset of the Sinatra instrumentation similar
|
46
46
|
# to how Padrino is a superset of Sinatra itself.
|
47
|
-
::TraceView.logger.info
|
47
|
+
::TraceView.logger.info '[traceview/loading] Instrumenting Padrino' if TraceView::Config[:verbose]
|
48
48
|
|
49
49
|
require 'traceview/frameworks/padrino/templates'
|
50
50
|
|
@@ -19,12 +19,12 @@ module TraceView
|
|
19
19
|
def has_handler?(exception)
|
20
20
|
# Don't log exceptions if they have a rescue handler set
|
21
21
|
has_handler = false
|
22
|
-
rescue_handlers.detect
|
22
|
+
rescue_handlers.detect do |klass_name, _handler|
|
23
23
|
# Rescue handlers can be specified as strings or constant names
|
24
24
|
klass = self.class.const_get(klass_name) rescue nil
|
25
25
|
klass ||= klass_name.constantize rescue nil
|
26
26
|
has_handler = exception.is_a?(klass) if klass
|
27
|
-
|
27
|
+
end
|
28
28
|
has_handler
|
29
29
|
rescue => e
|
30
30
|
TraceView.logger.debug "[traceview/debug] Error searching Rails handlers: #{e.message}"
|
@@ -101,7 +101,7 @@ module TraceView
|
|
101
101
|
def process_action_with_traceview(*args)
|
102
102
|
report_kvs = {
|
103
103
|
:Controller => self.class.name,
|
104
|
-
:Action =>
|
104
|
+
:Action => action_name,
|
105
105
|
}
|
106
106
|
TraceView::API.log(nil, 'info', report_kvs)
|
107
107
|
|
@@ -23,7 +23,8 @@ if defined?(ActionView::Base) && TraceView::Config[:action_view][:enabled]
|
|
23
23
|
entry_kvs[:Module] = :ActionView
|
24
24
|
entry_kvs[:File] = __FILE__
|
25
25
|
entry_kvs[:LineNumber] = __LINE__
|
26
|
-
rescue
|
26
|
+
rescue => e
|
27
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
27
28
|
end
|
28
29
|
|
29
30
|
TraceView::API.profile(name, entry_kvs, TraceView::Config[:action_view][:collect_backtraces]) do
|
@@ -41,7 +42,8 @@ if defined?(ActionView::Base) && TraceView::Config[:action_view][:enabled]
|
|
41
42
|
entry_kvs[:Module] = :ActionView
|
42
43
|
entry_kvs[:File] = __FILE__
|
43
44
|
entry_kvs[:LineNumber] = __LINE__
|
44
|
-
rescue
|
45
|
+
rescue => e
|
46
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
45
47
|
end
|
46
48
|
|
47
49
|
TraceView::API.profile(name, entry_kvs, TraceView::Config[:action_view][:collect_backtraces]) do
|
@@ -19,7 +19,8 @@ if defined?(ActionView::Base) && TraceView::Config[:action_view][:enabled]
|
|
19
19
|
entry_kvs[:Module] = :ActionView
|
20
20
|
entry_kvs[:File] = __FILE__
|
21
21
|
entry_kvs[:LineNumber] = __LINE__
|
22
|
-
rescue
|
22
|
+
rescue => e
|
23
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
23
24
|
end
|
24
25
|
|
25
26
|
TraceView::API.profile(name, entry_kvs, TraceView::Config[:action_view][:collect_backtraces]) do
|
@@ -40,7 +41,8 @@ if defined?(ActionView::Base) && TraceView::Config[:action_view][:enabled]
|
|
40
41
|
entry_kvs[:Module] = :ActionView
|
41
42
|
entry_kvs[:File] = __FILE__
|
42
43
|
entry_kvs[:LineNumber] = __LINE__
|
43
|
-
rescue
|
44
|
+
rescue => e
|
45
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
44
46
|
end
|
45
47
|
|
46
48
|
TraceView::API.profile(name, entry_kvs, TraceView::Config[:action_view][:collect_backtraces]) do
|
@@ -16,7 +16,8 @@ if defined?(ActionView::Base) && TraceView::Config[:action_view][:enabled]
|
|
16
16
|
entry_kvs[:Module] = 'ActionView::Partials'
|
17
17
|
entry_kvs[:File] = __FILE__
|
18
18
|
entry_kvs[:LineNumber] = __LINE__
|
19
|
-
rescue
|
19
|
+
rescue => e
|
20
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
20
21
|
end
|
21
22
|
|
22
23
|
TraceView::API.profile(name, entry_kvs, TraceView::Config[:action_view][:collect_backtraces]) do
|
@@ -34,7 +35,8 @@ if defined?(ActionView::Base) && TraceView::Config[:action_view][:enabled]
|
|
34
35
|
entry_kvs[:Module] = 'ActionView::Partials'
|
35
36
|
entry_kvs[:File] = __FILE__
|
36
37
|
entry_kvs[:LineNumber] = __LINE__
|
37
|
-
rescue
|
38
|
+
rescue => e
|
39
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
38
40
|
end
|
39
41
|
|
40
42
|
TraceView::API.profile(name, entry_kvs, TraceView::Config[:action_view][:collect_backtraces]) do
|
@@ -28,9 +28,9 @@ module TraceView
|
|
28
28
|
config = ::Rails.application.config.database_configuration[::Rails.env]
|
29
29
|
end
|
30
30
|
|
31
|
-
opts[:Database] = config['database'] if config.key?('database')
|
32
|
-
opts[:RemoteHost] = config['host'] if config.key?('host')
|
33
|
-
opts[:Flavor] = config['adapter'] if config.key?('adapter')
|
31
|
+
opts[:Database] = config['database'] if config && config.key?('database')
|
32
|
+
opts[:RemoteHost] = config['host'] if config && config.key?('host')
|
33
|
+
opts[:Flavor] = config['adapter'] if config && config.key?('adapter')
|
34
34
|
rescue StandardError => e
|
35
35
|
TraceView.logger.debug "Exception raised capturing ActiveRecord KVs: #{e.inspect}"
|
36
36
|
TraceView.logger.debug e.backtrace.join('\n')
|
@@ -11,34 +11,30 @@ module TraceView
|
|
11
11
|
@@rum_ftr_tmpl = File.read(File.dirname(__FILE__) + '/rails/helpers/rum/rum_footer.js.erb')
|
12
12
|
|
13
13
|
def traceview_rum_header
|
14
|
-
|
15
|
-
|
16
|
-
if
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
return raw(ERB.new(@@rum_hdr_tmpl).result)
|
21
|
-
end
|
14
|
+
return unless TraceView::Config.rum_id
|
15
|
+
if TraceView.tracing?
|
16
|
+
if request.xhr?
|
17
|
+
return raw(ERB.new(@@rum_xhr_tmpl).result)
|
18
|
+
else
|
19
|
+
return raw(ERB.new(@@rum_hdr_tmpl).result)
|
22
20
|
end
|
23
|
-
rescue StandardError => e
|
24
|
-
TraceView.logger.warn "traceview_rum_header: #{e.message}."
|
25
|
-
return ""
|
26
21
|
end
|
22
|
+
rescue StandardError => e
|
23
|
+
TraceView.logger.warn "traceview_rum_header: #{e.message}."
|
24
|
+
return ''
|
27
25
|
end
|
28
26
|
alias_method :oboe_rum_header, :traceview_rum_header
|
29
27
|
|
30
28
|
def traceview_rum_footer
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
return raw(@@rum_ftr_tmpl)
|
37
|
-
end
|
38
|
-
rescue StandardError => e
|
39
|
-
TraceView.logger.warn "traceview_rum_footer: #{e.message}."
|
40
|
-
return ""
|
29
|
+
return unless TraceView::Config.rum_id
|
30
|
+
if TraceView.tracing?
|
31
|
+
# Even though the footer template is named xxxx.erb, there are no ERB tags in it so we'll
|
32
|
+
# skip that step for now
|
33
|
+
return raw(@@rum_ftr_tmpl)
|
41
34
|
end
|
35
|
+
rescue StandardError => e
|
36
|
+
TraceView.logger.warn "traceview_rum_footer: #{e.message}."
|
37
|
+
return ''
|
42
38
|
end
|
43
39
|
alias_method :oboe_rum_footer, :traceview_rum_footer
|
44
40
|
end # Helpers
|
@@ -47,7 +43,7 @@ module TraceView
|
|
47
43
|
# Force load the TraceView Rails initializer if there is one
|
48
44
|
# Prefer traceview.rb but give priority to the legacy tracelytics.rb if it exists
|
49
45
|
if ::Rails::VERSION::MAJOR > 2
|
50
|
-
rails_root = "#{::Rails.root
|
46
|
+
rails_root = "#{::Rails.root}"
|
51
47
|
else
|
52
48
|
rails_root = "#{RAILS_ROOT}"
|
53
49
|
end
|
@@ -55,16 +51,16 @@ module TraceView
|
|
55
51
|
#
|
56
52
|
# We've been through 3 initializer names. Try each one.
|
57
53
|
#
|
58
|
-
if File.
|
54
|
+
if File.exist?("#{rails_root}/config/initializers/tracelytics.rb")
|
59
55
|
tr_initializer = "#{rails_root}/config/initializers/tracelytics.rb"
|
60
56
|
|
61
|
-
elsif File.
|
57
|
+
elsif File.exist?("#{rails_root}/config/initializers/oboe.rb")
|
62
58
|
tr_initializer = "#{rails_root}/config/initializers/oboe.rb"
|
63
59
|
|
64
60
|
else
|
65
61
|
tr_initializer = "#{rails_root}/config/initializers/traceview.rb"
|
66
62
|
end
|
67
|
-
require tr_initializer if File.
|
63
|
+
require tr_initializer if File.exist?(tr_initializer)
|
68
64
|
end
|
69
65
|
|
70
66
|
def self.load_instrumentation
|
@@ -94,7 +90,6 @@ module TraceView
|
|
94
90
|
ActionView::Base.send :include, TraceView::Rails::Helpers
|
95
91
|
end
|
96
92
|
end
|
97
|
-
|
98
93
|
end # Rails
|
99
94
|
end # TraceView
|
100
95
|
|
@@ -104,18 +99,17 @@ if defined?(::Rails)
|
|
104
99
|
if ::Rails::VERSION::MAJOR > 2
|
105
100
|
module TraceView
|
106
101
|
class Railtie < ::Rails::Railtie
|
107
|
-
|
108
102
|
initializer 'traceview.helpers' do
|
109
103
|
TraceView::Rails.include_helpers
|
110
104
|
end
|
111
105
|
|
112
106
|
initializer 'traceview.rack' do |app|
|
113
|
-
TraceView.logger.info
|
114
|
-
app.config.middleware.insert 0,
|
107
|
+
TraceView.logger.info '[traceview/loading] Instrumenting rack' if TraceView::Config[:verbose]
|
108
|
+
app.config.middleware.insert 0, 'TraceView::Rack'
|
115
109
|
end
|
116
110
|
|
117
111
|
config.after_initialize do
|
118
|
-
TraceView.logger = ::Rails.logger if ::Rails.logger
|
112
|
+
TraceView.logger = ::Rails.logger if ::Rails.logger && !ENV.key?('TRACEVIEW_GEM_TEST')
|
119
113
|
|
120
114
|
TraceView::Loading.load_access_key
|
121
115
|
TraceView::Inst.load_instrumentation
|
@@ -133,8 +127,8 @@ if defined?(::Rails)
|
|
133
127
|
TraceView::Loading.load_access_key
|
134
128
|
|
135
129
|
Rails.configuration.after_initialize do
|
136
|
-
TraceView.logger.info
|
137
|
-
Rails.configuration.middleware.insert 0,
|
130
|
+
TraceView.logger.info '[traceview/loading] Instrumenting rack' if TraceView::Config[:verbose]
|
131
|
+
Rails.configuration.middleware.insert 0, 'TraceView::Rack'
|
138
132
|
|
139
133
|
TraceView::Inst.load_instrumentation
|
140
134
|
TraceView::Rails.load_instrumentation
|
@@ -27,7 +27,7 @@ module TraceView
|
|
27
27
|
report_kvs[:LineNumber] = __LINE__
|
28
28
|
rescue StandardError => e
|
29
29
|
::TraceView.logger.debug e.message
|
30
|
-
::TraceView.logger.debug e.backtrace.join(
|
30
|
+
::TraceView.logger.debug e.backtrace.join(', ')
|
31
31
|
end
|
32
32
|
|
33
33
|
TraceView::API.profile(name, report_kvs, false) do
|
@@ -85,7 +85,7 @@ if defined?(::Sinatra)
|
|
85
85
|
|
86
86
|
# When in the gem TEST environment, we load this instrumentation regardless.
|
87
87
|
# Otherwise, only when Padrino isn't around.
|
88
|
-
unless defined?(::Padrino)
|
88
|
+
unless defined?(::Padrino) && !ENV.key?('TRACEVIEW_GEM_TEST')
|
89
89
|
# Padrino has 'enhanced' routes and rendering so the Sinatra
|
90
90
|
# instrumentation won't work anyways. Only load for pure Sinatra apps.
|
91
91
|
::TraceView::Util.send_include(::Sinatra::Base, ::TraceView::Sinatra::Base)
|
data/lib/traceview/inst/dalli.rb
CHANGED
@@ -50,7 +50,7 @@ module TraceView
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def get_multi_with_traceview(*keys)
|
53
|
-
return get_multi_without_traceview(keys) unless TraceView.tracing?
|
53
|
+
return get_multi_without_traceview(*keys) unless TraceView.tracing?
|
54
54
|
|
55
55
|
info_kvs = {}
|
56
56
|
|
@@ -60,13 +60,12 @@ module TraceView
|
|
60
60
|
if @servers.is_a?(Array) && !@servers.empty?
|
61
61
|
info_kvs[:RemoteHost] = @servers.join(", ")
|
62
62
|
end
|
63
|
-
rescue
|
64
|
-
TraceView.logger.debug "[traceview/debug]
|
65
|
-
TraceView.logger.debug e.backtrace
|
63
|
+
rescue => e
|
64
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
66
65
|
end
|
67
66
|
|
68
67
|
TraceView::API.trace('memcache', { :KVOp => :get_multi }, :get_multi) do
|
69
|
-
values = get_multi_without_traceview(keys)
|
68
|
+
values = get_multi_without_traceview(*keys)
|
70
69
|
|
71
70
|
info_kvs[:KVHitCount] = values.length
|
72
71
|
info_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:dalli][:collect_backtraces]
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
if defined?(::Delayed)
|
5
|
+
module TraceView
|
6
|
+
module Inst
|
7
|
+
module DelayedJob
|
8
|
+
##
|
9
|
+
# ForkHandler
|
10
|
+
#
|
11
|
+
# Since delayed job doesn't offer a hook into `after_fork`, we alias the method
|
12
|
+
# here to do our magic after a fork happens.
|
13
|
+
#
|
14
|
+
module ForkHandler
|
15
|
+
def self.extended(klass)
|
16
|
+
::TraceView::Util.class_method_alias(klass, :after_fork, ::Delayed::Worker)
|
17
|
+
end
|
18
|
+
|
19
|
+
def after_fork_with_traceview
|
20
|
+
::TraceView.logger.info '[traceview/delayed_job] Detected fork. Restarting TraceView reporter.' if TraceView::Config[:verbose]
|
21
|
+
::TraceView::Reporter.restart unless ENV.key?('TRACEVIEW_GEM_TEST')
|
22
|
+
|
23
|
+
after_fork_without_traceview
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# TraceView::Inst::DelayedJob::Plugin
|
29
|
+
#
|
30
|
+
# The TraceView DelayedJob plugin. Here we wrap `enqueue` and
|
31
|
+
# `perform` to capture the timing of the bits we're interested
|
32
|
+
# in.
|
33
|
+
#
|
34
|
+
class Plugin < Delayed::Plugin
|
35
|
+
callbacks do |lifecycle|
|
36
|
+
|
37
|
+
# enqueue
|
38
|
+
if TraceView::Config[:delayed_jobclient][:enabled]
|
39
|
+
lifecycle.around(:enqueue) do |job, &block|
|
40
|
+
begin
|
41
|
+
report_kvs = {}
|
42
|
+
report_kvs[:Spec] = :pushq
|
43
|
+
report_kvs[:Flavor] = :DelayedJob
|
44
|
+
report_kvs[:JobName] = job.name
|
45
|
+
report_kvs[:MsgID] = job.id
|
46
|
+
report_kvs[:Queue] = job.queue if job.queue
|
47
|
+
report_kvs['Backtrace'] = TV::API.backtrace if TV::Config[:delayed_jobclient][:collect_backtraces]
|
48
|
+
|
49
|
+
TraceView::API.trace('delayed_job-client', report_kvs) do
|
50
|
+
block.call(job)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# invoke_job
|
57
|
+
if TraceView::Config[:delayed_jobworker][:enabled]
|
58
|
+
lifecycle.around(:perform) do |worker, job, &block|
|
59
|
+
begin
|
60
|
+
report_kvs = {}
|
61
|
+
report_kvs[:Spec] = :job
|
62
|
+
report_kvs[:Flavor] = :DelayedJob
|
63
|
+
report_kvs[:JobName] = job.name
|
64
|
+
report_kvs[:MsgID] = job.id
|
65
|
+
report_kvs[:Queue] = job.queue if job.queue
|
66
|
+
report_kvs['Backtrace'] = TV::API.backtrace if TV::Config[:delayed_jobworker][:collect_backtraces]
|
67
|
+
|
68
|
+
# DelayedJob Specific KVs
|
69
|
+
report_kvs[:priority] = job.priority
|
70
|
+
report_kvs[:attempts] = job.attempts
|
71
|
+
report_kvs[:WorkerName] = job.locked_by
|
72
|
+
rescue => e
|
73
|
+
TV.logger.warn "[traceview/warning] inst/delayed_job.rb: #{e.message}"
|
74
|
+
end
|
75
|
+
|
76
|
+
result = TraceView::API.start_trace('delayed_job-worker', nil, report_kvs) do
|
77
|
+
block.call(worker, job)
|
78
|
+
TV::API.log_exception(nil, job.error) if job.error
|
79
|
+
end
|
80
|
+
result[0]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
::TraceView.logger.info '[traceview/loading] Instrumenting delayed_job' if TraceView::Config[:verbose]
|
90
|
+
::TraceView::Util.send_extend(::Delayed::Worker, ::TraceView::Inst::DelayedJob::ForkHandler)
|
91
|
+
::Delayed::Worker.plugins << ::TraceView::Inst::DelayedJob::Plugin
|
92
|
+
end
|
data/lib/traceview/inst/excon.rb
CHANGED
@@ -64,7 +64,7 @@ module TraceView
|
|
64
64
|
# Avoid cross host tracing for blacklisted domains
|
65
65
|
blacklisted = TraceView::API.blacklisted?(@data[:hostname])
|
66
66
|
|
67
|
-
req_context = TraceView::Context.toString
|
67
|
+
req_context = TraceView::Context.toString
|
68
68
|
@data[:headers]['X-Trace'] = req_context unless blacklisted
|
69
69
|
|
70
70
|
kvs = traceview_collect(params)
|
@@ -84,8 +84,8 @@ module TraceView
|
|
84
84
|
kvs['HTTPStatus'] = response.status
|
85
85
|
|
86
86
|
# If we get a redirect, report the location header
|
87
|
-
if ((300..308).to_a.include? response.status.to_i) && response.headers.key?(
|
88
|
-
kvs[
|
87
|
+
if ((300..308).to_a.include? response.status.to_i) && response.headers.key?('Location')
|
88
|
+
kvs['Location'] = response.headers['Location']
|
89
89
|
end
|
90
90
|
|
91
91
|
if response_context && !blacklisted
|
@@ -1,3 +1,6 @@
|
|
1
|
+
# Copyright (c) 2014 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
1
4
|
module TraceView
|
2
5
|
module Inst
|
3
6
|
module FaradayConnection
|
@@ -9,7 +12,7 @@ module TraceView
|
|
9
12
|
# Only send service KVs if we're not using the Net::HTTP adapter
|
10
13
|
# Otherwise, the Net::HTTP instrumentation will send the service KVs
|
11
14
|
handle_service = !@builder.handlers.include?(Faraday::Adapter::NetHttp) &&
|
12
|
-
|
15
|
+
!@builder.handlers.include?(Faraday::Adapter::Excon)
|
13
16
|
TraceView::API.log_entry('faraday')
|
14
17
|
|
15
18
|
result = run_request_without_traceview(method, url, body, headers, &block)
|
data/lib/traceview/inst/mongo.rb
CHANGED
@@ -56,7 +56,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
|
|
56
56
|
report_kvs[:Collection] = args[0] if m == :drop_collection
|
57
57
|
|
58
58
|
report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:mongo][:collect_backtraces]
|
59
|
-
rescue
|
59
|
+
rescue => e
|
60
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
60
61
|
end
|
61
62
|
|
62
63
|
TraceView::API.trace('mongo', report_kvs) do
|
@@ -97,7 +98,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
|
|
97
98
|
end
|
98
99
|
report_kvs[:Limit] = @limit if @limit != 0
|
99
100
|
end
|
100
|
-
rescue
|
101
|
+
rescue => e
|
102
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
101
103
|
end
|
102
104
|
|
103
105
|
TraceView::API.trace('mongo', report_kvs) do
|
@@ -162,7 +164,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
|
|
162
164
|
report_kvs[:Multi] = args[2][:multi] if args[2] && args[2].key?(:multi)
|
163
165
|
end
|
164
166
|
end
|
165
|
-
rescue
|
167
|
+
rescue => e
|
168
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
166
169
|
end
|
167
170
|
|
168
171
|
TraceView::API.trace('mongo', report_kvs) do
|
@@ -200,7 +203,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
|
|
200
203
|
end
|
201
204
|
end
|
202
205
|
end
|
203
|
-
rescue
|
206
|
+
rescue => e
|
207
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
204
208
|
end
|
205
209
|
|
206
210
|
TraceView::API.trace('mongo', report_kvs) do
|
@@ -221,7 +225,8 @@ if defined?(::Mongo) && TraceView::Config[:mongo][:enabled]
|
|
221
225
|
if [:create_index, :ensure_index, :drop_index].include?(m) && !args.empty?
|
222
226
|
report_kvs[:Index] = args[0].to_json
|
223
227
|
end
|
224
|
-
rescue
|
228
|
+
rescue => e
|
229
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
225
230
|
end
|
226
231
|
|
227
232
|
TraceView::API.trace('mongo', report_kvs) do
|
data/lib/traceview/inst/moped.rb
CHANGED
@@ -58,7 +58,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
|
|
58
58
|
report_kvs = extract_trace_details(:map_reduce)
|
59
59
|
report_kvs[:Map_Function] = command[:map]
|
60
60
|
report_kvs[:Reduce_Function] = command[:reduce]
|
61
|
-
rescue
|
61
|
+
rescue => e
|
62
62
|
TraceView.logger.debug "[traceview/debug] Moped KV collection error: #{e.inspect}"
|
63
63
|
end
|
64
64
|
|
@@ -117,7 +117,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def create_with_traceview(key, options = {})
|
120
|
-
return create_without_traceview(key, options
|
120
|
+
return create_without_traceview(key, options) unless TraceView.tracing?
|
121
121
|
|
122
122
|
begin
|
123
123
|
# We report :create_index here to be consistent
|
@@ -135,7 +135,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
|
|
135
135
|
end
|
136
136
|
|
137
137
|
def drop_with_traceview(key = nil)
|
138
|
-
return drop_without_traceview(key
|
138
|
+
return drop_without_traceview(key) unless TraceView.tracing?
|
139
139
|
|
140
140
|
begin
|
141
141
|
# We report :drop_indexes here to be consistent
|
@@ -451,7 +451,7 @@ if defined?(::Moped) && TraceView::Config[:moped][:enabled]
|
|
451
451
|
end
|
452
452
|
|
453
453
|
def aggregate_with_traceview(*pipeline)
|
454
|
-
return aggregate_without_traceview(pipeline) unless TraceView.tracing?
|
454
|
+
return aggregate_without_traceview(*pipeline) unless TraceView.tracing?
|
455
455
|
|
456
456
|
report_kvs = extract_trace_details(:aggregate)
|
457
457
|
report_kvs[:Query] = pipeline
|
data/lib/traceview/inst/redis.rb
CHANGED
@@ -88,9 +88,7 @@ module TraceView
|
|
88
88
|
|
89
89
|
if KV_COLLECT_MAP[op]
|
90
90
|
# Extract KVs from command for this op
|
91
|
-
KV_COLLECT_MAP[op].each { |k, v|
|
92
|
-
kvs[k] = command[v]
|
93
|
-
}
|
91
|
+
KV_COLLECT_MAP[op].each { |k, v| kvs[k] = command[v] }
|
94
92
|
else
|
95
93
|
# This case statement handle special cases not handled
|
96
94
|
# by KV_COLLECT_MAP
|
@@ -107,10 +105,10 @@ module TraceView
|
|
107
105
|
options = command[3..-1]
|
108
106
|
until (opts = options.shift(2)).empty?
|
109
107
|
case opts[0]
|
110
|
-
when
|
111
|
-
when
|
112
|
-
when
|
113
|
-
when
|
108
|
+
when 'EX' then; kvs[:ex] = opts[1]
|
109
|
+
when 'PX' then; kvs[:px] = opts[1]
|
110
|
+
when 'NX' then; kvs[:nx] = opts[1]
|
111
|
+
when 'XX' then; kvs[:xx] = opts[1]
|
114
112
|
end
|
115
113
|
end
|
116
114
|
end
|