appoptics_apm 4.2.7 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +10 -10
- data/Rakefile +1 -1
- data/appoptics_apm.gemspec +1 -0
- data/ext/oboe_metal/extconf.rb +1 -0
- data/ext/oboe_metal/src/VERSION +1 -1
- data/lib/appoptics_apm/api/logging.rb +1 -0
- data/lib/appoptics_apm/api/metrics.rb +13 -6
- data/lib/appoptics_apm/config.rb +1 -1
- data/lib/appoptics_apm/frameworks/grape.rb +1 -1
- data/lib/appoptics_apm/inst/grpc_client.rb +161 -0
- data/lib/appoptics_apm/inst/rack.rb +1 -1
- data/lib/appoptics_apm/inst/typhoeus.rb +1 -1
- data/lib/appoptics_apm/sdk.rb +19 -10
- data/lib/appoptics_apm/util.rb +3 -0
- data/lib/appoptics_apm/version.rb +2 -2
- data/lib/rails/generators/appoptics_apm/templates/appoptics_apm_initializer.rb +2 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 170c3e8f35f9e439942788b3a801282c4a1deaee3090e8957bc76bdf9a209915
|
4
|
+
data.tar.gz: 4e23ef886ee0f9358dfba882bc35e0258b229b0c5fa617055345216e85376999
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fa70bacf8b44352826eb859bd687385a801fb1ea3c3289f8c7e79cff251ec6e05bbeb6510780af9b61a25376c171265a4308118da84c975a7a3d6a8ac803f3a
|
7
|
+
data.tar.gz: 763038da0e769d87d450d356fb517db8e908d337c0c989a9ae91a278fe7d42f09355b9c06a2f394dd5a30c0ff513587aeb65db24fcc828b186baacc629700470
|
data/.travis.yml
CHANGED
@@ -11,9 +11,9 @@ env:
|
|
11
11
|
- DBTYPE=mysql
|
12
12
|
|
13
13
|
rvm:
|
14
|
-
- 2.5.
|
15
|
-
- 2.4.
|
16
|
-
- 2.3.
|
14
|
+
- 2.5.3
|
15
|
+
- 2.4.5
|
16
|
+
- 2.3.8
|
17
17
|
# - jruby-9.0.5.0
|
18
18
|
|
19
19
|
gemfile:
|
@@ -23,7 +23,7 @@ gemfile:
|
|
23
23
|
- gemfiles/instrumentation_mocked_oldgems.gemfile
|
24
24
|
- gemfiles/frameworks.gemfile
|
25
25
|
- gemfiles/rails52.gemfile
|
26
|
-
|
26
|
+
- gemfiles/rails51.gemfile
|
27
27
|
- gemfiles/rails42.gemfile
|
28
28
|
## - gemfiles/rails32.gemfile # We currently are not supporting Rails 3.2
|
29
29
|
- gemfiles/delayed_job.gemfile
|
@@ -31,9 +31,9 @@ gemfile:
|
|
31
31
|
|
32
32
|
matrix:
|
33
33
|
exclude:
|
34
|
-
- rvm: 2.5.
|
34
|
+
- rvm: 2.5.3
|
35
35
|
env: DBTYPE=mysql
|
36
|
-
- rvm: 2.4.
|
36
|
+
- rvm: 2.4.5
|
37
37
|
env: DBTYPE=mysql
|
38
38
|
|
39
39
|
- gemfile: gemfiles/unit.gemfile
|
@@ -72,10 +72,10 @@ matrix:
|
|
72
72
|
|
73
73
|
# Rails 3.2 is not compatible with Ruby >= 2.4
|
74
74
|
# We currently are not supporting Rails 3.2
|
75
|
-
- rvm: 2.5.1
|
76
|
-
gemfile: gemfiles/rails32.gemfile
|
77
|
-
- rvm: 2.4.4
|
78
|
-
gemfile: gemfiles/rails32.gemfile
|
75
|
+
# - rvm: 2.5.1
|
76
|
+
# gemfile: gemfiles/rails32.gemfile
|
77
|
+
# - rvm: 2.4.4
|
78
|
+
# gemfile: gemfiles/rails32.gemfile
|
79
79
|
|
80
80
|
# - rvm: jruby-9.0.5.0
|
81
81
|
# gemfile: gemfiles/delayed_job.gemfile
|
data/Rakefile
CHANGED
@@ -96,7 +96,7 @@ task :fetch_ext_deps do
|
|
96
96
|
open(remote_file, 'rb') do |rf|
|
97
97
|
content = rf.read
|
98
98
|
File.open(local_file, 'wb') { |f| f.puts content }
|
99
|
-
puts "C-Lib VERSION: #{content}"
|
99
|
+
puts "!!!!!!! C-Lib VERSION: #{content.strip} !!!!!!!!"
|
100
100
|
end
|
101
101
|
|
102
102
|
# oboe and bson header files
|
data/appoptics_apm.gemspec
CHANGED
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.add_development_dependency('byebug', '>= 8.0.0')
|
43
43
|
s.add_development_dependency('pry', '>= 0.10.0')
|
44
44
|
s.add_development_dependency('pry-byebug', '>= 3.0.0')
|
45
|
+
s.add_development_dependency('minitest-hooks', '>= 1.5.0')
|
45
46
|
else
|
46
47
|
s.add_development_dependency('pry', '>= 0.10.0')
|
47
48
|
end
|
data/ext/oboe_metal/extconf.rb
CHANGED
@@ -62,6 +62,7 @@ while retries > 0
|
|
62
62
|
$stderr.puts 'Download of the c-extension for the appoptics_apm gem failed.'
|
63
63
|
$stderr.puts 'appoptics_apm will not instrument the code. No tracing will occur.'
|
64
64
|
$stderr.puts 'Contact support@appoptics.com if the problem persists.'
|
65
|
+
$stderr.puts "error:\n#{e.message}"
|
65
66
|
$stderr.puts '==================================================================='
|
66
67
|
create_makefile('oboe_noop', 'noop')
|
67
68
|
end
|
data/ext/oboe_metal/src/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.2.0
|
@@ -23,7 +23,7 @@ module AppOpticsAPM
|
|
23
23
|
yield
|
24
24
|
ensure
|
25
25
|
duration =(1000 * 1000 * (Time.now - start)).round(0)
|
26
|
-
transaction_name = determine_transaction_name(span)
|
26
|
+
transaction_name = determine_transaction_name(span, kvs)
|
27
27
|
kvs[:TransactionName] = AppOpticsAPM::Span.createSpan(transaction_name, nil, duration)
|
28
28
|
AppOpticsAPM.transaction_name = nil
|
29
29
|
end
|
@@ -31,16 +31,23 @@ module AppOpticsAPM
|
|
31
31
|
private
|
32
32
|
|
33
33
|
##
|
34
|
-
# Determine the transaction name to be set on the trace
|
34
|
+
# Determine the transaction name to be set on the trace.
|
35
35
|
#
|
36
36
|
# === Argument:
|
37
|
-
# * +
|
37
|
+
# * +span+ the name of the current span (used to construct a transaction name if none is defined)
|
38
|
+
# * +kvs+ (hash, optional) the hash that may have values for 'Controller' and 'Action'
|
38
39
|
#
|
39
40
|
# === Returns:
|
40
|
-
# (string) the
|
41
|
+
# (string) the determined transaction name
|
41
42
|
#
|
42
|
-
def determine_transaction_name(span)
|
43
|
-
AppOpticsAPM.transaction_name
|
43
|
+
def determine_transaction_name(span, kvs = {})
|
44
|
+
if AppOpticsAPM.transaction_name
|
45
|
+
AppOpticsAPM.transaction_name
|
46
|
+
elsif kvs['Controller'] && kvs['Action']
|
47
|
+
[kvs['Controller'], kvs['Action']].join('.')
|
48
|
+
else
|
49
|
+
"custom-#{span}"
|
50
|
+
end
|
44
51
|
end
|
45
52
|
|
46
53
|
end
|
data/lib/appoptics_apm/config.rb
CHANGED
@@ -14,7 +14,7 @@ module AppOpticsAPM
|
|
14
14
|
@@instrumentation = [:action_controller, :action_controller_api, :action_view,
|
15
15
|
:active_record, :bunnyclient, :bunnyconsumer, :cassandra, :curb,
|
16
16
|
:dalli, :delayed_jobclient, :delayed_jobworker,
|
17
|
-
:em_http_request, :excon, :faraday, :grape,
|
17
|
+
:em_http_request, :excon, :faraday, :grpc_client, :grape,
|
18
18
|
:httpclient, :nethttp, :memcached, :mongo, :moped, :rack, :redis,
|
19
19
|
:resqueclient, :resqueworker, :rest_client,
|
20
20
|
:sequel, :sidekiqclient, :sidekiqworker, :typhoeus]
|
@@ -60,7 +60,7 @@ module AppOpticsAPM
|
|
60
60
|
|
61
61
|
# Since Grape uses throw/catch and not Exceptions, we have to create an exception here
|
62
62
|
exception = GrapeError.new(error[:message] ? error[:message] : "No message given.")
|
63
|
-
exception.set_backtrace(::AppOpticsAPM::API.backtrace)
|
63
|
+
exception.set_backtrace(::AppOpticsAPM::API.backtrace)
|
64
64
|
|
65
65
|
::AppOpticsAPM::API.log_exception('rack', exception )
|
66
66
|
|
@@ -0,0 +1,161 @@
|
|
1
|
+
# Copyright (c) 2018 SolarWinds, LLC.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
module AppOpticsAPM
|
5
|
+
module GRPC
|
6
|
+
|
7
|
+
module ActiveCall
|
8
|
+
if defined? ::GRPC
|
9
|
+
StatusCodes = {}
|
10
|
+
::GRPC::Core::StatusCodes.constants.each { |code| StatusCodes[::GRPC::Core::StatusCodes.const_get(code)] = code }
|
11
|
+
end
|
12
|
+
|
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)
|
18
|
+
end
|
19
|
+
|
20
|
+
def grpc_tags(method_type, method)
|
21
|
+
tags = { 'Spec' => 'rsc',
|
22
|
+
'RemoteURL' => "grpc://#{peer}#{method}",
|
23
|
+
'GRPCMethodType' => method_type,
|
24
|
+
'IsService' => 'True'
|
25
|
+
}
|
26
|
+
tags['Backtrace'] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:grpc_client][:collect_backtraces]
|
27
|
+
tags
|
28
|
+
end
|
29
|
+
|
30
|
+
def request_response_with_appoptics(req, metadata: {})
|
31
|
+
unary_response(req, type: 'UNARY', metadata: metadata, without: :request_response_without_appoptics)
|
32
|
+
end
|
33
|
+
|
34
|
+
def client_streamer_with_appoptics(req, metadata: {})
|
35
|
+
unary_response(req, type: 'CLIENT_STREAMING', metadata: metadata, without: :client_streamer_without_appoptics)
|
36
|
+
end
|
37
|
+
|
38
|
+
def server_streamer_with_appoptics(req, metadata: {}, &blk)
|
39
|
+
@tags = grpc_tags('SERVER_STREAMING', metadata[:method] || metadata_to_send[:method])
|
40
|
+
AppOpticsAPM::API.log_entry('grpc_client', @tags)
|
41
|
+
metadata['x-trace'] = AppOpticsAPM::Context.toString
|
42
|
+
AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
|
43
|
+
|
44
|
+
patch_receive_and_check_status # need to patch this so that log_exit can be called after the enum is consumed
|
45
|
+
|
46
|
+
response = server_streamer_without_appoptics(req, metadata: metadata)
|
47
|
+
block_given? ? response.each { |r| yield r } : response
|
48
|
+
rescue => e
|
49
|
+
# this check is needed because the exception may have been logged in patch_receive_and_check_status
|
50
|
+
unless e.instance_variable_get(:@exn_logged)
|
51
|
+
context_from_incoming
|
52
|
+
AppOpticsAPM::API.log_exception('grpc_client', e)
|
53
|
+
AppOpticsAPM::API.log_exit('grpc_client', exit_tags(@tags))
|
54
|
+
end
|
55
|
+
raise e
|
56
|
+
end
|
57
|
+
|
58
|
+
def bidi_streamer_with_appoptics(req, metadata: {}, &blk)
|
59
|
+
@tags = grpc_tags('BIDI_STREAMING', metadata[:method] || metadata_to_send[:method])
|
60
|
+
AppOpticsAPM::API.log_entry('grpc_client', @tags)
|
61
|
+
metadata['x-trace'] = AppOpticsAPM::Context.toString
|
62
|
+
AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
|
63
|
+
|
64
|
+
patch_set_input_stream_done
|
65
|
+
|
66
|
+
response = bidi_streamer_without_appoptics(req, metadata: metadata)
|
67
|
+
block_given? ? response.each { |r| yield r } : response
|
68
|
+
rescue => e
|
69
|
+
unless e.instance_variable_get(:@exn_logged)
|
70
|
+
context_from_incoming
|
71
|
+
AppOpticsAPM::API.log_exception('grpc_client', e)
|
72
|
+
AppOpticsAPM::API.log_exit('grpc_client', exit_tags(@tags))
|
73
|
+
end
|
74
|
+
raise e
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def unary_response(req, type: , metadata: , without:)
|
80
|
+
tags = grpc_tags(type, metadata[:method] || metadata_to_send[:method])
|
81
|
+
AppOpticsAPM::SDK.trace('grpc_client', tags) do
|
82
|
+
metadata['x-trace'] = AppOpticsAPM::Context.toString
|
83
|
+
AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
|
84
|
+
begin
|
85
|
+
send(without, req, metadata: metadata)
|
86
|
+
ensure
|
87
|
+
exit_tags(tags)
|
88
|
+
context_from_incoming
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def patch_receive_and_check_status
|
94
|
+
def self.receive_and_check_status # need to patch this so that log_exit can be called after the enum is consumed
|
95
|
+
super
|
96
|
+
context_from_incoming
|
97
|
+
rescue => e
|
98
|
+
context_from_incoming
|
99
|
+
AppOpticsAPM::API.log_exception('grpc_client', e)
|
100
|
+
raise e
|
101
|
+
ensure
|
102
|
+
AppOpticsAPM::API.log_exit('grpc_client', exit_tags(@tags))
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def patch_set_input_stream_done
|
107
|
+
# need to patch this instance method so that log_exit can be called after the enum is consumed
|
108
|
+
def self.set_input_stream_done
|
109
|
+
return if status.nil?
|
110
|
+
context_from_incoming
|
111
|
+
if status.code > 0
|
112
|
+
AppOpticsAPM::API.log_exception('grpc_client', $!)
|
113
|
+
end
|
114
|
+
AppOpticsAPM::API.log_exit('grpc_client', exit_tags(@tags))
|
115
|
+
super
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def context_from_incoming
|
120
|
+
xtrace ||= @call.trailing_metadata['x-trace'] if @call.trailing_metadata && @call.trailing_metadata['x-trace']
|
121
|
+
xtrace ||= @call.metadata['x-trace'] if @call.metadata && @call.metadata['x-trace']
|
122
|
+
AppOpticsAPM::Context.fromString(xtrace) if xtrace
|
123
|
+
end
|
124
|
+
|
125
|
+
def exit_tags(tags)
|
126
|
+
# we need to translate the status.code, it is not the status.details we want, they are not matching 1:1
|
127
|
+
tags['GRPCStatus'] ||= @call.status ? StatusCodes[@call.status.code].to_s : 'UNKNOWN'
|
128
|
+
tags.delete('Backtrace')
|
129
|
+
tags
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
if defined?(::GRPC) && AppOpticsAPM::Config[:grpc_client][:enabled]
|
137
|
+
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting GRPC' if AppOpticsAPM::Config[:verbose]
|
138
|
+
|
139
|
+
# Client side is instrumented in ActiveCall and ClientStub
|
140
|
+
::AppOpticsAPM::Util.send_include(::GRPC::ActiveCall, ::AppOpticsAPM::GRPC::ActiveCall)
|
141
|
+
|
142
|
+
GRPC_ClientStub_ops = [:request_response, :client_streamer, :server_streamer, :bidi_streamer]
|
143
|
+
module GRPC
|
144
|
+
class ClientStub
|
145
|
+
GRPC_ClientStub_ops.reject { |m| !method_defined?(m) }.each do |m|
|
146
|
+
define_method("#{m}_with_appoptics") do |method, req, marshal, unmarshal, deadline: nil,
|
147
|
+
return_op: false, parent: nil,
|
148
|
+
credentials: nil, metadata: {}, &blk|
|
149
|
+
|
150
|
+
metadata[:method] = method
|
151
|
+
return send("#{m}_without_appoptics", method, req, marshal, unmarshal, deadline: deadline,
|
152
|
+
return_op: return_op, parent: parent,
|
153
|
+
credentials: credentials, metadata: metadata, &blk)
|
154
|
+
end
|
155
|
+
|
156
|
+
::AppOpticsAPM::Util.method_alias(::GRPC::ClientStub, m)
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
@@ -174,7 +174,7 @@ if AppOpticsAPM.loaded
|
|
174
174
|
def transaction_name(env)
|
175
175
|
if AppOpticsAPM.transaction_name
|
176
176
|
AppOpticsAPM.transaction_name
|
177
|
-
elsif env['appoptics_apm.controller']
|
177
|
+
elsif env['appoptics_apm.controller'] && env['appoptics_apm.action']
|
178
178
|
[env['appoptics_apm.controller'], env['appoptics_apm.action']].join('.')
|
179
179
|
end
|
180
180
|
end
|
@@ -29,7 +29,7 @@ module AppOpticsAPM
|
|
29
29
|
|
30
30
|
if response.code == 0
|
31
31
|
exception = TyphoeusError.new(response.return_message)
|
32
|
-
exception.set_backtrace(AppOpticsAPM::API.backtrace)
|
32
|
+
exception.set_backtrace(AppOpticsAPM::API.backtrace)
|
33
33
|
AppOpticsAPM::API.log_exception(:typhoeus, exception)
|
34
34
|
end
|
35
35
|
|
data/lib/appoptics_apm/sdk.rb
CHANGED
@@ -173,22 +173,16 @@ module AppOpticsAPM
|
|
173
173
|
return yield unless AppOpticsAPM.loaded
|
174
174
|
|
175
175
|
if AppOpticsAPM::Context.isValid # not an entry span!
|
176
|
-
result = trace(span) { yield }
|
176
|
+
result = trace(span, opts) { yield }
|
177
177
|
target['X-Trace'] = AppOpticsAPM::Context.toString
|
178
178
|
return result
|
179
179
|
end
|
180
180
|
|
181
|
-
|
182
|
-
# :TransactionName should only be sent after it is set by send_metrics
|
183
|
-
transaction_name = opts.delete('TransactionName')
|
184
|
-
transaction_name = opts.delete(:TransactionName) || transaction_name
|
185
|
-
# This is the beginning of a transaction, therefore AppOpticsAPM.transaction_name
|
186
|
-
# needs to be set to nil or whatever is provided in the opts
|
187
|
-
AppOpticsAPM.transaction_name = transaction_name
|
188
|
-
|
181
|
+
transaction_name_from_opts(opts)
|
189
182
|
|
190
183
|
AppOpticsAPM::API.log_start(span, xtrace, opts)
|
191
|
-
|
184
|
+
# AppOpticsAPM::Event.startTrace creates an Event without an Edge
|
185
|
+
exit_evt = AppOpticsAPM::Event.startTrace(AppOpticsAPM::Context.get)
|
192
186
|
result = begin
|
193
187
|
AppOpticsAPM::API.send_metrics(span, opts) do
|
194
188
|
target['X-Trace'] = AppOpticsAPM::EventUtil.metadataString(exit_evt)
|
@@ -308,6 +302,21 @@ module AppOpticsAPM
|
|
308
302
|
# OBOE_SERVER_RESPONSE_CONNECT_ERROR 5
|
309
303
|
AppopticsAPM::Context.isReady(wait_milliseconds) == 1
|
310
304
|
end
|
305
|
+
|
306
|
+
private
|
307
|
+
# private method
|
308
|
+
#
|
309
|
+
# This should only be called at the beginning of a transaction,
|
310
|
+
# when AppOpticsAPM.transaction_name needs to be set to nil
|
311
|
+
# or whatever is provided in the opts
|
312
|
+
def transaction_name_from_opts(opts)
|
313
|
+
# :TransactionName and 'TransactionName' need to be removed from opts
|
314
|
+
# :TransactionName should only be sent after it is set by send_metrics
|
315
|
+
transaction_name = opts.delete('TransactionName')
|
316
|
+
transaction_name = opts.delete(:TransactionName) || transaction_name
|
317
|
+
|
318
|
+
AppOpticsAPM.transaction_name = transaction_name
|
319
|
+
end
|
311
320
|
end
|
312
321
|
|
313
322
|
extend Tracing
|
data/lib/appoptics_apm/util.rb
CHANGED
@@ -183,7 +183,10 @@ module AppOpticsAPM
|
|
183
183
|
# This legacy version of build_init_report is used for apps without Bundler.
|
184
184
|
#
|
185
185
|
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
|
186
|
+
#
|
187
|
+
# @deprecated Please use {#build_init_report} instead
|
186
188
|
def legacy_build_init_report
|
189
|
+
AppOpticsAPM.logger.warn '[appoptics_apm/warn] Oboe::API will be deprecated in a future version.'
|
187
190
|
platform_info = {}
|
188
191
|
|
189
192
|
begin
|
@@ -176,6 +176,7 @@ if defined?(AppOpticsAPM::Config)
|
|
176
176
|
AppOpticsAPM::Config[:em_http_request][:enabled] = false
|
177
177
|
AppOpticsAPM::Config[:excon][:enabled] = true
|
178
178
|
AppOpticsAPM::Config[:faraday][:enabled] = true
|
179
|
+
AppOpticsAPM::Config[:grpc_client][:enabled] = true
|
179
180
|
AppOpticsAPM::Config[:grape][:enabled] = true
|
180
181
|
AppOpticsAPM::Config[:httpclient][:enabled] = true
|
181
182
|
AppOpticsAPM::Config[:memcached][:enabled] = true
|
@@ -236,6 +237,7 @@ if defined?(AppOpticsAPM::Config)
|
|
236
237
|
AppOpticsAPM::Config[:excon][:collect_backtraces] = true
|
237
238
|
AppOpticsAPM::Config[:faraday][:collect_backtraces] = false
|
238
239
|
AppOpticsAPM::Config[:grape][:collect_backtraces] = true
|
240
|
+
AppOpticsAPM::Config[:grpc_client][:collect_backtraces] = false
|
239
241
|
AppOpticsAPM::Config[:httpclient][:collect_backtraces] = true
|
240
242
|
AppOpticsAPM::Config[:memcached][:collect_backtraces] = false
|
241
243
|
AppOpticsAPM::Config[:mongo][:collect_backtraces] = true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appoptics_apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maia Engeli
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-10-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -102,6 +102,20 @@ dependencies:
|
|
102
102
|
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: 3.0.0
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: minitest-hooks
|
107
|
+
requirement: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 1.5.0
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 1.5.0
|
105
119
|
description: The AppOpticsAPM gem provides performance instrumentation for MRI Ruby
|
106
120
|
and related frameworks.
|
107
121
|
email: support@appoptics.com
|
@@ -178,6 +192,7 @@ files:
|
|
178
192
|
- lib/appoptics_apm/inst/em-http-request.rb
|
179
193
|
- lib/appoptics_apm/inst/excon.rb
|
180
194
|
- lib/appoptics_apm/inst/faraday.rb
|
195
|
+
- lib/appoptics_apm/inst/grpc_client.rb
|
181
196
|
- lib/appoptics_apm/inst/http.rb
|
182
197
|
- lib/appoptics_apm/inst/httpclient.rb
|
183
198
|
- lib/appoptics_apm/inst/memcached.rb
|