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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +18 -18
  3. data/CHANGELOG.md +13 -0
  4. data/README.md +3 -1
  5. data/Rakefile +18 -9
  6. data/gemfiles/delayed_job.gemfile +38 -0
  7. data/gemfiles/frameworks.gemfile +1 -2
  8. data/gemfiles/libraries.gemfile +1 -2
  9. data/gemfiles/rails23.gemfile +1 -2
  10. data/gemfiles/rails30.gemfile +4 -2
  11. data/gemfiles/rails31.gemfile +4 -2
  12. data/gemfiles/rails32.gemfile +4 -2
  13. data/gemfiles/rails40.gemfile +4 -2
  14. data/gemfiles/rails41.gemfile +4 -2
  15. data/gemfiles/rails42.gemfile +4 -2
  16. data/lib/traceview/api/layerinit.rb +3 -5
  17. data/lib/traceview/api/logging.rb +63 -50
  18. data/lib/traceview/api/memcache.rb +10 -9
  19. data/lib/traceview/api/profiling.rb +6 -7
  20. data/lib/traceview/api/util.rb +1 -1
  21. data/lib/traceview/base.rb +21 -7
  22. data/lib/traceview/config.rb +8 -4
  23. data/lib/traceview/frameworks/padrino.rb +2 -2
  24. data/lib/traceview/frameworks/rails.rb +26 -32
  25. data/lib/traceview/frameworks/rails/inst/action_controller.rb +3 -3
  26. data/lib/traceview/frameworks/rails/inst/action_view.rb +4 -2
  27. data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +4 -2
  28. data/lib/traceview/frameworks/rails/inst/action_view_30.rb +4 -2
  29. data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +3 -3
  30. data/lib/traceview/frameworks/sinatra.rb +1 -1
  31. data/lib/traceview/frameworks/sinatra/templates.rb +1 -1
  32. data/lib/traceview/inst/dalli.rb +4 -5
  33. data/lib/traceview/inst/delayed_job.rb +92 -0
  34. data/lib/traceview/inst/em-http-request.rb +3 -0
  35. data/lib/traceview/inst/excon.rb +3 -3
  36. data/lib/traceview/inst/faraday.rb +4 -1
  37. data/lib/traceview/inst/mongo.rb +10 -5
  38. data/lib/traceview/inst/moped.rb +4 -4
  39. data/lib/traceview/inst/redis.rb +5 -7
  40. data/lib/traceview/inst/resque.rb +3 -3
  41. data/lib/traceview/inst/rest-client.rb +2 -2
  42. data/lib/traceview/inst/sidekiq-client.rb +3 -0
  43. data/lib/traceview/inst/sidekiq-worker.rb +3 -0
  44. data/lib/traceview/inst/twitter-cassandra.rb +8 -4
  45. data/lib/traceview/test.rb +30 -1
  46. data/lib/traceview/util.rb +7 -0
  47. data/lib/traceview/version.rb +2 -2
  48. data/test/frameworks/rails3x_test.rb +12 -2
  49. data/test/frameworks/rails4x_test.rb +12 -2
  50. data/test/instrumentation/curb_test.rb +2 -2
  51. data/test/instrumentation/dalli_test.rb +121 -118
  52. data/test/instrumentation/httpclient_test.rb +0 -1
  53. data/test/jobs/delayed_job/db_worker_job.rb +29 -0
  54. data/test/jobs/delayed_job/error_worker_job.rb +10 -0
  55. data/test/jobs/delayed_job/remote_call_worker_job.rb +20 -0
  56. data/test/minitest_helper.rb +8 -3
  57. data/test/models/widget.rb +19 -0
  58. data/test/queues/delayed_job-client_test.rb +95 -0
  59. data/test/queues/delayed_job-worker_test.rb +91 -0
  60. data/test/servers/delayed_job.rb +102 -0
  61. data/test/servers/rails3x_8140.rb +17 -1
  62. data/test/servers/rails4x_8140.rb +18 -1
  63. data/test/support/auto_tracing.rb +40 -0
  64. data/test/support/config_test.rb +5 -1
  65. data/traceview.gemspec +1 -0
  66. metadata +34 -6
  67. data/test/instrumentation/delayed_job-client_test.rb +0 -128
  68. 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
- && defined?(@struct) && defined?(is_unix_socket?)
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
- if server_as_array.is_a?(Array)
21
- server = server_as_array.first
22
- if is_unix_socket?(server)
23
- return 'localhost'
24
- elsif defined?(server.hostname)
25
- return server.hostname
26
- end
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 "[traceview/error] profile_method: Use the legacy method profiling for Ruby versions before 1.9.3"
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
- klass.singleton_methods.include?(with_traceview.to_sym)
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) { | *args, &block |
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) { | *args, &block |
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}"
@@ -106,7 +106,7 @@ module TraceView
106
106
  # Class
107
107
  kv['Class'] = klass.to_s
108
108
 
109
- elsif (!klass.is_a?(Class) && !klass.is_a?(Module))
109
+ elsif !klass.is_a?(Class) && !klass.is_a?(Module)
110
110
  # Class instance
111
111
  kv['Class'] = klass.class.to_s
112
112
 
@@ -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
- return TraceView.layer == layer
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) && ($PROGRAM_NAME =~ /puma/i))
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 [ "development", "test" ].include? env
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 /^$/, "repeat last command" do
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) or defined?(::Sinatra) or defined?(::Padrino) or defined?(::Grape)
243
+ defined?(::Rails) && defined?(::Sinatra) && defined?(::Padrino) && defined?(::Grape)
230
244
  end
231
245
 
232
246
  ##
@@ -12,10 +12,12 @@ module TraceView
12
12
  @@config = {}
13
13
 
14
14
  @@instrumentation = [:action_controller, :action_view, :active_record,
15
- :cassandra, :curb, :dalli, :em_http_request, :excon, :faraday,
16
- :grape, :httpclient, :nethttp, :memcached, :memcache, :mongo,
17
- :moped, :rack, :redis, :resqueclient, :resqueworker,
18
- :rest_client, :sequel, :sidekiqclient, :sidekiqworker, :typhoeus]
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 and not request.controller.empty?
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 "[traceview/loading] Instrumenting Padrino" if TraceView::Config[:verbose]
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
- begin
15
- return unless TraceView::Config.rum_id
16
- if TraceView.tracing?
17
- if request.xhr?
18
- return raw(ERB.new(@@rum_xhr_tmpl).result)
19
- else
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
- begin
32
- return unless TraceView::Config.rum_id
33
- if TraceView.tracing?
34
- # Even though the footer template is named xxxx.erb, there are no ERB tags in it so we'll
35
- # skip that step for now
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.to_s}"
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.exists?("#{rails_root}/config/initializers/tracelytics.rb")
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.exists?("#{rails_root}/config/initializers/oboe.rb")
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.exists?(tr_initializer)
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 "[traceview/loading] Instrumenting rack" if TraceView::Config[:verbose]
114
- app.config.middleware.insert 0, "TraceView::Rack"
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 "[traceview/loading] Instrumenting rack" if TraceView::Config[:verbose]
137
- Rails.configuration.middleware.insert 0, "TraceView::Rack"
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 { | klass_name, handler |
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 => self.action_name,
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) and not (ENV.key?('TRACEVIEW_GEM_TEST'))
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