appoptics_apm 4.4.0 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/examples/carrying_context.rb +1 -1
  4. data/lib/appoptics_apm/api/logging.rb +1 -1
  5. data/lib/appoptics_apm/api/profiling.rb +2 -2
  6. data/lib/appoptics_apm/api/tracing.rb +0 -1
  7. data/lib/appoptics_apm/base.rb +1 -1
  8. data/lib/appoptics_apm/config.rb +2 -2
  9. data/lib/appoptics_apm/frameworks/grape.rb +13 -12
  10. data/lib/appoptics_apm/frameworks/padrino.rb +67 -14
  11. data/lib/appoptics_apm/frameworks/rails/inst/action_controller.rb +3 -3
  12. data/lib/appoptics_apm/frameworks/rails/inst/action_controller3.rb +4 -7
  13. data/lib/appoptics_apm/frameworks/rails/inst/action_controller4.rb +1 -1
  14. data/lib/appoptics_apm/frameworks/rails/inst/action_controller5.rb +1 -1
  15. data/lib/appoptics_apm/frameworks/rails/inst/action_controller_api.rb +2 -2
  16. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/mysql.rb +14 -14
  17. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/mysql2.rb +9 -9
  18. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/postgresql.rb +8 -8
  19. data/lib/appoptics_apm/frameworks/sinatra.rb +62 -11
  20. data/lib/appoptics_apm/inst/bunny-client.rb +12 -10
  21. data/lib/appoptics_apm/inst/bunny-consumer.rb +54 -56
  22. data/lib/appoptics_apm/inst/curb.rb +11 -11
  23. data/lib/appoptics_apm/inst/dalli.rb +3 -4
  24. data/lib/appoptics_apm/inst/delayed_job.rb +7 -7
  25. data/lib/appoptics_apm/inst/em-http-request.rb +6 -9
  26. data/lib/appoptics_apm/inst/excon.rb +10 -9
  27. data/lib/appoptics_apm/inst/faraday.rb +6 -8
  28. data/lib/appoptics_apm/inst/grpc_client.rb +8 -9
  29. data/lib/appoptics_apm/inst/httpclient.rb +10 -10
  30. data/lib/appoptics_apm/inst/memcached.rb +9 -13
  31. data/lib/appoptics_apm/inst/mongo.rb +14 -10
  32. data/lib/appoptics_apm/inst/mongo2.rb +5 -5
  33. data/lib/appoptics_apm/inst/moped.rb +10 -10
  34. data/lib/appoptics_apm/inst/rack.rb +11 -14
  35. data/lib/appoptics_apm/inst/redis.rb +10 -10
  36. data/lib/appoptics_apm/inst/resque.rb +9 -9
  37. data/lib/appoptics_apm/inst/rest-client.rb +4 -6
  38. data/lib/appoptics_apm/inst/sequel.rb +10 -10
  39. data/lib/appoptics_apm/inst/sidekiq-client.rb +5 -5
  40. data/lib/appoptics_apm/inst/sidekiq-worker.rb +5 -5
  41. data/lib/appoptics_apm/inst/twitter-cassandra.rb +3 -3
  42. data/lib/appoptics_apm/inst/typhoeus.rb +8 -9
  43. data/lib/appoptics_apm/legacy_method_profiling.rb +1 -1
  44. data/lib/appoptics_apm/ruby.rb +1 -1
  45. data/lib/appoptics_apm/sdk/custom_metrics.rb +1 -1
  46. data/lib/appoptics_apm/sdk/tracing.rb +3 -0
  47. data/lib/appoptics_apm/support.rb +2 -2
  48. data/lib/appoptics_apm/thread_local.rb +1 -1
  49. data/lib/appoptics_apm/util.rb +4 -4
  50. data/lib/appoptics_apm/version.rb +1 -1
  51. data/lib/oboe/backward_compatibility.rb +3 -3
  52. data/lib/rails/generators/appoptics_apm/templates/appoptics_apm_initializer.rb +11 -4
  53. metadata +2 -4
  54. data/lib/appoptics_apm/frameworks/padrino/templates.rb +0 -58
  55. data/lib/appoptics_apm/frameworks/sinatra/templates.rb +0 -56
