appoptics_apm 4.8.2 → 4.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +6 -1
  3. data/.travis.yml +50 -28
  4. data/CONFIG.md +1 -1
  5. data/Gemfile +6 -7
  6. data/README.md +1 -1
  7. data/appoptics_apm.gemspec +4 -1
  8. data/examples/SDK/01_basic_tracing.rb +0 -2
  9. data/ext/oboe_metal/README.md +69 -0
  10. data/ext/oboe_metal/noop/noop.c +2 -1
  11. data/ext/oboe_metal/src/VERSION +1 -1
  12. data/ext/oboe_metal/src/bson/bson.h +105 -105
  13. data/ext/oboe_metal/src/bson/platform_hacks.h +10 -10
  14. data/ext/oboe_metal/src/oboe.h +104 -73
  15. data/ext/oboe_metal/src/oboe.hpp +103 -61
  16. data/ext/oboe_metal/src/oboe_wrap.cxx +1470 -314
  17. data/lib/appoptics_apm.rb +1 -3
  18. data/lib/appoptics_apm/api.rb +0 -1
  19. data/lib/appoptics_apm/api/tracing.rb +4 -0
  20. data/lib/appoptics_apm/config.rb +16 -5
  21. data/lib/appoptics_apm/frameworks/padrino.rb +6 -36
  22. data/lib/appoptics_apm/frameworks/rails.rb +0 -1
  23. data/lib/appoptics_apm/frameworks/rails/inst/action_controller.rb +5 -5
  24. data/lib/appoptics_apm/frameworks/rails/inst/action_controller6.rb +50 -0
  25. data/lib/appoptics_apm/frameworks/rails/inst/action_view.rb +11 -24
  26. data/lib/appoptics_apm/frameworks/rails/inst/active_record.rb +3 -3
  27. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils.rb +1 -1
  28. data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils5x.rb +1 -1
  29. data/lib/appoptics_apm/frameworks/sinatra.rb +3 -32
  30. data/lib/appoptics_apm/inst/curb.rb +6 -6
  31. data/lib/appoptics_apm/inst/faraday.rb +16 -4
  32. data/lib/appoptics_apm/inst/rack.rb +11 -11
  33. data/lib/appoptics_apm/oboe_init_options.rb +17 -4
  34. data/lib/appoptics_apm/sdk/custom_metrics.rb +2 -0
  35. data/lib/appoptics_apm/sdk/tracing.rb +118 -0
  36. data/lib/appoptics_apm/support/transaction_metrics.rb +1 -0
  37. data/lib/appoptics_apm/support/transaction_settings.rb +40 -15
  38. data/lib/appoptics_apm/support/x_trace_options.rb +110 -0
  39. data/lib/appoptics_apm/version.rb +2 -2
  40. data/lib/appoptics_apm/xtrace.rb +7 -7
  41. data/lib/rails/generators/appoptics_apm/templates/appoptics_apm_initializer.rb +37 -12
  42. metadata +7 -15
  43. data/Rakefile +0 -229
  44. data/build_gem.sh +0 -15
  45. data/build_gem_upload_to_packagecloud.sh +0 -20
  46. data/lib/appoptics_apm/api/profiling.rb +0 -203
  47. data/lib/appoptics_apm/frameworks/rails/inst/action_controller3.rb +0 -55
  48. data/lib/appoptics_apm/frameworks/rails/inst/action_view_30.rb +0 -50
  49. data/lib/appoptics_apm/legacy_method_profiling.rb +0 -90
  50. data/lib/appoptics_apm/method_profiling.rb +0 -33
  51. data/lib/oboe/README +0 -2
  52. data/lib/oboe/backward_compatibility.rb +0 -80
  53. data/lib/oboe/inst/rack.rb +0 -11
data/lib/appoptics_apm.rb CHANGED
@@ -43,12 +43,11 @@ begin
43
43
 
44
44
  # appoptics_apm/loading can set AppOpticsAPM.loaded = false if the service key is not working
