Class: Datadog::Contrib::Excon::Middleware
- Inherits:
-
Excon::Middleware::Base
- Object
- Excon::Middleware::Base
- Datadog::Contrib::Excon::Middleware
- 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
Constructor Details
#initialize(stack, options = {}) ⇒ Middleware
Returns a new instance of Middleware.
18 19 20 21 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 18 def initialize(stack, = {}) super(stack) @options = Datadog.configuration[:excon]..merge() end |
Class Method Details
.around_default_stack ⇒ Object
Returns a copy of the default stack with the trace middleware injected
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 68 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.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 52 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
45 46 47 48 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 45 def error_call(datum) handle_response(datum) @stack.error_call(datum) end |
#request_call(datum) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 23 def request_call(datum) begin unless datum.key?(:datadog_span) 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::Tracer.log.debug(e.) end @stack.request_call(datum) end |
#response_call(datum) ⇒ Object
39 40 41 42 43 |
# File 'lib/ddtrace/contrib/excon/middleware.rb', line 39 def response_call(datum) @stack.response_call(datum).tap do |d| handle_response(d) end end |