@@ -18,15 +18,12 @@ module AppOpticsAPM
18
18
  report_kvs[:RemoteURL] = @uri
19
19
  report_kvs[:HTTPMethod] = args[0]
20
20
  report_kvs[:Blacklisted] = true if blacklisted
21
-
22
- if AppOpticsAPM::Config[:em_http_request][:collect_backtraces]
23
- report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace
24
- end
21
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:em_http_request][:collect_backtraces]
25
22
  rescue => e
26
23
  AppOpticsAPM.logger.debug "[appoptics_apm/debug] em-http-request KV error: #{e.inspect}"
27
24
  end
28
25
 
29
- ::AppOpticsAPM::API.log_entry('em-http-request', report_kvs)
26
+ context = AppOpticsAPM::API.log_entry('em-http-request', report_kvs)
30
27
  end
31
28
  client = setup_request_without_appoptics(*args, &block)
32
29
  client.req.headers['X-Trace'] = context unless blacklisted
@@ -70,17 +67,17 @@ module AppOpticsAPM
70
67
 
71
68
  end
72
69
  ensure
73
- ::AppOpticsAPM::API.log_exit(:'em-http-request', report_kvs)
70
+ AppOpticsAPM::API.log_exit(:'em-http-request', report_kvs)
74
71
  end
75
72
  end
76
73
  end
77
74
  end
78
75
  end
79
76
 
80
- if defined?(::EventMachine::HttpConnection) && defined?(::EventMachine::HttpClient) && AppOpticsAPM::Config[:em_http_request][:enabled]
77
+ if defined?(EventMachine::HttpConnection) && defined?(EventMachine::HttpClient) && AppOpticsAPM::Config[:em_http_request][:enabled]
81
78
  AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting em-http-request' if AppOpticsAPM::Config[:verbose]
82
79
 
83
- class ::EventMachine::HttpConnection
80
+ class EventMachine::HttpConnection
84
81
  include AppOpticsAPM::Inst::EventMachine::HttpConnection
85
82
 
86
83
  if method_defined?(:setup_request)
@@ -91,7 +88,7 @@ if defined?(::EventMachine::HttpConnection) && defined?(::EventMachine::HttpClie
91
88
  end
92
89
  end
93
90
 
94
- class ::EventMachine::HttpClient
91
+ class EventMachine::HttpClient
95
92
  include AppOpticsAPM::Inst::EventMachine::HttpClient
96
93
 
97
94
  if method_defined?(:parse_response_header)
@@ -5,8 +5,8 @@ module AppOpticsAPM
5
5
  module Inst
6
6
  module ExconConnection
7
7
  def self.included(klass)
8
- ::AppOpticsAPM::Util.method_alias(klass, :request, ::Excon::Connection)
9
- ::AppOpticsAPM::Util.method_alias(klass, :requests, ::Excon::Connection)
8
+ AppOpticsAPM::Util.method_alias(klass, :request, ::Excon::Connection)
9
+ AppOpticsAPM::Util.method_alias(klass, :requests, ::Excon::Connection)
10
10
  end
11
11
 
12
12
  private
@@ -33,18 +33,17 @@ module AppOpticsAPM
33
33
  if params.is_a?(Array)
34
34
  methods = []
35
35
  params.each do |p|
36
- methods << ::AppOpticsAPM::Util.upcase(p[:method])
36
+ methods << AppOpticsAPM::Util.upcase(p[:method])
37
37
  end
38
38
  kvs[:HTTPMethods] = methods.join(',')[0..1024]
39
39
  kvs[:Pipeline] = true
40
40
  else
41
- kvs[:HTTPMethod] = ::AppOpticsAPM::Util.upcase(params[:method])
41
+ kvs[:HTTPMethod] = AppOpticsAPM::Util.upcase(params[:method])
42
42
  end
43
- kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:excon][:collect_backtraces]
44
43
  kvs