45
45
  require 'appoptics_apm/loading'
46
- require 'appoptics_apm/legacy_method_profiling'
47
- require 'appoptics_apm/method_profiling'
48
46
 
49
47
  if AppOpticsAPM.loaded
50
48
  require 'appoptics_apm/instrumentation'
51
49
  require 'appoptics_apm/support/transaction_metrics'
50
+ require 'appoptics_apm/support/x_trace_options'
52
51
 
53
52
  # Frameworks
54
53
  require 'appoptics_apm/frameworks/rails'
@@ -68,7 +67,6 @@ begin
68
67
  # Load Ruby module last. If there is no framework detected,
69
68
  # it will load all of the Ruby instrumentation
70
69
  require 'appoptics_apm/ruby'
71
- require 'oboe/backward_compatibility'
72
70
 
73
71
  require 'appoptics_apm/test' if ENV['APPOPTICS_GEM_TEST']
74
72
  rescue => e
@@ -6,7 +6,6 @@ module AppOpticsAPM
6
6
  module API
7
7
  extend AppOpticsAPM::API::Logging
8
8
  extend AppOpticsAPM::API::Metrics
9
- extend AppOpticsAPM::API::Profiling
10
9
  extend AppOpticsAPM::API::LayerInit
11
10
  extend AppOpticsAPM::API::Util
12
11
 
@@ -48,6 +48,10 @@ module AppOpticsAPM
48
48
  [start_trace_with_target(span, xtrace, target, opts) { yield }, target['X-Trace']]
49
49
  end
50
50
 
51
+ def profile_method(*args)
52
+ AppOpticsAPM.logger.warn("DEPRECATED: AppOpticsAPM::API.profile_method is deprecated. Use: AppOpticsAPM::SDK::trace_method")
53
+ AppOpticsAPM::SDK.trace_method(*args)
54
+ end
51
55
  end
52
56
  end
53
57
  end
@@ -16,13 +16,20 @@ module AppOpticsAPM
16
16
  @@instrumentation = [:action_controller, :action_controller_api, :action_view,
17
17
  :active_record, :bunnyclient, :bunnyconsumer, :cassandra, :curb,
18
18
  :dalli, :delayed_jobclient, :delayed_jobworker,
19
- :em_http_request, :excon, :faraday, :grpc_client, :grpc_server, :grape,
19
+ :excon, :faraday, :grpc_client, :grpc_server, :grape,
20
20
  :httpclient, :nethttp, :memcached, :mongo, :moped, :padrino, :rack, :redis,
21
21
  :resqueclient, :resqueworker, :rest_client,
22
22
  :sequel, :sidekiqclient, :sidekiqworker, :sinatra, :typhoeus]
23
23
 
24
+ # ignore configs for instrumentations we don't have anymore
25
+ # can't remove because the config may still be present in configs created
26
+ # with previous gem versions
27
+ @@ignore = [:em_http_request]
28
+
24
29
  # Subgrouping of instrumentation
25
- @@http_clients = [:curb, :excon, :em_http_request, :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]
30
+ @@http_clients = [:curb, :excon,
31
+ # :em_http_request,
32
+ :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]
26
33
 
27
34
  ##
28
35
  # load_config_file
@@ -136,7 +143,7 @@ module AppOpticsAPM
136
143
  #
137
144
  # rubocop:disable Metrics/AbcSize
138
145
  def self.initialize(_data = {})
139
- @@instrumentation.each { |k| @@config[k] = {} }
146
+ (@@instrumentation+@@ignore).each { |k| @@config[k] = {} }
140
147
  @@config[:transaction_name] = {}
141
148
 
142
149
  # Always load the template, it has all the keys and defaults defined,
@@ -240,11 +247,15 @@ module AppOpticsAPM
240
247
  end
241
248
 
242
249
  elsif key == :tracing_mode
