traceview 3.3.3 → 3.4.0
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.rb +26 -32
- 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/sinatra.rb +1 -1
- data/lib/traceview/frameworks/sinatra/templates.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
@@ -13,17 +13,18 @@ module TraceView
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def remote_host(key)
|
16
|
-
return unless defined?(Lib.memcached_server_by_key)
|
17
|
-
|
16
|
+
return unless defined?(Lib.memcached_server_by_key) &&
|
17
|
+
defined?(@struct) && defined?(is_unix_socket?)
|
18
18
|
|
19
19
|
server_as_array = Lib.memcached_server_by_key(@struct, key.to_s)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
|
21
|
+
return unless server_as_array.is_a?(Array)
|
22
|
+
|
23
|
+
server = server_as_array.first
|
24
|
+
if is_unix_socket?(server)
|
25
|
+
'localhost'
|
26
|
+
elsif defined?(server.hostname)
|
27
|
+
server.hostname
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -69,13 +69,12 @@ module TraceView
|
|
69
69
|
# TraceView::API.profile_method(Array, :sort, opts)
|
70
70
|
#
|
71
71
|
def profile_method(klass, method, opts = {}, extra_kvs = {})
|
72
|
-
|
73
72
|
# If we're on an unsupported platform (ahem Mac), just act
|
74
73
|
# like we did something to nicely play the no-op part.
|
75
74
|
return true unless TraceView.loaded
|
76
75
|
|
77
76
|
if RUBY_VERSION < '1.9.3'
|
78
|
-
TraceView.logger.warn
|
77
|
+
TraceView.logger.warn '[traceview/error] profile_method: Use the legacy method profiling for Ruby versions before 1.9.3'
|
79
78
|
return false
|
80
79
|
|
81
80
|
elsif !klass.is_a?(Module)
|
@@ -110,7 +109,7 @@ module TraceView
|
|
110
109
|
|
111
110
|
# Check if already profiled
|
112
111
|
if klass.instance_methods.include?(with_traceview.to_sym) ||
|
113
|
-
|
112
|
+
klass.singleton_methods.include?(with_traceview.to_sym)
|
114
113
|
TraceView.logger.warn "[traceview/error] profile_method: #{klass}::#{method} already profiled."
|
115
114
|
TraceView.logger.warn "[traceview/error] profile_method: #{__FILE__}:#{__LINE__}"
|
116
115
|
return false
|
@@ -130,17 +129,17 @@ module TraceView
|
|
130
129
|
|
131
130
|
if instance_method
|
132
131
|
klass.class_eval do
|
133
|
-
define_method(with_traceview)
|
132
|
+
define_method(with_traceview) do |*args, &block|
|
134
133
|
profile_wrapper(without_traceview, report_kvs, opts, *args, &block)
|
135
|
-
|
134
|
+
end
|
136
135
|
|
137
136
|
alias_method without_traceview, "#{method}"
|
138
137
|
alias_method "#{method}", with_traceview
|
139
138
|
end
|
140
139
|
elsif class_method
|
141
|
-
klass.define_singleton_method(with_traceview)
|
140
|
+
klass.define_singleton_method(with_traceview) do |*args, &block|
|
142
141
|
profile_wrapper(without_traceview, report_kvs, opts, *args, &block)
|
143
|
-
|
142
|
+
end
|
144
143
|
|
145
144
|
klass.singleton_class.class_eval do
|
146
145
|
alias_method without_traceview, "#{method}"
|
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
|
|
@@ -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
|
@@ -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')
|
@@ -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)
|
@@ -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
|