45
44
  rescue => e
46
45
  AppOpticsAPM.logger.debug "[appoptics_apm/debug] Error capturing excon KVs: #{e.message}"
47
- AppOpticsAPM.logger.debug e.backtrace.join('\n') if ::AppOpticsAPM::Config[:verbose]
46
+ AppOpticsAPM.logger.debug e.backtrace.join('\n') if AppOpticsAPM::Config[:verbose]
48
47
  ensure
49
48
  return kvs
50
49
  end
@@ -55,6 +54,7 @@ module AppOpticsAPM
55
54
  responses = nil
56
55
  kvs = appoptics_collect(pipeline_params)
57
56
  AppOpticsAPM::API.trace(:excon, kvs) do
57
+ kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:excon][:collect_backtraces]
58
58
  responses = requests_without_appoptics(pipeline_params)
59
59
  kvs[:HTTPStatuses] = responses.map { |r| r.status }.join(',')
60
60
  end
@@ -111,6 +111,7 @@ module AppOpticsAPM
111
111
  AppOpticsAPM::API.log_exception(:excon, e)
112
112
  raise e
113
113
  ensure
114
+ kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:excon][:collect_backtraces]
114
115
  AppOpticsAPM::API.log_exit(:excon, kvs) unless params[:pipeline]
115
116
  end
116
117
  end
@@ -118,7 +119,7 @@ module AppOpticsAPM
118
119
  end
119
120
  end
120
121
 
121
- if AppOpticsAPM::Config[:excon][:enabled] && defined?(::Excon)
122
- ::AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting excon' if AppOpticsAPM::Config[:verbose]
123
- ::AppOpticsAPM::Util.send_include(::Excon::Connection, ::AppOpticsAPM::Inst::ExconConnection)
122
+ if AppOpticsAPM::Config[:excon][:enabled] && defined?(Excon)
123
+ AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting excon' if AppOpticsAPM::Config[:verbose]
124
+ AppOpticsAPM::Util.send_include(Excon::Connection, AppOpticsAPM::Inst::ExconConnection)
124
125
  end
@@ -5,7 +5,7 @@ module AppOpticsAPM
5
5
  module Inst
6
6
  module FaradayConnection
7
7
  def self.included(klass)
8
- ::AppOpticsAPM::Util.method_alias(klass, :run_request, ::Faraday::Connection)
8
+ AppOpticsAPM::Util.method_alias(klass, :run_request, ::Faraday::Connection)
9
9
  end
10
10
 
11
11
  def run_request_with_appoptics(method, url, body, headers, &block)
@@ -86,11 +86,9 @@ module AppOpticsAPM
86
86
  end
87
87
  end
88
88
 
89
- if AppOpticsAPM::Config[:faraday][:enabled]
90
- if defined?(::Faraday)
91
- AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting faraday' if AppOpticsAPM::Config[:verbose]
92
- ::AppOpticsAPM::Util.send_include(::Faraday::Connection, ::AppOpticsAPM::Inst::FaradayConnection)
93
- APPOPTICS_INSTR_ADAPTERS = ["Faraday::Adapter::NetHttp", "Faraday::Adapter::Excon", "Faraday::Adapter::Typhoeus"]
94
- APPOPTICS_INSTR_ADAPTERS << "Faraday::Adapter::HTTPClient" if defined?Faraday::Adapter::HTTPClient
95
- end
89
+ if defined?(Faraday) && AppOpticsAPM::Config[:faraday][:enabled]
90
+ AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting faraday' if AppOpticsAPM::Config[:verbose]
91
+ AppOpticsAPM::Util.send_include(Faraday::Connection, AppOpticsAPM::Inst::FaradayConnection)
92
+ APPOPTICS_INSTR_ADAPTERS = ["Faraday::Adapter::NetHttp", "Faraday::Adapter::Excon", "Faraday::Adapter::Typhoeus"]
93
+ APPOPTICS_INSTR_ADAPTERS << "Faraday::Adapter::HTTPClient" if defined?Faraday::Adapter::HTTPClient
96
94
  end