243
- # CAN'T DO THIS ANYMORE, ALL TRACING COMMUNICATION TO OBOE
250
+ # CAN'T DO `set_tracing_mode` ANYMORE, ALL TRACING COMMUNICATION TO OBOE
244
251
  # IS NOW HANDLED BY TransactionSettings
245
252
  # AppOpticsAPM.set_tracing_mode(value.to_sym) if AppOpticsAPM.loaded
246
253
 
247
- # Make sure that the mode is stored as a symbol
254
+ # Make sure that the mode is stored as a symbol
255
+ @@config[key.to_sym] = value.to_sym
256
+
257
+ elsif key == :trigger_tracing_mode
258
+ # Make sure that the mode is stored as a symbol
248
259
  @@config[key.to_sym] = value.to_sym
249
260
  end
250
261
  end
@@ -38,47 +38,17 @@ module AppOpticsAPM
38
38
  end
39
39
 
40
40
  # TODO add test coverage, currently there are no tests for this
41
+ # ____ I'm not sure this gets ever called, Padrino uses Sinatra's render method
41
42
  def render_with_appoptics(engine, data = nil, options = {}, locals = {}, &block)
42
43
  if AppOpticsAPM.tracing?
43
44
  report_kvs = {}
44
45
 
45
- if data
46
- report_kvs[:engine] = engine
47
- report_kvs[:template] = data
48
- else
49
- report_kvs[:template] = engine
50
- end
51
-
52
- if AppOpticsAPM.tracing_layer_op?(:render)
53
- # For recursive calls to :render (for sub-partials and layouts),
54
- # use method profiling.
55
- begin
56
- report_kvs[:FunctionName] = :render
57
- report_kvs[:Class] = :Rendering
58
- report_kvs[:Module] = :Padrino
59
- report_kvs[:File] = __FILE__
60
- report_kvs[:LineNumber] = __LINE__
61
- rescue StandardError => e
62
- AppOpticsAPM.logger.debug "[appoptics_apm/padrino] #{e.message}"
63
- AppOpticsAPM.logger.debug e.backtrace.join(', ')
64
- end
65
-
66
- AppOpticsAPM::API.profile(report_kvs[:template], report_kvs, false) do
67
- render_without_appoptics(engine, data, options, locals, &block)
68
- end
69
- else
70
- # Fall back to the raw tracing API so we can pass KVs
71
- # back on exit (a limitation of the AppOpticsAPM::API.trace
72
- # block method) This removes the need for an info
73
- # event to send additonal KVs
74
- AppOpticsAPM::API.log_entry(:render, {}, :render)
46
+ report_kvs[:engine] = engine
47
+ report_kvs[:template] = data
75
48
 
76
- begin
77
- render_without_appoptics(engine, data, options, locals, &block)
78
- ensure
79
- report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:padrino][:collect_backtraces]
80
- AppOpticsAPM::API.log_exit(:render, report_kvs)
81
- end
49
+ AppOpticsAPM::SDK.trace(:padrino_render, report_kvs, :padrino_render) do
50
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:padrino][:collect_backtraces]
51
+ render_without_appoptics(engine, data, options, locals, &block)
82
52
  end
83
53
  else
84
54
  render_without_appoptics(engine, data, options, locals, &block)
@@ -48,7 +48,6 @@ module AppOpticsAPM
48
48
  # Load the Rails specific instrumentation
49
49
  require 'appoptics_apm/frameworks/rails/inst/action_controller'
50
50
  require 'appoptics_apm/frameworks/rails/inst/action_view'
51
- require 'appoptics_apm/frameworks/rails/inst/action_view_30'
52
51
  require 'appoptics_apm/frameworks/rails/inst/active_record'
53
52
  require 'appoptics_apm/frameworks/rails/inst/logger_formatters'
54
53
 
@@ -35,7 +35,7 @@ module AppOpticsAPM
35
35
  #
36
36
  # log_rails_error?
37
37
  #
38
- # Determins whether we should log a raised exception to the
38
+ # Determines whether we should log a raised exception to the
39
39
  # AppOptics dashboard. This is determined by whether the exception
