Class: Datadog::Contrib::Excon::Middleware
- Inherits:
-
Excon::Middleware::Base
- Object
- Excon::Middleware::Base
- Datadog::Contrib::Excon::Middleware
- Includes:
- HttpAnnotationHelper
- Defined in:
- lib/ddtrace/contrib/excon/middleware.rb
Overview
Middleware implements an excon-middleware for ddtrace instrumentation
Constant Summary collapse
- DEFAULT_ERROR_HANDLER =
lambda do |response| Datadog::Ext::HTTP::ERROR_RANGE.cover?(response[:status]) end
Class Method Summary collapse
-
.around_default_stack ⇒ Object
Returns a copy of the default stack with the trace middleware injected.
-
.with(options = {}) ⇒ Object
Returns a child class of this trace middleware With options given as defaults.
Instance Method Summary collapse
- #error_call(datum) ⇒ Object
-
#initialize(stack, options = {}) ⇒ Middleware
constructor
A new instance of Middleware.
- #request_call(datum) ⇒ Object
- #response_call(datum) ⇒ Object
Methods included from HttpAnnotationHelper
Constructor Details
#initialize(stack, options = {}) ⇒ Middleware
Returns a new instance of Middleware.
21 22 23 24 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 21 def initialize(stack, = {}) super(stack) @default_options = datadog_configuration..merge() end |
Class Method Details
.around_default_stack ⇒ Object
Returns a copy of the default stack with the trace middleware injected
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 72 def self.around_default_stack ::Excon.defaults[:middlewares].dup.tap do |default_stack| # If the default stack contains a version of the trace middleware already... existing_trace_middleware = default_stack.find { |m| m <= Middleware } default_stack.delete(existing_trace_middleware) if existing_trace_middleware # Inject after the ResponseParser middleware response_middleware_index = default_stack.index(::Excon::Middleware::ResponseParser).to_i default_stack.insert(response_middleware_index + 1, self) end end |
.with(options = {}) ⇒ Object
Returns a child class of this trace middleware With options given as defaults.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 56 def self.with( = {}) Class.new(self) do @options = # rubocop:disable Style/TrivialAccessors def self. @options end def initialize(stack) super(stack, self.class.) end end end |
Instance Method Details
#error_call(datum) ⇒ Object
49 50 51 52 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 49 def error_call(datum) handle_response(datum) @stack.error_call(datum) end |
#request_call(datum) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 26 def request_call(datum) begin unless datum.key?(:datadog_span) @options = (datum) tracer.trace(Ext::SPAN_REQUEST).tap do |span| datum[:datadog_span] = span annotate!(span, datum) propagate!(span, datum) if distributed_tracing? end end rescue StandardError => e Datadog.logger.debug(e.) end @stack.request_call(datum) end |
#response_call(datum) ⇒ Object
43 44 45 46 47 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 43 def response_call(datum) @stack.response_call(datum).tap do |d| handle_response(d) end end |