traceview 3.3.3 → 3.4.0
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.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
|