40
40
  # has a rescue handler setup and the value of
41
41
  # AppOpticsAPM::Config[:report_rescued_errors]
@@ -84,18 +84,18 @@ module AppOpticsAPM
84
84
  end
85
85
 
86
86
  # ActionController::Base
87
- if defined?(ActionController::Base) && AppOpticsAPM::Config[:action_controller][:enabled]
87
+ if defined?(ActionController::Base) && AppOpticsAPM::Config[:action_controller][:enabled] && Rails::VERSION::MAJOR <= 6
88
88
  AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting actioncontroller' if AppOpticsAPM::Config[:verbose]
89
89
  require "appoptics_apm/frameworks/rails/inst/action_controller#{Rails::VERSION::MAJOR}"
90
90
  if Rails::VERSION::MAJOR >= 5
91
91
  ActionController::Base.send(:prepend, ::AppOpticsAPM::Inst::ActionController)
92
- else
92
+ elsif Rails::VERSION::MAJOR < 5
93
93
  AppOpticsAPM::Util.send_include(::ActionController::Base, AppOpticsAPM::Inst::ActionController)
94
94
  end
95
95
  end
96
96
 
97
- # ActionController::API - Rails 5+ or via the rails-api gem
98
- if defined?(ActionController::API) && AppOpticsAPM::Config[:action_controller_api][:enabled]
97
+ # ActionController::API - Rails 5 or via the rails-api gem
98
+ if defined?(ActionController::API) && AppOpticsAPM::Config[:action_controller_api][:enabled] && Rails::VERSION::MAJOR <= 6
99
99
  AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting actioncontroller api' if AppOpticsAPM::Config[:verbose]
100
100
  require "appoptics_apm/frameworks/rails/inst/action_controller_api"
101
101
  ActionController::API.send(:prepend, ::AppOpticsAPM::Inst::ActionControllerAPI)
@@ -0,0 +1,50 @@
1
+ # Copyright (c) 2016 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ module AppOpticsAPM
5
+ module Inst
6
+ #
7
+ # ActionController
8
+ #
9
+ # This modules contains the instrumentation code specific
10
+ # to Rails v6
11
+ #
12
+ module ActionController
13
+ include AppOpticsAPM::Inst::RailsBase
14
+
15
+ def process_action(method_name, *args)
16
+ kvs = {
17
+ :Controller => self.class.name,
18
+ :Action => self.action_name,
19
+ }
20
+ request.env['appoptics_apm.controller'] = kvs[:Controller]
21
+ request.env['appoptics_apm.action'] = kvs[:Action]
22
+
23
+ return super(method_name, *args) unless AppOpticsAPM.tracing?
24
+ begin
25
+ kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:action_controller][:collect_backtraces]
26
+
27
+ AppOpticsAPM::API.log_entry('rails', kvs)
28
+ super(method_name, *args)
29
+
30
+ rescue Exception => e
31
+ AppOpticsAPM::API.log_exception('rails', e) if log_rails_error?(e)
32
+ raise
33
+ ensure
34
+ AppOpticsAPM::API.log_exit('rails')
35
+ end
36
+ end
37
+
38
+ #
39
+ # render
40
+ #
41
+ # Our render wrapper that calls 'trace', which will log if we are tracing
42
+ #
43
+ def render(*args, &blk)
44
+ trace('actionview') do
45
+ super(*args, &blk)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -3,51 +3,38 @@
3
3
 
4
4
  if defined?(ActionView::Base) && AppOpticsAPM::Config[:action_view][:enabled]
5
5
 
6
- ##
7
- # ActionView Instrumentation is version dependent. ActionView 2.x is separate
8
- # and ActionView 3.0 is a special case.
9
- # Everything else goes here. (ActionView 3.1 - 4.0 as of this writing)
10
- #
11
- if (Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR > 0) || Rails::VERSION::MAJOR >= 4
6
+ if Rails::VERSION::MAJOR >= 4
12
7
 