@@ -11,10 +11,10 @@ module AppOpticsAPM
11
11
  end
12
12
 
13
13
  def self.included(klass)
14
- ::AppOpticsAPM::Util.method_alias(klass, :request_response, ::GRPC::ActiveCall)
15
- ::AppOpticsAPM::Util.method_alias(klass, :client_streamer, ::GRPC::ActiveCall)
16
- ::AppOpticsAPM::Util.method_alias(klass, :server_streamer, ::GRPC::ActiveCall)
17
- ::AppOpticsAPM::Util.method_alias(klass, :bidi_streamer, ::GRPC::ActiveCall)
14
+ AppOpticsAPM::Util.method_alias(klass, :request_response, ::GRPC::ActiveCall)
15
+ AppOpticsAPM::Util.method_alias(klass, :client_streamer, ::GRPC::ActiveCall)
16
+ AppOpticsAPM::Util.method_alias(klass, :server_streamer, ::GRPC::ActiveCall)
17
+ AppOpticsAPM::Util.method_alias(klass, :bidi_streamer, ::GRPC::ActiveCall)
18
18
  end
19
19
 
20
20
  def grpc_tags(method_type, method)
@@ -23,7 +23,6 @@ module AppOpticsAPM
23
23
  'GRPCMethodType' => method_type,
24
24
  'IsService' => 'True'
25
25
  }
26
- tags['Backtrace'] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:grpc_client][:collect_backtraces]
27
26
  tags
28
27
  end
29
28
 
@@ -127,7 +126,7 @@ module AppOpticsAPM
127
126
  def exit_tags(tags)
128
127
  # we need to translate the status.code, it is not the status.details we want, they are not matching 1:1
129
128
  tags['GRPCStatus'] ||= @call.status ? StatusCodes[@call.status.code].to_s : 'UNKNOWN'
130
- tags.delete('Backtrace')
129
+ tags['Backtrace'] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:grpc_client][:collect_backtraces]
131
130
  tags
132
131
  end
133
132
  end
@@ -135,11 +134,11 @@ module AppOpticsAPM
135
134
  end
136
135
  end
137
136
 
138
- if defined?(::GRPC) && AppOpticsAPM::Config[:grpc_client][:enabled]
137
+ if defined?(GRPC) && AppOpticsAPM::Config[:grpc_client][:enabled]
139
138
  AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting GRPC' if AppOpticsAPM::Config[:verbose]
140
139
 
141
140
  # Client side is instrumented in ActiveCall and ClientStub
142
- ::AppOpticsAPM::Util.send_include(::GRPC::ActiveCall, ::AppOpticsAPM::GRPC::ActiveCall)
141
+ AppOpticsAPM::Util.send_include(GRPC::ActiveCall, AppOpticsAPM::GRPC::ActiveCall)
143
142
 
144
143
  GRPC_ClientStub_ops = [:request_response, :client_streamer, :server_streamer, :bidi_streamer]
145
144
  module GRPC
@@ -155,7 +154,7 @@ if defined?(::GRPC) && AppOpticsAPM::Config[:grpc_client][:enabled]
155
154
  credentials: credentials, metadata: metadata, &blk)
156
155
  end
157
156
 
158
- ::AppOpticsAPM::Util.method_alias(::GRPC::ClientStub, m)
157
+ AppOpticsAPM::Util.method_alias(GRPC::ClientStub, m)
159
158
  end
160
159
 
161
160
  end
