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
@@ -50,17 +50,19 @@ if AppOpticsAPM.loaded
|
|
50
50
|
report_kvs = {}
|
51
51
|
|
52
52
|
begin
|
53
|
-
report_kvs[:'HTTP-Host']
|
53
|
+
report_kvs[:'HTTP-Host'] = req.host
|
54
54
|
report_kvs[:Port] = req.port
|
55
55
|
report_kvs[:Proto] = req.scheme
|
56
|
-
report_kvs[:Method]
|
56
|
+
report_kvs[:Method] = req.request_method
|
57
57
|
report_kvs[:AJAX] = true if req.xhr?
|
58
58
|
report_kvs[:ClientIP] = req.ip
|
59
59
|
|
60
60
|
if AppOpticsAPM::Config[:rack][:log_args]
|
61
|
-
report_kvs[:'Query-String']
|
61
|
+
report_kvs[:'Query-String'] = ::CGI.unescape(req.query_string) unless req.query_string.empty?
|
62
62
|
end
|
63
63
|
|
64
|
+
report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:rack][:collect_backtraces]
|
65
|
+
|
64
66
|
# Report any request queue'ing headers. Report as 'Request-Start' or the summed Queue-Time
|
65
67
|
report_kvs[:'Request-Start'] = env['HTTP_X_REQUEST_START'] if env.key?('HTTP_X_REQUEST_START')
|
66
68
|
report_kvs[:'Request-Start'] = env['HTTP_X_QUEUE_START'] if env.key?('HTTP_X_QUEUE_START')
|
@@ -71,7 +73,7 @@ if AppOpticsAPM.loaded
|
|
71
73
|
report_kvs[:'Forwarded-Proto'] = env['HTTP_X_FORWARDED_PROTO'] if env.key?('HTTP_X_FORWARDED_PROTO')
|
72
74
|
report_kvs[:'Forwarded-Port'] = env['HTTP_X_FORWARDED_PORT'] if env.key?('HTTP_X_FORWARDED_PORT')
|
73
75
|
|
74
|
-
report_kvs[:'Ruby.AppOptics.Version'] =
|
76
|
+
report_kvs[:'Ruby.AppOptics.Version'] = AppOpticsAPM::Version::STRING
|
75
77
|
report_kvs[:ProcessID] = Process.pid
|
76
78
|
report_kvs[:ThreadID] = Thread.current.to_s[/0x\w*/]
|
77
79
|
rescue StandardError => e
|
@@ -111,7 +113,7 @@ if AppOpticsAPM.loaded
|
|
111
113
|
req_url = req.url # saving it here because rails3.2 overrides it when there is a 500 error
|
112
114
|
status = 500 # initialize with 500
|
113
115
|
|
114
|
-
report_kvs =
|
116
|
+
report_kvs = collect(req, env)
|
115
117
|
report_kvs[:URL] = AppOpticsAPM::Config[:rack][:log_args] ? ::CGI.unescape(req.fullpath) : ::CGI.unescape(req.path)
|
116
118
|
|
117
119
|
# Check for and validate X-Trace request header to pick up tracing context
|
@@ -125,13 +127,7 @@ if AppOpticsAPM.loaded
|
|
125
127
|
# AppOpticsAPM.has_xtrace_header = xtrace
|
126
128
|
# AppOpticsAPM.is_continued_trace = AppOpticsAPM.has_incoming_context || AppOpticsAPM.has_xtrace_header
|
127
129
|
|
128
|
-
AppOpticsAPM::API.log_start(:rack, xtrace, report_kvs) unless
|
129
|
-
|
130
|
-
# We log an info event with the HTTP KVs found in AppOpticsAPM::Rack.collect
|
131
|
-
# This is done here so in the case of stacks that try/catch/abort
|
132
|
-
# (looking at you Grape) we're sure the KVs get reported now as
|
133
|
-
# this code may not be returned to later.
|
134
|
-
AppOpticsAPM::API.log_info(:rack, collect(req, env))
|
130
|
+
AppOpticsAPM::API.log_start(:rack, xtrace, report_kvs) unless AppOpticsAPM::Util.static_asset?(env['PATH_INFO'])
|
135
131
|
|
136
132
|
status, headers, response = @app.call(env)
|
137
133
|
confirmed_transaction_name = send_metrics(env, req, req_url, start, status)
|
@@ -157,12 +153,13 @@ if AppOpticsAPM.loaded
|
|
157
153
|
|
158
154
|
|
159
155
|
def send_metrics(env, req, req_url, start, status)
|
160
|
-
return if
|
156
|
+
return if AppOpticsAPM::Util.static_asset?(env['PATH_INFO'])
|
161
157
|
|
162
158
|
status = status.to_i
|
163
159
|
error = status.between?(500,599) ? 1 : 0
|
164
160
|
duration =(1000 * 1000 * (Time.now - start)).round(0)
|
165
|
-
|
161
|
+
method = req.request_method
|
162
|
+
AppOpticsAPM::Span.createHttpSpan(transaction_name(env), req_url, domain(req), duration, status, method, error) || ''
|
166
163
|
end
|
167
164
|
|
168
165
|
def domain(req)
|
@@ -59,8 +59,8 @@ module AppOpticsAPM
|
|
59
59
|
def self.included(klass)
|
60
60
|
# We wrap two of the Redis methods to instrument
|
61
61
|
# operations
|
62
|
-
|
63
|
-
|
62
|
+
AppOpticsAPM::Util.method_alias(klass, :call, ::Redis::Client)
|
63
|
+
AppOpticsAPM::Util.method_alias(klass, :call_pipeline, ::Redis::Client)
|
64
64
|
end
|
65
65
|
|
66
66
|
# Given any Redis operation command array, this method
|
@@ -218,17 +218,17 @@ module AppOpticsAPM
|
|
218
218
|
#
|
219
219
|
def call_with_appoptics(command, &block)
|
220
220
|
if AppOpticsAPM.tracing?
|
221
|
-
|
221
|
+
AppOpticsAPM::API.log_entry(:redis, {})
|
222
222
|
|
223
223
|
begin
|
224
224
|
r = call_without_appoptics(command, &block)
|
225
225
|
report_kvs = extract_trace_details(command, r)
|
226
226
|
r
|
227
227
|
rescue StandardError => e
|
228
|
-
|
228
|
+
AppOpticsAPM::API.log_exception(:redis, e)
|
229
229
|
raise
|
230
230
|
ensure
|
231
|
-
|
231
|
+
AppOpticsAPM::API.log_exit(:redis, report_kvs)
|
232
232
|
end
|
233
233
|
|
234
234
|
else
|
@@ -246,17 +246,17 @@ module AppOpticsAPM
|
|
246
246
|
# back on exit (a limitation of the AppOpticsAPM::API.trace
|
247
247
|
# block method) This removes the need for an info
|
248
248
|
# event to send additonal KVs
|
249
|
-
|
249
|
+
AppOpticsAPM::API.log_entry(:redis, {})
|
250
250
|
|
251
251
|
report_kvs = extract_pipeline_details(pipeline)
|
252
252
|
|
253
253
|
begin
|
254
254
|
call_pipeline_without_appoptics(pipeline)
|
255
255
|
rescue StandardError => e
|
256
|
-
|
256
|
+
AppOpticsAPM::API.log_exception(:redis, e)
|
257
257
|
raise
|
258
258
|
ensure
|
259
|
-
|
259
|
+
AppOpticsAPM::API.log_exit(:redis, report_kvs)
|
260
260
|
end
|
261
261
|
else
|
262
262
|
call_pipeline_without_appoptics(pipeline)
|
@@ -268,8 +268,8 @@ module AppOpticsAPM
|
|
268
268
|
end
|
269
269
|
|
270
270
|
if AppOpticsAPM::Config[:redis][:enabled]
|
271
|
-
if defined?(
|
271
|
+
if defined?(Redis) && Gem::Version.new(Redis::VERSION) >= Gem::Version.new('3.0.0')
|
272
272
|
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting redis' if AppOpticsAPM::Config[:verbose]
|
273
|
-
|
273
|
+
AppOpticsAPM::Util.send_include(Redis::Client, AppOpticsAPM::Inst::Redis::Client)
|
274
274
|
end
|
275
275
|
end
|
@@ -9,9 +9,9 @@ module AppOpticsAPM
|
|
9
9
|
module ResqueClient
|
10
10
|
def self.included(klass)
|
11
11
|
klass.send :extend, ::Resque
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
AppOpticsAPM::Util.method_alias(klass, :enqueue, ::Resque)
|
13
|
+
AppOpticsAPM::Util.method_alias(klass, :enqueue_to, ::Resque)
|
14
|
+
AppOpticsAPM::Util.method_alias(klass, :dequeue, ::Resque)
|
15
15
|
end
|
16
16
|
|
17
17
|
def extract_trace_details(op, klass, args)
|
@@ -81,7 +81,7 @@ module AppOpticsAPM
|
|
81
81
|
|
82
82
|
module ResqueWorker
|
83
83
|
def self.included(klass)
|
84
|
-
|
84
|
+
AppOpticsAPM::Util.method_alias(klass, :perform, ::Resque::Worker)
|
85
85
|
end
|
86
86
|
|
87
87
|
def perform_with_appoptics(job)
|
@@ -125,7 +125,7 @@ module AppOpticsAPM
|
|
125
125
|
|
126
126
|
module ResqueJob
|
127
127
|
def self.included(klass)
|
128
|
-
|
128
|
+
AppOpticsAPM::Util.method_alias(klass, :fail, ::Resque::Job)
|
129
129
|
end
|
130
130
|
|
131
131
|
def fail_with_appoptics(exception)
|
@@ -138,13 +138,13 @@ module AppOpticsAPM
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
|
-
if defined?(
|
141
|
+
if defined?(Resque)
|
142
142
|
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting resque' if AppOpticsAPM::Config[:verbose]
|
143
143
|
|
144
|
-
|
145
|
-
|
144
|
+
AppOpticsAPM::Util.send_include(Resque, AppOpticsAPM::Inst::ResqueClient) if AppOpticsAPM::Config[:resqueclient][:enabled]
|
145
|
+
AppOpticsAPM::Util.send_include(Resque::Worker, AppOpticsAPM::Inst::ResqueWorker) if AppOpticsAPM::Config[:resqueworker][:enabled]
|
146
146
|
if AppOpticsAPM::Config[:resqueclient][:enabled] || AppOpticsAPM::Config[:resqueworker][:enabled]
|
147
|
-
|
147
|
+
AppOpticsAPM::Util.send_include(Resque::Job, AppOpticsAPM::Inst::ResqueJob)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
@@ -5,7 +5,7 @@ module AppOpticsAPM
|
|
5
5
|
module Inst
|
6
6
|
module RestClientRequest
|
7
7
|
def self.included(klass)
|
8
|
-
|
8
|
+
AppOpticsAPM::Util.method_alias(klass, :execute, ::RestClient::Request)
|
9
9
|
end
|
10
10
|
|
11
11
|
##
|
@@ -42,9 +42,7 @@ module AppOpticsAPM
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
if AppOpticsAPM::Config[:rest_client][:enabled]
|
46
|
-
if
|
47
|
-
|
48
|
-
::AppOpticsAPM::Util.send_include(::RestClient::Request, ::AppOpticsAPM::Inst::RestClientRequest)
|
49
|
-
end
|
45
|
+
if defined?(RestClient) && AppOpticsAPM::Config[:rest_client][:enabled]
|
46
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting rest-client' if AppOpticsAPM::Config[:verbose]
|
47
|
+
AppOpticsAPM::Util.send_include(RestClient::Request, AppOpticsAPM::Inst::RestClientRequest)
|
50
48
|
end
|
@@ -86,10 +86,10 @@ module AppOpticsAPM
|
|
86
86
|
include AppOpticsAPM::Inst::Sequel
|
87
87
|
|
88
88
|
def self.included(klass)
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
89
|
+
AppOpticsAPM::Util.method_alias(klass, :run, ::Sequel::Database)
|
90
|
+
AppOpticsAPM::Util.method_alias(klass, :execute_ddl, ::Sequel::Database)
|
91
|
+
AppOpticsAPM::Util.method_alias(klass, :execute_dui, ::Sequel::Database)
|
92
|
+
AppOpticsAPM::Util.method_alias(klass, :execute_insert, ::Sequel::Database)
|
93
93
|
end
|
94
94
|
|
95
95
|
def run_with_appoptics(sql, opts = ::Sequel::OPTS)
|
@@ -135,10 +135,10 @@ module AppOpticsAPM
|
|
135
135
|
include AppOpticsAPM::Inst::Sequel
|
136
136
|
|
137
137
|
def self.included(klass)
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
138
|
+
AppOpticsAPM::Util.method_alias(klass, :execute, ::Sequel::Dataset)
|
139
|
+
AppOpticsAPM::Util.method_alias(klass, :execute_ddl, ::Sequel::Dataset)
|
140
|
+
AppOpticsAPM::Util.method_alias(klass, :execute_dui, ::Sequel::Dataset)
|
141
|
+
AppOpticsAPM::Util.method_alias(klass, :execute_insert, ::Sequel::Dataset)
|
142
142
|
end
|
143
143
|
|
144
144
|
def execute_with_appoptics(sql, opts = ::Sequel::OPTS, &block)
|
@@ -172,7 +172,7 @@ if AppOpticsAPM::Config[:sequel][:enabled]
|
|
172
172
|
|
173
173
|
if defined?(::Sequel)
|
174
174
|
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting sequel' if AppOpticsAPM::Config[:verbose]
|
175
|
-
|
176
|
-
|
175
|
+
AppOpticsAPM::Util.send_include(::Sequel::Database, AppOpticsAPM::Inst::SequelDatabase)
|
176
|
+
AppOpticsAPM::Util.send_include(::Sequel::Dataset, AppOpticsAPM::Inst::SequelDataset)
|
177
177
|
end
|
178
178
|
end
|
@@ -43,13 +43,13 @@ module AppOpticsAPM
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
if defined?(
|
47
|
-
|
46
|
+
if defined?(Sidekiq) && AppOpticsAPM::Config[:sidekiqclient][:enabled]
|
47
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting sidekiq client' if AppOpticsAPM::Config[:verbose]
|
48
48
|
|
49
|
-
|
49
|
+
Sidekiq.configure_client do |config|
|
50
50
|
config.client_middleware do |chain|
|
51
|
-
|
52
|
-
chain.add
|
51
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Adding Sidekiq client middleware' if AppOpticsAPM::Config[:verbose]
|
52
|
+
chain.add AppOpticsAPM::SidekiqClient
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -53,13 +53,13 @@ module AppOpticsAPM
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
if defined?(
|
57
|
-
|
56
|
+
if defined?(Sidekiq) && AppOpticsAPM::Config[:sidekiqworker][:enabled]
|
57
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting sidekiq worker' if AppOpticsAPM::Config[:verbose]
|
58
58
|
|
59
|
-
|
59
|
+
Sidekiq.configure_server do |config|
|
60
60
|
config.server_middleware do |chain|
|
61
|
-
|
62
|
-
chain.add
|
61
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Adding Sidekiq worker middleware' if AppOpticsAPM::Config[:verbose]
|
62
|
+
chain.add AppOpticsAPM::SidekiqWorker
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -261,14 +261,14 @@ module AppOpticsAPM
|
|
261
261
|
end
|
262
262
|
|
263
263
|
# There are two main Cassandra clients for Ruby. This one from Twitter
|
264
|
-
# and the other from datastax. This one defined
|
264
|
+
# and the other from datastax. This one defined Cassandra as a class
|
265
265
|
# and datastax defines it as a module. We use this to detect
|
266
266
|
# and differentiate between the client in use.
|
267
267
|
|
268
|
-
if defined?(
|
268
|
+
if defined?(Cassandra) && Cassandra.is_a?(Class) && AppOpticsAPM::Config[:cassandra][:enabled]
|
269
269
|
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting cassandra' if AppOpticsAPM::Config[:verbose]
|
270
270
|
|
271
|
-
class
|
271
|
+
class Cassandra
|
272
272
|
include AppOpticsAPM::Inst::Cassandra
|
273
273
|
|
274
274
|
[:insert, :remove, :count_columns, :get_columns, :multi_get_columns, :get,
|
@@ -7,7 +7,7 @@ module AppOpticsAPM
|
|
7
7
|
module TyphoeusRequestOps
|
8
8
|
|
9
9
|
def self.included(klass)
|
10
|
-
|
10
|
+
AppOpticsAPM::Util.method_alias(klass, :run, ::Typhoeus::Request::Operations)
|
11
11
|
end
|
12
12
|
|
13
13
|
def run_with_appoptics
|
@@ -28,7 +28,7 @@ module AppOpticsAPM
|
|
28
28
|
kvs = {}
|
29
29
|
kvs[:Spec] = 'rsc'
|
30
30
|
kvs[:IsService] = 1
|
31
|
-
kvs[:HTTPMethod] =
|
31
|
+
kvs[:HTTPMethod] = AppOpticsAPM::Util.upcase(options[:method])
|
32
32
|
|
33
33
|
response = run_without_appoptics
|
34
34
|
|
@@ -64,7 +64,7 @@ module AppOpticsAPM
|
|
64
64
|
|
65
65
|
module TyphoeusHydraRunnable
|
66
66
|
def self.included(klass)
|
67
|
-
|
67
|
+
AppOpticsAPM::Util.method_alias(klass, :run, ::Typhoeus::Hydra)
|
68
68
|
end
|
69
69
|
|
70
70
|
def run_with_appoptics
|
@@ -82,6 +82,7 @@ module AppOpticsAPM
|
|
82
82
|
kvs[:queued_requests] = queued_requests.count
|
83
83
|
kvs[:max_concurrency] = max_concurrency
|
84
84
|
kvs[:Async] = 1
|
85
|
+
kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:typhoeus][:collect_backtraces]
|
85
86
|
|
86
87
|
# FIXME: Until we figure out a strategy to deal with libcurl internal
|
87
88
|
# threading and Ethon's use of easy handles, here we just do a simple
|
@@ -100,10 +101,8 @@ module AppOpticsAPM
|
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
103
|
-
if AppOpticsAPM::Config[:typhoeus][:enabled]
|
104
|
-
if
|
105
|
-
|
106
|
-
|
107
|
-
::AppOpticsAPM::Util.send_include(::Typhoeus::Hydra, ::AppOpticsAPM::Inst::TyphoeusHydraRunnable)
|
108
|
-
end
|
104
|
+
if defined?(Typhoeus) && AppOpticsAPM::Config[:typhoeus][:enabled]
|
105
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting typhoeus' if AppOpticsAPM::Config[:verbose]
|
106
|
+
AppOpticsAPM::Util.send_include(Typhoeus::Request::Operations, AppOpticsAPM::Inst::TyphoeusRequestOps)
|
107
|
+
AppOpticsAPM::Util.send_include(Typhoeus::Hydra, AppOpticsAPM::Inst::TyphoeusHydraRunnable)
|
109
108
|
end
|
@@ -51,7 +51,7 @@ module AppOpticsAPMMethodProfiling
|
|
51
51
|
entry_kvs['File'] = '#{file}'
|
52
52
|
entry_kvs['LineNumber'] = '#{line}'
|
53
53
|
entry_kvs['Args'] = AppOpticsAPM::API.pps(*args) if #{store_args}
|
54
|
-
entry_kvs.merge!(
|
54
|
+
entry_kvs.merge!(AppOpticsAPM::API.get_class_name(self))
|
55
55
|
|
56
56
|
AppOpticsAPM::API.log(nil, 'profile_entry', entry_kvs)
|
57
57
|
|
data/lib/appoptics_apm/ruby.rb
CHANGED
@@ -56,7 +56,7 @@ module AppOpticsAPM
|
|
56
56
|
# start = Time.now
|
57
57
|
# yield # yield to where work is done
|
58
58
|
# duration = Time.now - start
|
59
|
-
# AppOpticsAPM::SDK.
|
59
|
+
# AppOpticsAPM::SDK.summary_metric(name, duration, 1, false, tags)
|
60
60
|
# end
|
61
61
|
# end
|
62
62
|
#
|
@@ -94,6 +94,7 @@ module AppOpticsAPM
|
|
94
94
|
opts.delete('TransactionName')
|
95
95
|
|
96
96
|
AppOpticsAPM::API.log_entry(span, opts, protect_op)
|
97
|
+
opts[:Backtrace] && opts.delete(:Backtrace) # to avoid sending backtrace twice (faster to check presence here)
|
97
98
|
begin
|
98
99
|
yield
|
99
100
|
rescue Exception => e
|
@@ -182,6 +183,8 @@ module AppOpticsAPM
|
|
182
183
|
AppOpticsAPM.transaction_name = opts.delete('TransactionName') || opts.delete(:TransactionName)
|
183
184
|
|
184
185
|
AppOpticsAPM::API.log_start(span, xtrace, opts)
|
186
|
+
opts[:Backtrace] && opts.delete(:Backtrace) # to avoid sending backtrace twice (faster to check presence here)
|
187
|
+
|
185
188
|
# AppOpticsAPM::Event.startTrace creates an Event without an Edge
|
186
189
|
exit_evt = AppOpticsAPM::Event.startTrace(AppOpticsAPM::Context.get)
|
187
190
|
result = begin
|
@@ -57,8 +57,8 @@ module AppOpticsAPM
|
|
57
57
|
using_rails = defined?(::Rails)
|
58
58
|
AppOpticsAPM.logger.warn "Using Rails?: #{yesno(using_rails)}"
|
59
59
|
if using_rails
|
60
|
-
AppOpticsAPM.logger.warn "AppOpticsAPM::Rails loaded?: #{yesno(defined?(
|
61
|
-
if defined?(
|
60
|
+
AppOpticsAPM.logger.warn "AppOpticsAPM::Rails loaded?: #{yesno(defined?(AppOpticsAPM::Rails))}"
|
61
|
+
if defined?(AppOpticsAPM::Rack)
|
62
62
|
AppOpticsAPM.logger.warn "AppOpticsAPM::Rack middleware loaded?: #{yesno(::Rails.configuration.middleware.include? AppOpticsAPM::Rack)}"
|
63
63
|
end
|
64
64
|
end
|
data/lib/appoptics_apm/util.rb
CHANGED
@@ -170,7 +170,7 @@ module AppOpticsAPM
|
|
170
170
|
return sql unless AppOpticsAPM::Config[:sanitize_sql]
|
171
171
|
|
172
172
|
regexp = Regexp.new(AppOpticsAPM::Config[:sanitize_sql_regexp], AppOpticsAPM::Config[:sanitize_sql_opts])
|
173
|
-
sql.gsub(regexp, '?')
|
173
|
+
sql.gsub(/\\\'/,'').gsub(regexp, '?')
|
174
174
|
end
|
175
175
|
|
176
176
|
##
|
@@ -265,12 +265,12 @@ module AppOpticsAPM
|
|
265
265
|
platform_info['Force'] = true
|
266
266
|
platform_info['Ruby.Platform.Version'] = RUBY_PLATFORM
|
267
267
|
platform_info['Ruby.Version'] = RUBY_VERSION
|
268
|
-
platform_info['Ruby.AppOptics.Version'] =
|
268
|
+
platform_info['Ruby.AppOptics.Version'] = AppOpticsAPM::Version::STRING
|
269
269
|
|
270
270
|
clib_version_file = File.join(Gem::Specification.find_by_name('appoptics_apm').gem_dir, 'ext', 'oboe_metal', 'src', 'VERSION')
|
271
271
|
platform_info['Ruby.clib.Version'] = File.read(clib_version_file).chomp
|
272
|
-
platform_info['RubyHeroku.AppOpticsAPM.Version'] =
|
273
|
-
platform_info['Ruby.TraceMode.Version'] =
|
272
|
+
platform_info['RubyHeroku.AppOpticsAPM.Version'] = AppOpticsAPMHeroku::Version::STRING if defined?(AppOpticsAPMHeroku)
|
273
|
+
platform_info['Ruby.TraceMode.Version'] = AppOpticsAPM::Config[:tracing_mode]
|
274
274
|
|
275
275
|
# Collect up the loaded gems
|
276
276
|
if defined?(Gem) && Gem.respond_to?(:loaded_specs)
|