13
8
  AppOpticsAPM.logger.info '[appoptics_apm/loading] Instrumenting actionview' if AppOpticsAPM::Config[:verbose]
14
9
 
15
10
  ActionView::PartialRenderer.class_eval do
16
11
  alias :render_partial_without_appoptics :render_partial
17
- def render_partial
12
+ def render_partial(*args)
18
13
  entry_kvs = {}
19
14
  begin
20
- name = AppOpticsAPM::Util.prettify(@options[:partial]) if @options.is_a?(Hash)
21
- entry_kvs[:FunctionName] = :render_partial
22
- entry_kvs[:Class] = :PartialRenderer
23
- entry_kvs[:Module] = :ActionView
24
- entry_kvs[:File] = __FILE__
25
- entry_kvs[:LineNumber] = __LINE__
15
+ entry_kvs[:Partial] = AppOpticsAPM::Util.prettify(@options[:partial]) if @options.is_a?(Hash)
26
16
  rescue => e
27
17
  AppOpticsAPM.logger.debug "[appoptics_apm/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if AppOpticsAPM::Config[:verbose]
28
18
  end
29
19
 
30
- AppOpticsAPM::API.profile(name, entry_kvs, AppOpticsAPM::Config[:action_view][:collect_backtraces]) do
31
- render_partial_without_appoptics
20
+ AppOpticsAPM::SDK.trace('partial', entry_kvs) do
21
+ entry_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:action_view][:collect_backtraces]
22
+ render_partial_without_appoptics(*args)
32
23
  end
33
24
  end
34
25
 
35
26
  alias :render_collection_without_appoptics :render_collection
36
- def render_collection
27
+ def render_collection(*args)
37
28
  entry_kvs = {}
38
29
  begin
39
- name = AppOpticsAPM::Util.prettify(@path)
40
- entry_kvs[:FunctionName] = :render_collection
41
- entry_kvs[:Class] = :PartialRenderer
42
- entry_kvs[:Module] = :ActionView
43
- entry_kvs[:File] = __FILE__
44
- entry_kvs[:LineNumber] = __LINE__
30
+ entry_kvs[:Partial] = AppOpticsAPM::Util.prettify(@path)
45
31
  rescue => e
46
32
  AppOpticsAPM.logger.debug "[appoptics_apm/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if AppOpticsAPM::Config[:verbose]
47
33
  end
48
34
 
49
- AppOpticsAPM::API.profile(name, entry_kvs, AppOpticsAPM::Config[:action_view][:collect_backtraces]) do
50
- render_collection_without_appoptics
35
+ AppOpticsAPM::SDK.trace('collection', entry_kvs) do
36
+ entry_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:action_view][:collect_backtraces]
37
+ render_collection_without_appoptics(*args)
51
38
  end
52
39
  end
53
40
 
@@ -5,19 +5,19 @@ require 'appoptics_apm/frameworks/rails/inst/connection_adapters/mysql'
5
5
  require 'appoptics_apm/frameworks/rails/inst/connection_adapters/mysql2'
6
6
  require 'appoptics_apm/frameworks/rails/inst/connection_adapters/postgresql'
7
7
 
8
- if AppOpticsAPM::Config[:active_record][:enabled] && !defined?(JRUBY_VERSION)
8
+ if AppOpticsAPM::Config[:active_record][:enabled] && !defined?(JRUBY_VERSION) && Rails::VERSION::MAJOR <= 6
9
9
  begin
10
10
  adapter = ActiveRecord::Base.connection_config[:adapter]
11
11
 
12
12
  if Rails::VERSION::MAJOR < 5
13
13
  require 'appoptics_apm/frameworks/rails/inst/connection_adapters/utils'
14
- else
14
+ elsif Rails::VERSION::MAJOR >= 5
15
15
  require 'appoptics_apm/frameworks/rails/inst/connection_adapters/utils5x'
16
16
  end
17
17
 