@@ -5,9 +5,9 @@ module AppOpticsAPM
5
5
  module Inst
6
6
  module HTTPClient
7
7
  def self.included(klass)
8
- ::AppOpticsAPM::Util.method_alias(klass, :do_request, ::HTTPClient)
9
- ::AppOpticsAPM::Util.method_alias(klass, :do_request_async, ::HTTPClient)
10
- ::AppOpticsAPM::Util.method_alias(klass, :do_get_stream, ::HTTPClient)
8
+ AppOpticsAPM::Util.method_alias(klass, :do_request, ::HTTPClient)
9
+ AppOpticsAPM::Util.method_alias(klass, :do_request_async, ::HTTPClient)
10
+ AppOpticsAPM::Util.method_alias(klass, :do_get_stream, ::HTTPClient)
11
11
  end
12
12
 
13
13
  def appoptics_collect(method, uri, query = nil)
@@ -28,12 +28,11 @@ module AppOpticsAPM
28
28
  kvs[:RemoteURL] = uri.to_s.split('?').first
29
29
  end
30
30
 
31
- kvs[:HTTPMethod] = ::AppOpticsAPM::Util.upcase(method)
32
- kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:httpclient][:collect_backtraces]
31
+ kvs[:HTTPMethod] = AppOpticsAPM::Util.upcase(method)
33
32
  kvs
34
33
  rescue => e
35
34
  AppOpticsAPM.logger.debug "[appoptics_apm/debug] Error capturing httpclient KVs: #{e.message}"
36
- AppOpticsAPM.logger.debug e.backtrace.join('\n') if ::AppOpticsAPM::Config[:verbose]
35
+ AppOpticsAPM.logger.debug e.backtrace.join('\n') if AppOpticsAPM::Config[:verbose]
37
36
  ensure
38
37
  return kvs
39
38
  end
@@ -57,6 +56,7 @@ module AppOpticsAPM
57
56
 
58
57
  AppOpticsAPM::API.log_entry(:httpclient, kvs)
59
58
  kvs.clear
59
+ kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:httpclient][:collect_backtraces]
60
60
 
61
61
  req_context = add_xtrace_header(header) unless blacklisted
62
62
 
@@ -111,6 +111,7 @@ module AppOpticsAPM
111
111
 
112
112
  AppOpticsAPM::API.log_entry(:httpclient, kvs)
113
113
  kvs.clear
114
+ kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:httpclient][:collect_backtraces]
114
115
 
115
116
  blacklisted ? req.header.delete('X-Trace') : req_context = add_xtrace_header(req.header)
116
117
 
@@ -143,7 +144,6 @@ module AppOpticsAPM
143
144
  AppOpticsAPM::API.log_exception(:httpclient, e)
144
145
  raise e
145
146
  ensure
146
- # AppOpticsAPM::API.log_exit('httpclient', kvs.merge('Async' => 1))
147
147
  AppOpticsAPM::API.log_exit(:httpclient, kvs)
148
148
  end
149
149
  end
@@ -168,7 +168,7 @@ module AppOpticsAPM
168
168
  end
169
169
  end
170
170
 
171
- if AppOpticsAPM::Config[:httpclient][:enabled] && defined?(::HTTPClient)
172
- ::AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting httpclient' if AppOpticsAPM::Config[:verbose]
173
- ::AppOpticsAPM::Util.send_include(::HTTPClient, ::AppOpticsAPM::Inst::HTTPClient)
171
+ if AppOpticsAPM::Config[:httpclient][:enabled] && defined?(HTTPClient)
172
+ AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting httpclient' if AppOpticsAPM::Config[:verbose]
173
+ AppOpticsAPM::Util.send_include(HTTPClient, AppOpticsAPM::Inst::HTTPClient)
174
174
  end
@@ -23,11 +23,9 @@ module AppOpticsAPM
23
23
  AppOpticsAPM::API.trace(:memcache, opts) do
