traceview 3.3.3-java → 3.4.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/inst/action_controller.rb +3 -3
  25. data/lib/traceview/frameworks/rails/inst/action_view.rb +4 -2
  26. data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +4 -2
  27. data/lib/traceview/frameworks/rails/inst/action_view_30.rb +4 -2
  28. data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +3 -3
  29. data/lib/traceview/frameworks/rails.rb +26 -32
  30. data/lib/traceview/frameworks/sinatra/templates.rb +1 -1
  31. data/lib/traceview/frameworks/sinatra.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
@@ -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
 
@@ -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')
@@ -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
@@ -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) 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)
@@ -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] Error collecting info keys: #{e.message}"
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
@@ -1,3 +1,6 @@
1
+ # Copyright (c) 2013 AppNeta, Inc.
2
+ # All rights reserved.
3
+
1
4
  module TraceView
2
5
  module Inst
3
6
  module EventMachine
@@ -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?("Location")
88
- kvs["Location"] = response.headers["Location"]
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
- !@builder.handlers.include?(Faraday::Adapter::Excon)
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)
@@ -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
@@ -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 StandardError => e
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 = {}) unless TraceView.tracing?
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 = nil) unless TraceView.tracing?
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
@@ -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 "EX"; kvs[:ex] = opts[1]
111
- when "PX"; kvs[:px] = opts[1]
112
- when "NX"; kvs[:nx] = opts[1]
113
- when "XX"; kvs[:xx] = opts[1]
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