appoptics_apm 4.3.0 → 4.3.1
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 +5 -16
- data/appoptics_apm.gemspec +12 -3
- data/lib/appoptics_apm/inst/curb.rb +1 -0
- data/lib/appoptics_apm/inst/em-http-request.rb +1 -0
- data/lib/appoptics_apm/inst/excon.rb +9 -7
- data/lib/appoptics_apm/inst/faraday.rb +43 -31
- data/lib/appoptics_apm/inst/grpc_client.rb +8 -6
- data/lib/appoptics_apm/inst/http.rb +8 -18
- data/lib/appoptics_apm/inst/httpclient.rb +1 -3
- data/lib/appoptics_apm/inst/typhoeus.rb +15 -21
- data/lib/appoptics_apm/sdk.rb +3 -16
- data/lib/appoptics_apm/version.rb +1 -1
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 460a1905104ca068b80627a06b31c7c7aeae3e1da872a97c261aa86e675ae7b2
|
4
|
+
data.tar.gz: 4810bf515e2af6c0f685061b34574ef0ba223e79eeae8b99d0f9697e3399b522
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e6fa6323f8b61c4bf2f294858c749585ba02c22d991bc042f9b3c9047f77b4df78027f575408c2cba917921d6bba9e809374ca8bad66da3ef0bfa4e3279003c
|
7
|
+
data.tar.gz: 4b6f2524b9ac853bf3e36f926409bea3966e6501340de454a471f60d6a3159d2df0e481ff2c9eb03f68c3b59d2ed4b270003b7576e5b81b17733adb020995582
|
data/.travis.yml
CHANGED
@@ -15,6 +15,7 @@ rvm:
|
|
15
15
|
- 2.4.5
|
16
16
|
- 2.3.8
|
17
17
|
# - jruby-9.0.5.0
|
18
|
+
- ruby-head
|
18
19
|
|
19
20
|
gemfile:
|
20
21
|
- gemfiles/libraries.gemfile
|
@@ -23,9 +24,7 @@ gemfile:
|
|
23
24
|
- gemfiles/instrumentation_mocked_oldgems.gemfile
|
24
25
|
- gemfiles/frameworks.gemfile
|
25
26
|
- gemfiles/rails52.gemfile
|
26
|
-
- gemfiles/rails51.gemfile
|
27
27
|
- gemfiles/rails42.gemfile
|
28
|
-
## - gemfiles/rails32.gemfile # We currently are not supporting Rails 3.2
|
29
28
|
- gemfiles/delayed_job.gemfile
|
30
29
|
- gemfiles/noop.gemfile
|
31
30
|
|
@@ -35,6 +34,8 @@ matrix:
|
|
35
34
|
env: DBTYPE=mysql
|
36
35
|
- rvm: 2.4.5
|
37
36
|
env: DBTYPE=mysql
|
37
|
+
- rvm: ruby-head
|
38
|
+
env: DBTYPE=mysql
|
38
39
|
|
39
40
|
- gemfile: gemfiles/unit.gemfile
|
40
41
|
env: DBTYPE=mysql
|
@@ -69,20 +70,8 @@ matrix:
|
|
69
70
|
env: DBTYPE=mysql2
|
70
71
|
- gemfile: gemfiles/delayed_job.gemfile
|
71
72
|
env: DBTYPE=mysql2
|
72
|
-
|
73
|
-
|
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
|
79
|
-
|
80
|
-
# - rvm: jruby-9.0.5.0
|
81
|
-
# gemfile: gemfiles/delayed_job.gemfile
|
82
|
-
|
83
|
-
# Skip testing on JRuby until activerecord-jdbc supports Rails 5.0
|
84
|
-
# - rvm: jruby-9.0.5.0
|
85
|
-
# gemfile: gemfiles/rails50.gemfile
|
73
|
+
allow_failures:
|
74
|
+
- rvm: ruby-head
|
86
75
|
|
87
76
|
# FIXME: Figure out if this is still an issue when reviewing cassandra test setup
|
88
77
|
# Attempt Travis/Cassandra fix re: https://github.com/travis-ci/travis-ci/issues/1484
|
data/appoptics_apm.gemspec
CHANGED
@@ -12,9 +12,18 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.email = %q{support@appoptics.com}
|
13
13
|
s.homepage = %q{https://www.appoptics.com/}
|
14
14
|
s.summary = %q{AppOptics APM performance instrumentation gem for Ruby}
|
15
|
-
s.description =
|
16
|
-
|
17
|
-
|
15
|
+
s.description = <<-EOF
|
16
|
+
The appoptics_apm gem provides automatic tracing and metrics for Ruby applications. Get started at appoptics.com. @AppOptics
|
17
|
+
EOF
|
18
|
+
|
19
|
+
s.metadata = {
|
20
|
+
'changelog_uri' => 'https://github.com/appoptics/appoptics-apm-ruby/releases',
|
21
|
+
'documentation_uri' => 'https://docs.appoptics.com/kb/apm_tracing/ruby/',
|
22
|
+
'homepage_uri' => 'https://www.appoptics.com/',
|
23
|
+
'source_code_uri' => 'https://github.com/appoptics/appoptics-apm-ruby',
|
24
|
+
}
|
25
|
+
|
26
|
+
s.extra_rdoc_files = ['LICENSE']
|
18
27
|
s.files = `git ls-files`.split("\n").reject { |f| f.match(%r{^(test|gemfiles)/}) }
|
19
28
|
s.files += ['ext/oboe_metal/src/oboe.h',
|
20
29
|
'ext/oboe_metal/src/oboe.hpp',
|
@@ -13,20 +13,20 @@ module AppOpticsAPM
|
|
13
13
|
|
14
14
|
def appoptics_collect(params)
|
15
15
|
kvs = {}
|
16
|
+
kvs[:Spec] = 'rsc'
|
16
17
|
kvs[:IsService] = 1
|
17
|
-
kvs[:RemoteProtocol] = ::AppOpticsAPM::Util.upcase(@data[:scheme])
|
18
|
-
kvs[:RemoteHost] = @data[:host]
|
19
18
|
|
20
19
|
# Conditionally log query args
|
21
20
|
if AppOpticsAPM::Config[:excon][:log_args] && @data[:query]
|
22
21
|
if @data[:query].is_a?(Hash)
|
23
|
-
|
22
|
+
service_arg = "#{@data[:path]}?#{URI.encode_www_form(@data[:query])}"
|
24
23
|
else
|
25
|
-
|
24
|
+
service_arg = "#{@data[:path]}?#{@data[:query]}"
|
26
25
|
end
|
27
26
|
else
|
28
|
-
|
27
|
+
service_arg = @data[:path]
|
29
28
|
end
|
29
|
+
kvs[:RemoteURL] = "#{@data[:scheme]}://#{@data[:host]}:#{@data[:port]}#{service_arg}"
|
30
30
|
|
31
31
|
# In the case of HTTP pipelining, params could be an array of
|
32
32
|
# request hashes.
|
@@ -35,7 +35,7 @@ module AppOpticsAPM
|
|
35
35
|
params.each do |p|
|
36
36
|
methods << ::AppOpticsAPM::Util.upcase(p[:method])
|
37
37
|
end
|
38
|
-
kvs[:HTTPMethods] = methods.join(',
|
38
|
+
kvs[:HTTPMethods] = methods.join(',')[0..1024]
|
39
39
|
kvs[:Pipeline] = true
|
40
40
|
else
|
41
41
|
kvs[:HTTPMethod] = ::AppOpticsAPM::Util.upcase(params[:method])
|
@@ -53,8 +53,10 @@ module AppOpticsAPM
|
|
53
53
|
|
54
54
|
def requests_with_appoptics(pipeline_params)
|
55
55
|
responses = nil
|
56
|
-
|
56
|
+
kvs = appoptics_collect(pipeline_params)
|
57
|
+
AppOpticsAPM::API.trace(:excon, kvs) do
|
57
58
|
responses = requests_without_appoptics(pipeline_params)
|
59
|
+
kvs[:HTTPStatuses] = responses.map { |r| r.status }.join(',')
|
58
60
|
end
|
59
61
|
responses
|
60
62
|
end
|
@@ -10,59 +10,52 @@ module AppOpticsAPM
|
|
10
10
|
|
11
11
|
def run_request_with_appoptics(method, url, body, headers, &block)
|
12
12
|
blacklisted = url_blacklisted?
|
13
|
+
remote_call = remote_call?
|
14
|
+
|
13
15
|
unless AppOpticsAPM.tracing?
|
14
|
-
|
15
|
-
|
16
|
+
if remote_call && !blacklisted
|
17
|
+
xtrace = AppOpticsAPM::Context.toString
|
18
|
+
@headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace)
|
19
|
+
end
|
16
20
|
return run_request_without_appoptics(method, url, body, headers, &block)
|
17
21
|
end
|
18
22
|
|
19
23
|
begin
|
20
24
|
AppOpticsAPM::API.log_entry(:faraday)
|
25
|
+
xtrace = nil
|
26
|
+
if remote_call && !blacklisted
|
27
|
+
xtrace = AppOpticsAPM::Context.toString
|
28
|
+
@headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace)
|
29
|
+
end
|
21
30
|
|
22
|
-
xtrace = AppOpticsAPM::Context.toString
|
23
|
-
@headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace) && !blacklisted
|
24
31
|
result = run_request_without_appoptics(method, url, body, headers, &block)
|
25
32
|
|
33
|
+
# Re-attach edge unless it's blacklisted
|
34
|
+
# or if we don't have a valid X-Trace header
|
35
|
+
if remote_call && !blacklisted
|
36
|
+
xtrace_new = result.headers['X-Trace']
|
37
|
+
AppOpticsAPM::XTrace.continue_service_context(xtrace, xtrace_new)
|
38
|
+
end
|
26
39
|
kvs = {}
|
27
40
|
kvs[:Middleware] = @builder.handlers
|
28
41
|
kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:faraday][:collect_backtraces]
|
29
42
|
|
30
|
-
# Only send service KVs if we're not using
|
31
|
-
# Otherwise, the
|
32
|
-
|
33
|
-
|
34
|
-
if handle_service
|
35
|
-
context = AppOpticsAPM::Context.toString
|
36
|
-
task_id = AppOpticsAPM::XTrace.task_id(context)
|
37
|
-
|
38
|
-
# Avoid cross host tracing for blacklisted domains
|
39
|
-
# Conditionally add the X-Trace header to the outgoing request
|
40
|
-
@headers['X-Trace'] = context unless blacklisted
|
41
|
-
|
42
|
-
kvs[:IsService] = 1
|
43
|
-
kvs[:RemoteProtocol] = (@url_prefix.scheme == 'https') ? 'HTTPS' : 'HTTP'
|
44
|
-
kvs[:RemoteHost] = @url_prefix.host
|
45
|
-
kvs[:RemotePort] = @url_prefix.port
|
46
|
-
kvs[:ServiceArg] = url
|
47
|
-
kvs[:HTTPMethod] = method
|
48
|
-
kvs[:HTTPStatus] = result.status
|
49
|
-
kvs[:Blacklisted] = true if blacklisted
|
50
|
-
|
51
|
-
# Re-attach net::http edge unless it's blacklisted or if we don't have a
|
52
|
-
# valid X-Trace header
|
43
|
+
# Only send service KVs if we're not using an adapter
|
44
|
+
# Otherwise, the adapter instrumentation will send the service KVs
|
45
|
+
if remote_call
|
46
|
+
kvs.merge!(rsc_kvs(url, method, result))
|
53
47
|
unless blacklisted
|
54
|
-
|
55
|
-
AppOpticsAPM::XTrace.continue_service_context(
|
48
|
+
xtrace_new = result.headers['X-Trace']
|
49
|
+
AppOpticsAPM::XTrace.continue_service_context(xtrace, xtrace_new)
|
56
50
|
end
|
57
51
|
end
|
58
52
|
|
59
|
-
AppOpticsAPM::API.log(:faraday, :info, kvs)
|
60
53
|
result
|
61
54
|
rescue => e
|
62
55
|
AppOpticsAPM::API.log_exception(:faraday, e)
|
63
56
|
raise e
|
64
57
|
ensure
|
65
|
-
AppOpticsAPM::API.log_exit(:faraday)
|
58
|
+
AppOpticsAPM::API.log_exit(:faraday, kvs)
|
66
59
|
end
|
67
60
|
end
|
68
61
|
|
@@ -72,6 +65,23 @@ module AppOpticsAPM
|
|
72
65
|
url = @url_prefix ? @url_prefix.to_s : @host
|
73
66
|
AppOpticsAPM::API.blacklisted?(url)
|
74
67
|
end
|
68
|
+
|
69
|
+
# This is only considered a remote service call if the middleware/adapter is not instrumented
|
70
|
+
def remote_call?
|
71
|
+
(@builder.handlers.map(&:name) & APPOPTICS_INSTR_ADAPTERS).count == 0
|
72
|
+
end
|
73
|
+
|
74
|
+
def rsc_kvs(url, method, result)
|
75
|
+
kvs = { :Spec => 'rsc',
|
76
|
+
:IsService => 1,
|
77
|
+
:HTTPMethod => method.upcase,
|
78
|
+
:HTTPStatus => result.status, }
|
79
|
+
kvs[:Blacklisted] = true if url_blacklisted?
|
80
|
+
kvs[:RemoteURL] = result.to_hash[:url].to_s
|
81
|
+
kvs[:RemoteURL].split('?').first unless AppOpticsAPM::Config[:faraday][:log_args]
|
82
|
+
|
83
|
+
kvs
|
84
|
+
end
|
75
85
|
end
|
76
86
|
end
|
77
87
|
end
|
@@ -80,5 +90,7 @@ if AppOpticsAPM::Config[:faraday][:enabled]
|
|
80
90
|
if defined?(::Faraday)
|
81
91
|
AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting faraday' if AppOpticsAPM::Config[:verbose]
|
82
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
|
83
95
|
end
|
84
96
|
end
|
@@ -38,7 +38,7 @@ module AppOpticsAPM
|
|
38
38
|
def server_streamer_with_appoptics(req, metadata: {}, &blk)
|
39
39
|
@tags = grpc_tags('SERVER_STREAMING', metadata[:method] || metadata_to_send[:method])
|
40
40
|
AppOpticsAPM::API.log_entry('grpc_client', @tags)
|
41
|
-
metadata['x-trace'] = AppOpticsAPM::Context.toString
|
41
|
+
metadata['x-trace'] = AppOpticsAPM::Context.toString if AppOpticsAPM::Context.isValid
|
42
42
|
AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
|
43
43
|
|
44
44
|
patch_receive_and_check_status # need to patch this so that log_exit can be called after the enum is consumed
|
@@ -58,7 +58,7 @@ module AppOpticsAPM
|
|
58
58
|
def bidi_streamer_with_appoptics(req, metadata: {}, &blk)
|
59
59
|
@tags = grpc_tags('BIDI_STREAMING', metadata[:method] || metadata_to_send[:method])
|
60
60
|
AppOpticsAPM::API.log_entry('grpc_client', @tags)
|
61
|
-
metadata['x-trace'] = AppOpticsAPM::Context.toString
|
61
|
+
metadata['x-trace'] = AppOpticsAPM::Context.toString if AppOpticsAPM::Context.isValid
|
62
62
|
AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
|
63
63
|
|
64
64
|
patch_set_input_stream_done
|
@@ -79,7 +79,7 @@ module AppOpticsAPM
|
|
79
79
|
def unary_response(req, type: , metadata: , without:)
|
80
80
|
tags = grpc_tags(type, metadata[:method] || metadata_to_send[:method])
|
81
81
|
AppOpticsAPM::SDK.trace('grpc_client', tags) do
|
82
|
-
metadata['x-trace'] = AppOpticsAPM::Context.toString
|
82
|
+
metadata['x-trace'] = AppOpticsAPM::Context.toString if AppOpticsAPM::Context.isValid
|
83
83
|
AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
|
84
84
|
begin
|
85
85
|
send(without, req, metadata: metadata)
|
@@ -117,9 +117,11 @@ module AppOpticsAPM
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def context_from_incoming
|
120
|
-
|
121
|
-
|
122
|
-
|
120
|
+
if AppOpticsAPM::Context.isValid
|
121
|
+
xtrace ||= @call.trailing_metadata['x-trace'] if @call.trailing_metadata && @call.trailing_metadata['x-trace']
|
122
|
+
xtrace ||= @call.metadata['x-trace'] if @call.metadata && @call.metadata['x-trace']
|
123
|
+
AppOpticsAPM::Context.fromString(xtrace) if xtrace
|
124
|
+
end
|
123
125
|
end
|
124
126
|
|
125
127
|
def exit_tags(tags)
|
@@ -21,26 +21,19 @@ if AppOpticsAPM::Config[:nethttp][:enabled]
|
|
21
21
|
return request_without_appoptics(*args, &block)
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
opts = {}
|
25
|
+
AppOpticsAPM::API.trace(:'net-http', opts) do
|
26
26
|
context = AppOpticsAPM::Context.toString
|
27
|
-
task_id = AppOpticsAPM::XTrace.task_id(context)
|
27
|
+
# task_id = AppOpticsAPM::XTrace.task_id(context)
|
28
28
|
|
29
29
|
# Collect KVs to report in the info event
|
30
|
-
if args.
|
31
|
-
req = args
|
30
|
+
if args.respond_to?(:first) && args.first
|
31
|
+
req = args.first
|
32
32
|
|
33
|
+
opts[:Spec] = 'rsc'
|
33
34
|
opts[:IsService] = 1
|
34
|
-
opts[:
|
35
|
-
opts[:
|
36
|
-
|
37
|
-
# Conditionally log query params
|
38
|
-
if AppOpticsAPM::Config[:nethttp][:log_args]
|
39
|
-
opts[:ServiceArg] = req.path
|
40
|
-
else
|
41
|
-
opts[:ServiceArg] = req.path.split('?').first
|
42
|
-
end
|
43
|
-
|
35
|
+
opts[:RemoteURL] = "#{use_ssl? ? 'https' : 'http'}://#{addr_port}"
|
36
|
+
opts[:RemoteURL] << (AppOpticsAPM::Config[:nethttp][:log_args] ? req.path : req.path.split('?').first)
|
44
37
|
opts[:HTTPMethod] = req.method
|
45
38
|
opts[:Blacklisted] = true if blacklisted
|
46
39
|
opts[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:nethttp][:collect_backtraces]
|
@@ -68,9 +61,6 @@ if AppOpticsAPM::Config[:nethttp][:enabled]
|
|
68
61
|
end
|
69
62
|
|
70
63
|
next resp
|
71
|
-
ensure
|
72
|
-
# Log the info event with the KVs in opts
|
73
|
-
AppOpticsAPM::API.log(:'net-http', :info, opts)
|
74
64
|
end
|
75
65
|
end
|
76
66
|
end
|
@@ -12,6 +12,7 @@ module AppOpticsAPM
|
|
12
12
|
|
13
13
|
def appoptics_collect(method, uri, query = nil)
|
14
14
|
kvs = {}
|
15
|
+
kvs[:Spec] = 'rsc'
|
15
16
|
kvs[:IsService] = 1
|
16
17
|
|
17
18
|
# Conditionally log URL query params
|
@@ -27,9 +28,6 @@ module AppOpticsAPM
|
|
27
28
|
kvs[:RemoteURL] = uri.to_s.split('?').first
|
28
29
|
end
|
29
30
|
|
30
|
-
kvs[:RemoteProtocol] = uri.scheme.upcase
|
31
|
-
kvs[:RemoteHost] = "#{uri.host}:#{uri.port}"
|
32
|
-
kvs[:ServiceArg] = "/?#{uri.query}"
|
33
31
|
kvs[:HTTPMethod] = ::AppOpticsAPM::Util.upcase(method)
|
34
32
|
kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:httpclient][:collect_backtraces]
|
35
33
|
kvs
|
@@ -25,45 +25,39 @@ module AppOpticsAPM
|
|
25
25
|
context = AppOpticsAPM::Context.toString
|
26
26
|
options[:headers]['X-Trace'] = context unless blacklisted
|
27
27
|
|
28
|
+
kvs = {}
|
29
|
+
kvs[:Spec] = 'rsc'
|
30
|
+
kvs[:IsService] = 1
|
31
|
+
kvs[:HTTPMethod] = ::AppOpticsAPM::Util.upcase(options[:method])
|
32
|
+
|
28
33
|
response = run_without_appoptics
|
29
34
|
|
35
|
+
# Re-attach edge unless it's blacklisted
|
36
|
+
# or if we don't have a valid X-Trace header
|
37
|
+
unless blacklisted
|
38
|
+
xtrace = response.headers['X-Trace']
|
39
|
+
AppOpticsAPM::XTrace.continue_service_context(context, xtrace)
|
40
|
+
end
|
41
|
+
|
30
42
|
if response.code == 0
|
31
43
|
exception = TyphoeusError.new(response.return_message)
|
32
44
|
exception.set_backtrace(AppOpticsAPM::API.backtrace)
|
33
45
|
AppOpticsAPM::API.log_exception(:typhoeus, exception)
|
34
46
|
end
|
35
47
|
|
36
|
-
kvs = {}
|
37
|
-
kvs[:IsService] = 1
|
38
48
|
kvs[:HTTPStatus] = response.code
|
39
49
|
kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:typhoeus][:collect_backtraces]
|
40
|
-
|
41
|
-
uri = URI(response.effective_url)
|
42
|
-
|
43
50
|
# Conditionally log query params
|
44
|
-
|
45
|
-
|
46
|
-
else
|
47
|
-
kvs[:RemoteURL] = uri.to_s.split('?').first
|
48
|
-
end
|
49
|
-
|
50
|
-
kvs[:HTTPMethod] = ::AppOpticsAPM::Util.upcase(options[:method])
|
51
|
+
uri = URI(response.effective_url)
|
52
|
+
kvs[:RemoteURL] = AppOpticsAPM::Config[:typhoeus][:log_args] ? uri.to_s : uri.to_s.split('?').first
|
51
53
|
kvs[:Blacklisted] = true if blacklisted
|
52
54
|
|
53
|
-
# Re-attach net::http edge unless it's blacklisted or if we don't have a
|
54
|
-
# valid X-Trace header
|
55
|
-
unless blacklisted
|
56
|
-
xtrace = response.headers['X-Trace']
|
57
|
-
AppOpticsAPM::XTrace.continue_service_context(context, xtrace)
|
58
|
-
end
|
59
|
-
|
60
|
-
AppOpticsAPM::API.log_info(:typhoeus, kvs)
|
61
55
|
response
|
62
56
|
rescue => e
|
63
57
|
AppOpticsAPM::API.log_exception(:typhoeus, e)
|
64
58
|
raise e
|
65
59
|
ensure
|
66
|
-
AppOpticsAPM::API.log_exit(:typhoeus)
|
60
|
+
AppOpticsAPM::API.log_exit(:typhoeus, kvs)
|
67
61
|
end
|
68
62
|
end
|
69
63
|
end
|
data/lib/appoptics_apm/sdk.rb
CHANGED
@@ -178,7 +178,8 @@ module AppOpticsAPM
|
|
178
178
|
return result
|
179
179
|
end
|
180
180
|
|
181
|
-
|
181
|
+
# :TransactionName and 'TransactionName' need to be removed from opts
|
182
|
+
AppOpticsAPM.transaction_name = opts.delete('TransactionName') || opts.delete(:TransactionName)
|
182
183
|
|
183
184
|
AppOpticsAPM::API.log_start(span, xtrace, opts)
|
184
185
|
# AppOpticsAPM::Event.startTrace creates an Event without an Edge
|
@@ -293,6 +294,7 @@ module AppOpticsAPM
|
|
293
294
|
# end
|
294
295
|
#
|
295
296
|
def appoptics_ready?(wait_milliseconds = 3000)
|
297
|
+
return false unless AppOpticsAPM.loaded
|
296
298
|
# These codes are returned by isReady:
|
297
299
|
# OBOE_SERVER_RESPONSE_UNKNOWN 0
|
298
300
|
# OBOE_SERVER_RESPONSE_OK 1
|
@@ -302,21 +304,6 @@ module AppOpticsAPM
|
|
302
304
|
# OBOE_SERVER_RESPONSE_CONNECT_ERROR 5
|
303
305
|
AppopticsAPM::Context.isReady(wait_milliseconds) == 1
|
304
306
|
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
|
320
307
|
end
|
321
308
|
|
322
309
|
extend Tracing
|
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.3.
|
4
|
+
version: 4.3.1
|
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-11-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -116,8 +116,8 @@ dependencies:
|
|
116
116
|
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: 1.5.0
|
119
|
-
description: The
|
120
|
-
|
119
|
+
description: " The appoptics_apm gem provides automatic tracing and metrics for
|
120
|
+
Ruby applications. Get started at appoptics.com. @AppOptics\n"
|
121
121
|
email: support@appoptics.com
|
122
122
|
executables:
|
123
123
|
- appoptics_apm_config
|
@@ -235,7 +235,11 @@ files:
|
|
235
235
|
homepage: https://www.appoptics.com/
|
236
236
|
licenses:
|
237
237
|
- Librato Open License, Version 1.0
|
238
|
-
metadata:
|
238
|
+
metadata:
|
239
|
+
changelog_uri: https://github.com/appoptics/appoptics-apm-ruby/releases
|
240
|
+
documentation_uri: https://docs.appoptics.com/kb/apm_tracing/ruby/
|
241
|
+
homepage_uri: https://www.appoptics.com/
|
242
|
+
source_code_uri: https://github.com/appoptics/appoptics-apm-ruby
|
239
243
|
post_install_message:
|
240
244
|
rdoc_options: []
|
241
245
|
require_paths:
|