traceview 3.3.3-java → 3.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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
|