24
24
  result = send("#{m}_without_appoptics", *args)
25
25
 
26
- info_kvs = {}
27
- info_kvs[:KVHit] = memcache_hit?(result) if m == :get && args.length && args[0].class == String
28
- info_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:memcached][:collect_backtraces]
26
+ opts[:KVHit] = memcache_hit?(result) if m == :get && args.length && args[0].class == String
27
+ opts[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:memcached][:collect_backtraces]
29
28
 
30
- AppOpticsAPM::API.log(:memcache, :info, info_kvs) unless info_kvs.empty?
31
29
  result
32
30
  end
33
31
  end
@@ -58,15 +56,13 @@ module AppOpticsAPM
58
56
  layer_kvs[:KVOp] = :get_multi
59
57
 
60
58
  AppOpticsAPM::API.trace(:memcache, layer_kvs || {}, :get_multi) do
61
- info_kvs = {}
62
- info_kvs[:KVKeyCount] = keys.flatten.length
59
+ layer_kvs[:KVKeyCount] = keys.flatten.length
63
60
 
64
61
  values = get_multi_without_appoptics(keys, raw)
65
62
 
66
- info_kvs[:KVHitCount] = values.length
67
- info_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:memcached][:collect_backtraces]
63
+ layer_kvs[:KVHitCount] = values.length
64
+ layer_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:memcached][:collect_backtraces]
68
65
 
69
- AppOpticsAPM::API.log(:memcache, :info, info_kvs)
70
66
  values
71
67
  end
72
68
  else
@@ -77,13 +73,13 @@ module AppOpticsAPM
77
73
  end # module Inst
78
74
  end # module AppOpticsAPM
79
75
 
80
- if defined?(::Memcached) && AppOpticsAPM::Config[:memcached][:enabled]
81
- ::Memcached.class_eval do
76
+ if defined?(Memcached) && AppOpticsAPM::Config[:memcached][:enabled]
77
+ Memcached.class_eval do
82
78
  include AppOpticsAPM::Inst::Memcached
83
79
  end
84
80
 
85
- if defined?(::Memcached::Rails)
86
- ::Memcached::Rails.class_eval do
81
+ if defined?(Memcached::Rails)
82
+ Memcached::Rails.class_eval do
87
83
  include AppOpticsAPM::Inst::MemcachedRails
88
84
  end
89
85
  end
@@ -22,11 +22,12 @@ module AppOpticsAPM
22
22
  end
23
23
  end
24
24
 
