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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/examples/carrying_context.rb +1 -1
- data/lib/appoptics_apm/api/logging.rb +1 -1
- data/lib/appoptics_apm/api/profiling.rb +2 -2
- data/lib/appoptics_apm/api/tracing.rb +0 -1
- data/lib/appoptics_apm/base.rb +1 -1
- data/lib/appoptics_apm/config.rb +2 -2
- data/lib/appoptics_apm/frameworks/grape.rb +13 -12
- data/lib/appoptics_apm/frameworks/padrino.rb +67 -14
- data/lib/appoptics_apm/frameworks/rails/inst/action_controller.rb +3 -3
- data/lib/appoptics_apm/frameworks/rails/inst/action_controller3.rb +4 -7
- data/lib/appoptics_apm/frameworks/rails/inst/action_controller4.rb +1 -1
- data/lib/appoptics_apm/frameworks/rails/inst/action_controller5.rb +1 -1
- data/lib/appoptics_apm/frameworks/rails/inst/action_controller_api.rb +2 -2
- data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/mysql.rb +14 -14
- data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/mysql2.rb +9 -9
- data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/postgresql.rb +8 -8
- data/lib/appoptics_apm/frameworks/sinatra.rb +62 -11
- data/lib/appoptics_apm/inst/bunny-client.rb +12 -10
- data/lib/appoptics_apm/inst/bunny-consumer.rb +54 -56
- data/lib/appoptics_apm/inst/curb.rb +11 -11
- data/lib/appoptics_apm/inst/dalli.rb +3 -4
- data/lib/appoptics_apm/inst/delayed_job.rb +7 -7
- data/lib/appoptics_apm/inst/em-http-request.rb +6 -9
- data/lib/appoptics_apm/inst/excon.rb +10 -9
- data/lib/appoptics_apm/inst/faraday.rb +6 -8
- data/lib/appoptics_apm/inst/grpc_client.rb +8 -9
- data/lib/appoptics_apm/inst/httpclient.rb +10 -10
- data/lib/appoptics_apm/inst/memcached.rb +9 -13
- data/lib/appoptics_apm/inst/mongo.rb +14 -10
- data/lib/appoptics_apm/inst/mongo2.rb +5 -5
- data/lib/appoptics_apm/inst/moped.rb +10 -10
- data/lib/appoptics_apm/inst/rack.rb +11 -14
- data/lib/appoptics_apm/inst/redis.rb +10 -10
- data/lib/appoptics_apm/inst/resque.rb +9 -9
- data/lib/appoptics_apm/inst/rest-client.rb +4 -6
- data/lib/appoptics_apm/inst/sequel.rb +10 -10
- data/lib/appoptics_apm/inst/sidekiq-client.rb +5 -5
- data/lib/appoptics_apm/inst/sidekiq-worker.rb +5 -5
- data/lib/appoptics_apm/inst/twitter-cassandra.rb +3 -3
- data/lib/appoptics_apm/inst/typhoeus.rb +8 -9
- data/lib/appoptics_apm/legacy_method_profiling.rb +1 -1
- data/lib/appoptics_apm/ruby.rb +1 -1
- data/lib/appoptics_apm/sdk/custom_metrics.rb +1 -1
- data/lib/appoptics_apm/sdk/tracing.rb +3 -0
- data/lib/appoptics_apm/support.rb +2 -2
- data/lib/appoptics_apm/thread_local.rb +1 -1
- data/lib/appoptics_apm/util.rb +4 -4
- data/lib/appoptics_apm/version.rb +1 -1
- data/lib/oboe/backward_compatibility.rb +3 -3
- data/lib/rails/generators/appoptics_apm/templates/appoptics_apm_initializer.rb +11 -4
- metadata +2 -4
- data/lib/appoptics_apm/frameworks/padrino/templates.rb +0 -58
- 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
|
-
|
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
|
-
|
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?(
|
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
|
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
|
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
|
-
|
9
|
-
|
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 <<
|
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] =
|
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
|
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?(
|
122
|
-
|
123
|
-
|
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
|
-
|
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
|
91
|
-
|
92
|
-
|
93
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
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?(
|
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
|
-
|
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
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
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] =
|
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
|
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?(
|
172
|
-
|
173
|
-
|
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
|
-
|
27
|
-
|
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
|
-
|
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
|
-
|
67
|
-
|
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?(
|
81
|
-
|
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?(
|
86
|
-
|
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
|
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?(
|
29
|
-
module
|
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?(
|
76
|
-
module
|
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?(
|
118
|
-
module
|
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?(
|
8
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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?(
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
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
|