18
18
  AppOpticsAPM::Inst::ConnectionAdapters::FlavorInitializers.mysql if adapter == 'mysql'
19
19
  AppOpticsAPM::Inst::ConnectionAdapters::FlavorInitializers.mysql2 if adapter == 'mysql2'
20
- AppOpticsAPM::Inst::ConnectionAdapters::FlavorInitializers.postgresql if adapter == 'postgresql'
20
+ AppOpticsAPM::Inst::ConnectionAdapters::FlavorInitializers.postgresql if adapter =~ /postgresql|postgis/i
21
21
 
22
22
  rescue StandardError => e
23
23
  AppOpticsAPM.logger.error "[appoptics_apm/error] AppOpticsAPM/ActiveRecord error: #{e.inspect}"
@@ -29,7 +29,7 @@ module AppOpticsAPM
29
29
  case adapter_name
30
30
  when /mysql/i
31
31
  opts[:Flavor] = 'mysql'
32
- when /postgres/i
32
+ when /^postgres|^postgis/i
33
33
  opts[:Flavor] = 'postgresql'
34
34
  end
35
35
  end
@@ -35,7 +35,7 @@ module AppOpticsAPM
35
35
  case adapter_name
36
36
  when /mysql/i
37
37
  opts[:Flavor] = 'mysql'
38
- when /postgres/i
38
+ when /^postgres|^postgis/i
39
39
  opts[:Flavor] = 'postgresql'
40
40
  end
41
41
  end
@@ -61,38 +61,9 @@ module AppOpticsAPM
61
61
  report_kvs[:engine] = engine
62
62
  report_kvs[:template] = data
63
63
 
64
- if AppOpticsAPM.tracing_layer_op?(:render)
65
- # For recursive calls to :render (for sub-partials and layouts),
66
- # use method profiling.
67
- begin
68
- name = data
69
- report_kvs[:FunctionName] = :render
70
- report_kvs[:Class] = :Templates
71
- report_kvs[:Module] = :'Sinatra::Templates'
72
- report_kvs[:File] = __FILE__
73
- report_kvs[:LineNumber] = __LINE__
74
- rescue StandardError => e
75
- AppOpticsAPM.logger.debug e.message
76
- AppOpticsAPM.logger.debug e.backtrace.join(', ')
77
- end
78
-
79
- AppOpticsAPM::API.profile(name, report_kvs, false) do
80
- render_without_appoptics(engine, data, options, locals, &block)
81
- end
82
-
83
- else
84
- # Fall back to the raw tracing API so we can pass KVs
85
- # back on exit (a limitation of the AppOpticsAPM::API.trace
86
- # block method) This removes the need for an info
87
- # event to send additonal KVs
88
- AppOpticsAPM::API.log_entry(:render, {}, :render)
89
-
90
- begin
91
- render_without_appoptics(engine, data, options, locals, &block)
92
- ensure
93
- report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:sinatra][:collect_backtraces]
94
- AppOpticsAPM::API.log_exit(:render, report_kvs, :render)
95
- end
64
+ AppOpticsAPM::SDK.trace(:sinatra_render, report_kvs, :sinatra_render) do
65
+ report_kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:sinatra][:collect_backtraces]
66
+ render_without_appoptics(engine, data, options, locals, &block)
96
67
  end
97
68
  else
98
69
  render_without_appoptics(engine, data, options, locals, &block)
@@ -46,12 +46,12 @@ module AppOpticsAPM
46
46
  end
47
47
 
48
48
  ##
49
- # profile_curb_method
49
+ # trace_curb_method
50
50
  #
51
51
  # An agnostic method that will profile any Curl::Easy method (and optional args and block)
52
52
  # that you throw at it.
53
53
  #
54
- def profile_curb_method(kvs, method, args, &block)
54
+ def trace_curb_method(kvs, method, args, &block)
55
55
  # If we're not tracing, just do a fast return.
56
56
  unless AppOpticsAPM.tracing?