25
- if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && AppOpticsAPM::Config[:mongo][:enabled]
25
+ # TODO find out if we still need to support mongo < '2.0.0', we don't run tests for it. 1.12.5 was released Dec 2015
26
+ if defined?(Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && AppOpticsAPM::Config[:mongo][:enabled]
26
27
  AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting mongo' if AppOpticsAPM::Config[:verbose]
27
28
 
28
- if defined?(::Mongo::DB)
29
- module ::Mongo
29
+ if defined?(Mongo::DB)
30
+ module Mongo
30
31
  class DB
31
32
  include AppOpticsAPM::Inst::Mongo
32
33
 
@@ -55,12 +56,12 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
55
56
  report_kvs[:New_Collection_Name] = args[0] if m == :create_collection
56
57
  report_kvs[:Collection] = args[0] if m == :drop_collection
57
58
 
58
- report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
59
59
  rescue => e
60
60
  AppOpticsAPM.logger.debug "[appoptics_apm/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if AppOpticsAPM::Config[:verbose]
61
61
  end
62
62
 
63
63
  AppOpticsAPM::API.trace(:mongo, report_kvs) do
64
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
64
65
  send("#{m}_without_appoptics", *args)
65
66
  end
66
67
  end
@@ -72,8 +73,8 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
72
73
  end
73
74
  end
74
75
 
75
- if defined?(::Mongo::Cursor)
76
- module ::Mongo
76
+ if defined?(Mongo::Cursor)
77
+ module Mongo
77
78
  class Cursor
78
79
  include AppOpticsAPM::Inst::Mongo
79
80
 
@@ -103,6 +104,7 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
103
104
  end
104
105
 
105
106
  AppOpticsAPM::API.trace(:mongo, report_kvs) do
107
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
106
108
  send("#{m}_without_appoptics", *args)
107
109
  end
108
110
  end
@@ -114,8 +116,8 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
114
116
  end
115
117
  end
116
118
 
117
- if defined?(::Mongo::Collection)
118
- module ::Mongo
119
+ if defined?(Mongo::Collection)
120
+ module Mongo
119
121
  class Collection
120
122
  include AppOpticsAPM::Inst::Mongo
121
123
 
@@ -128,8 +130,6 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
128
130
  kvs[:RemotePort] = @db.connection.port
129
131
  kvs[:Collection] = @name
130
132
 
131
- kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
132
-
133
133
  kvs[:QueryOp] = m
134
134
  kvs[:Query] = args[0].to_json if args && !args.empty? && args[0].class == Hash
135
135
  rescue StandardError => e
@@ -168,6 +168,7 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
168
168
  end
169
169
 
170
170
  AppOpticsAPM::API.trace(:mongo, report_kvs) do
171
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
171
172
  send("#{m}_without_appoptics", *args)
172
173
  end
173
174
  end
@@ -179,6 +180,7 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
179
180
  # Instrument Collection query operations
180
181
  AppOpticsAPM::Inst::Mongo::COLL_QUERY_OPS.reject { |m| !method_defined?(m) }.each do |m|
181
182
  define_method("#{m}_with_appoptics") do |*args, &blk|
183
+ report_kvs = {}
182
184
  begin
183
185
  report_kvs = appoptics_collect(m, args)
184
186
  args_length = args.length
@@ -207,6 +209,7 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
207
209
  end
208
210
 
209
211
  AppOpticsAPM::API.trace(:mongo, report_kvs) do
212
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
210
213
  send("#{m}_without_appoptics", *args, &blk)
211
214
  end
212
215
  end
@@ -229,6 +232,7 @@ if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s < '2.0.0') && Ap
229
232
  end
230
233
 
231
234
  AppOpticsAPM::API.trace(:mongo, report_kvs) do
235
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:mongo][:collect_backtraces]
232
236
  send("#{m}_without_appoptics", *args)
233
237
  end
234
238
  end
@@ -4,8 +4,8 @@
4
4
  require 'json'
5
5
 
6
6
  if AppOpticsAPM::Config[:mongo][:enabled]
7
- if defined?(::Mongo) && (Gem.loaded_specs['mongo'].version.to_s >= '2.0.0')
8
- ::AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting mongo' if AppOpticsAPM::Config[:verbose]
7
+ if defined?(Mongo) && (Gem.loaded_specs['mongo'].version.to_s >= '2.0.0')
8
+ AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting mongo' if AppOpticsAPM::Config[:verbose]
9
9
 
10
10
  # Collection Related Operations
11
11
  COLL_OTHER_OPS = [:create, :drop, :insert_one, :insert_many, :bulk_write, :map_reduce].freeze
@@ -81,7 +81,7 @@ if AppOpticsAPM::Config[:mongo][:enabled]
81
81
  AppOpticsAPM::API.log_exit(:mongo) unless mongo_skipped
82
82
  end
83
83
  end
84
- ::AppOpticsAPM::Util.method_alias(Mongo::Collection, m)
84
+ AppOpticsAPM::Util.method_alias(Mongo::Collection, m)
85
85
  end
86
86
  end
87
87
  end
@@ -158,7 +158,7 @@ if AppOpticsAPM::Config[:mongo][:enabled]
158
158
  AppOpticsAPM::API.log_exit(:mongo) unless mongo_skipped
159
159
  end
160
160
  end
