Sha256: 055ba72f1f8fc9bd557fafd580e3f8bb86784a0d0eed2676f1b65f118f0a0758

Contents?: true

Size: 1.43 KB

Versions: 21

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

require_relative '../../../core/transport/ext'

module Datadog
  module Tracing
    module Contrib
      module HTTP
        # HTTP integration circuit breaker behavior
        # For avoiding recursive traces.
        module CircuitBreaker
          def should_skip_tracing?(request)
            return true if internal_request?(request)

            # we don't want a "shotgun" effect with two nested traces for one
            # logical get, and request is likely to call itself recursively
            active = Tracing.active_span
            return true if active && (active.name == Ext::SPAN_REQUEST)

            false
          end

          # We don't want to trace our own call to the API (they use net/http)
          # TODO: We don't want this kind of soft-check on HTTP requests.
          #       Remove this when transport implements its own "skip tracing" mechanism.
          def internal_request?(request)
            !!(request[Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION] ||
              request[Datadog::Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST])
          end

          def should_skip_distributed_tracing?(client_config)
            return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)

            !Datadog.configuration.tracing[:http][:distributed_tracing]
          end
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 2 rubygems

Version Path
datadog-2.4.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
datadog-2.3.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
datadog-2.2.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.23.3 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.23.2 lib/datadog/tracing/contrib/http/circuit_breaker.rb
datadog-2.1.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
datadog-2.0.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.23.1 lib/datadog/tracing/contrib/http/circuit_breaker.rb
datadog-2.0.0.beta2 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.22.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
datadog-2.0.0.beta1 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.21.1 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.21.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.20.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.19.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.18.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.17.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.16.2 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.16.1 lib/datadog/tracing/contrib/http/circuit_breaker.rb
ddtrace-1.16.0 lib/datadog/tracing/contrib/http/circuit_breaker.rb