class Datadog::Contrib::Faraday::Middleware
Middleware
implements a faraday-middleware for ddtrace instrumentation
Attributes
app[R]
Public Class Methods
new(app, options = {})
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/faraday/middleware.rb, line 19 def initialize(app, options = {}) super(app) @options = options end
Public Instance Methods
call(env)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 24 def call(env) # Resolve configuration settings to use for this request. # Do this once to reduce expensive regex calls. request_options = build_request_options!(env) request_options[:tracer].trace(Ext::SPAN_REQUEST) do |span| annotate!(span, env, request_options) propagate!(span, env) if request_options[:distributed_tracing] && request_options[:tracer].enabled app.call(env).on_complete { |resp| handle_response(span, resp, request_options) } end end
Private Instance Methods
annotate!(span, env, options)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 40 def annotate!(span, env, options) span.resource = resource_name(env) service_name(env[:url].host, options) span.service = options[:split_by_domain] ? env[:url].host : options[:service_name] span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND # Tag as an external peer service span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service) # Set analytics sample rate if Contrib::Analytics.enabled?(options[:analytics_enabled]) Contrib::Analytics.set_sample_rate(span, options[:analytics_sample_rate]) end span.set_tag(Datadog::Ext::HTTP::URL, env[:url].path) span.set_tag(Datadog::Ext::HTTP::METHOD, env[:method].to_s.upcase) span.set_tag(Datadog::Ext::NET::TARGET_HOST, env[:url].host) span.set_tag(Datadog::Ext::NET::TARGET_PORT, env[:url].port) end
build_request_options!(env)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 74 def build_request_options!(env) datadog_configuration.options_hash # integration level settings .merge(datadog_configuration(env[:url].host).options_hash) # per-host override .merge(@options) # middleware instance override end
datadog_configuration(host = :default)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 80 def datadog_configuration(host = :default) Datadog.configuration[:faraday, host] end
handle_response(span, env, options)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 60 def handle_response(span, env, options) span.set_error(["Error #{env[:status]}", env[:body]]) if options.fetch(:error_handler).call(env) span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, env[:status]) end
propagate!(span, env)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 66 def propagate!(span, env) Datadog::HTTPPropagator.inject!(span.context, env[:request_headers]) end
resource_name(env)
click to toggle source
# File lib/ddtrace/contrib/faraday/middleware.rb, line 70 def resource_name(env) env[:method].to_s.upcase end