161
- ::AppOpticsAPM::Util.method_alias(Mongo::Collection::View, m)
161
+ AppOpticsAPM::Util.method_alias(Mongo::Collection::View, m)
162
162
  end
163
163
  end
164
164
  end
@@ -216,7 +216,7 @@ if AppOpticsAPM::Config[:mongo][:enabled]
216
216
  AppOpticsAPM::API.log_exit(:mongo) unless mongo_skipped
217
217
  end
218
218
  end
219
- ::AppOpticsAPM::Util.method_alias(Mongo::Index::View, m)
219
+ AppOpticsAPM::Util.method_alias(Mongo::Index::View, m)
220
220
  end
221
221
  end
222
222
  end
@@ -47,7 +47,7 @@ module AppOpticsAPM
47
47
 
48
48
  def self.included(klass)
49
49
  AppOpticsAPM::Inst::Moped::DB_OPS.each do |m|
50
- ::AppOpticsAPM::Util.method_alias(klass, m)
50
+ AppOpticsAPM::Util.method_alias(klass, m)
51
51
  end
52
52
  end
53
53
 
@@ -102,7 +102,7 @@ module AppOpticsAPM
102
102
 
103
103
  def self.included(klass)
104
104
  AppOpticsAPM::Inst::Moped::INDEX_OPS.each do |m|
105
- ::AppOpticsAPM::Util.method_alias(klass, m)
105
+ AppOpticsAPM::Util.method_alias(klass, m)
106
106
  end
107
107
  end
108
108
 
@@ -170,7 +170,7 @@ module AppOpticsAPM
170
170
 
171
171
  def self.included(klass)
172
172
  AppOpticsAPM::Inst::Moped::QUERY_OPS.each do |m|
173
- ::AppOpticsAPM::Util.method_alias(klass, m)
173
+ AppOpticsAPM::Util.method_alias(klass, m)
174
174
  end
175
175
  end
176
176
 
@@ -375,7 +375,7 @@ module AppOpticsAPM
375
375
 
376
376
  def self.included(klass)
377
377
  AppOpticsAPM::Inst::Moped::COLLECTION_OPS.each do |m|
378
- ::AppOpticsAPM::Util.method_alias(klass, m)
378
+ AppOpticsAPM::Util.method_alias(klass, m)
379
379
  end
380
380
  end
381
381
 
@@ -457,10 +457,10 @@ module AppOpticsAPM
457
457
  end
458
458
  end
459
459
 
460
- if defined?(::Moped) && AppOpticsAPM::Config[:moped][:enabled]
461
- ::AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting moped' if AppOpticsAPM::Config[:verbose]
462
- ::AppOpticsAPM::Util.send_include(::Moped::Database, ::AppOpticsAPM::Inst::MopedDatabase)
463
- ::AppOpticsAPM::Util.send_include(::Moped::Collection, ::AppOpticsAPM::Inst::MopedCollection)
464
- ::AppOpticsAPM::Util.send_include(::Moped::Query, ::AppOpticsAPM::Inst::MopedQuery)
465
- ::AppOpticsAPM::Util.send_include(::Moped::Indexes, ::AppOpticsAPM::Inst::MopedIndexes)
460
+ if defined?(Moped) && AppOpticsAPM::Config[:moped][:enabled]
461
+ AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting moped' if AppOpticsAPM::Config[:verbose]
462
+ AppOpticsAPM::Util.send_include(Moped::Database, AppOpticsAPM::Inst::MopedDatabase)
463
+ AppOpticsAPM::Util.send_include(Moped::Collection, AppOpticsAPM::Inst::MopedCollection)
464
+ AppOpticsAPM::Util.send_include(Moped::Query, AppOpticsAPM::Inst::MopedQuery)
465
+ AppOpticsAPM::Util.send_include(Moped::Indexes, AppOpticsAPM::Inst::MopedIndexes)
466
466
  end