appoptics_apm 4.3.0 → 4.3.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 +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:
|