57
57
  unless AppOpticsAPM::API.blacklisted?(URI(url).hostname)
@@ -129,7 +129,7 @@ module AppOpticsAPM
129
129
  kvs = {}
130
130
  kvs[:HTTPMethod] = :POST
131
131
 
132
- profile_curb_method(kvs, :http_post_without_appoptics, args, &block)
132
+ trace_curb_method(kvs, :http_post_without_appoptics, args, &block)
133
133
  end
134
134
 
135
135
  ##
@@ -149,7 +149,7 @@ module AppOpticsAPM
149
149
  kvs = {}
150
150
  kvs[:HTTPMethod] = :PUT
151
151
 
152
- profile_curb_method(kvs, :http_put_without_appoptics, args, &block)
152
+ trace_curb_method(kvs, :http_put_without_appoptics, args, &block)
153
153
  end
154
154
 
155
155
  ##
@@ -178,7 +178,7 @@ module AppOpticsAPM
178
178
  kvs[:HTTPMethod] = :GET
179
179
  end
180
180
 
181
- profile_curb_method(kvs, :perform_without_appoptics, nil, &block)
181
+ trace_curb_method(kvs, :perform_without_appoptics, nil, &block)
182
182
  end
183
183
 
184
184
  ##
@@ -198,7 +198,7 @@ module AppOpticsAPM
198
198
  kvs = {}
199
199
  kvs[:HTTPMethod] = verb
200
200
 
201
- profile_curb_method(kvs, :http_without_appoptics, [verb], &block)
201
+ trace_curb_method(kvs, :http_without_appoptics, [verb], &block)
202
202
  end
203
203
  end
204
204
 
@@ -37,7 +37,15 @@ module AppOpticsAPM
37
37
  AppOpticsAPM::XTrace.continue_service_context(xtrace, xtrace_new)
38
38
  end
39
39
  kvs = {}
40
- kvs[:Middleware] = @builder.handlers
40
+
41
+ # this seems the safer condition than trying to identify the
42
+ # faraday version when adapter started to work without arg
43
+ # and handlers don't include the adapter anymore
44
+ if @builder.method(:adapter).parameters.find { |ele| ele[0] == :req }
45
+ kvs[:Middleware] = @builder.handlers
46
+ else
47
+ kvs[:Middleware] = [@builder.adapter] + @builder.handlers
48
+ end
41
49
  kvs[:Backtrace] = AppOpticsAPM::API.backtrace if AppOpticsAPM::Config[:faraday][:collect_backtraces]
42
50
 
43
51
  # Only send service KVs if we're not using an adapter
@@ -68,16 +76,20 @@ module AppOpticsAPM
68
76
 
69
77
  # This is only considered a remote service call if the middleware/adapter is not instrumented
70
78
  def remote_call?
71
- (@builder.handlers.map(&:name) & APPOPTICS_INSTR_ADAPTERS).count == 0
79
+ if @builder.method(:adapter).parameters.find { |ele| ele[0] == :req }
80
+ (@builder.handlers.map(&:name) & APPOPTICS_INSTR_ADAPTERS).count == 0
81
+ else
82
+ ((@builder.handlers.map(&:name) << @builder.adapter.name) & APPOPTICS_INSTR_ADAPTERS).count == 0
83
+ end
72
84
  end
73
85
 
74
- def rsc_kvs(url, method, result)
86
+ def rsc_kvs(_url, method, result)
75
87
  kvs = { :Spec => 'rsc',
76
88
  :IsService => 1,
77
89
  :HTTPMethod => method.upcase,
78
90
  :HTTPStatus => result.status, }
79
91
  kvs[:Blacklisted] = true if url_blacklisted?
80
- kvs[:RemoteURL] = result.to_hash[:url].to_s
92
+ kvs[:RemoteURL] = result.env.to_hash[:url].to_s
81
93
  kvs[:RemoteURL].split('?').first unless AppOpticsAPM::Config[:faraday][:log_args]
82
94
 
83
95
  kvs