Skip to content

Commit 91f2f68

Browse files
committed
Add should_skip_distributed_tracing? method
1 parent a9473aa commit 91f2f68

File tree

20 files changed

+164
-184
lines changed

20 files changed

+164
-184
lines changed

lib/datadog/tracing/contrib/ethon/easy_patch.rb

+4-12
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,10 @@ def datadog_before_request(continue_from: nil)
110110

111111
datadog_tag_request
112112

113-
unless should_skip_distributed_tracing?(datadog_trace)
113+
unless Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
114+
datadog_config: datadog_configuration,
115+
trace: datadog_trace
116+
)
114117
@datadog_original_headers ||= {}
115118
Contrib::HTTP.inject(datadog_trace, @datadog_original_headers)
116119
self.headers = @datadog_original_headers
@@ -215,17 +218,6 @@ def parse_response_headers
215218
header.size != 2 ? nil : header
216219
end.compact.to_h
217220
end
218-
219-
# Skips distributed tracing if disabled for this instrumentation
220-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
221-
def should_skip_distributed_tracing?(trace)
222-
if Datadog.configuration.appsec.standalone.enabled &&
223-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
224-
return true
225-
end
226-
227-
!datadog_configuration[:distributed_tracing]
228-
end
229221
end
230222
end
231223
end

lib/datadog/tracing/contrib/excon/middleware.rb

+6-12
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ def request_call(datum)
3030
trace = Tracing.active_trace
3131
datum[:datadog_span] = span
3232
annotate!(span, datum)
33-
propagate!(trace, span, datum) unless should_skip_distributed_tracing?(trace)
33+
if Tracing.enabled? && !Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
34+
datadog_config: @options,
35+
trace: trace
36+
)
37+
propagate!(trace, span, datum)
38+
end
3439

3540
span
3641
end
@@ -189,17 +194,6 @@ def build_request_options!(datum)
189194
def datadog_configuration(host = :default)
190195
Datadog.configuration.tracing[:excon, host]
191196
end
192-
193-
# Skips distributed tracing if disabled for this instrumentation
194-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
195-
def should_skip_distributed_tracing?(trace)
196-
if Datadog.configuration.appsec.standalone.enabled &&
197-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
198-
return true
199-
end
200-
201-
!distributed_tracing?
202-
end
203197
end
204198
end
205199
end

lib/datadog/tracing/contrib/faraday/middleware.rb

+6-12
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ def call(env)
2929

3030
Tracing.trace(Ext::SPAN_REQUEST, on_error: request_options[:on_error]) do |span, trace|
3131
annotate!(span, env, request_options)
32-
propagate!(trace, span, env) if Tracing.enabled? && !should_skip_distributed_tracing?(request_options, trace)
32+
if Tracing.enabled? && !Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
33+
datadog_config: request_options,
34+
trace: trace
35+
)
36+
propagate!(trace, span, env)
37+
end
3338
app.call(env).on_complete { |resp| handle_response(span, resp, request_options) }
3439
end
3540
end
@@ -114,17 +119,6 @@ def build_request_options!(env)
114119
def datadog_configuration(host = :default)
115120
Datadog.configuration.tracing[:faraday, host]
116121
end
117-
118-
# Skips distributed tracing if disabled for this instrumentation
119-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
120-
def should_skip_distributed_tracing?(client_config, trace)
121-
if Datadog.configuration.appsec.standalone.enabled &&
122-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
123-
return true
124-
end
125-
126-
!client_config[:distributed_tracing]
127-
end
128122
end
129123
end
130124
end

lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb

+6-12
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,12 @@ def annotate!(trace, span, keywords, formatter)
8181
# Set analytics sample rate
8282
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
8383

84-
GRPC.inject(trace, metadata) unless should_skip_distributed_tracing?(trace)
84+
unless Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
85+
datadog_config: Datadog.configuration_for(self) || datadog_configuration,
86+
trace: trace
87+
)
88+
GRPC.inject(trace, metadata)
89+
end
8590
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
8691
rescue StandardError => e
8792
Datadog.logger.debug("GRPC client trace failed: #{e}")
@@ -109,17 +114,6 @@ def find_host_port(call)
109114
Datadog.logger.debug { "Could not parse host:port from #{call}: #{e}" }
110115
nil
111116
end
112-
113-
# Skips distributed tracing if disabled for this instrumentation
114-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
115-
def should_skip_distributed_tracing?(trace)
116-
if Datadog.configuration.appsec.standalone.enabled &&
117-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
118-
return true
119-
end
120-
121-
!distributed_tracing?
122-
end
123117
end
124118
end
125119
end

lib/datadog/tracing/contrib/grpc/distributed/propagation.rb

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require_relative 'fetcher'
44
require_relative '../../../distributed/b3_multi'
55
require_relative '../../../distributed/b3_single'
6+
require_relative '../../../distributed/circuit_breaker'
67
require_relative '../../../distributed/datadog'
78
require_relative '../../../distributed/none'
89
require_relative '../../../distributed/propagation'

lib/datadog/tracing/contrib/http/circuit_breaker.rb

-13
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,6 @@ def internal_request?(request)
2727
!!(request[Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION] ||
2828
request[Datadog::Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST])
2929
end
30-
31-
# Skips distributed tracing if disabled for this instrumentation
32-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
33-
def should_skip_distributed_tracing?(client_config, trace)
34-
if Datadog.configuration.appsec.standalone.enabled &&
35-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
36-
return true
37-
end
38-
39-
return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
40-
41-
!Datadog.configuration.tracing[:http][:distributed_tracing]
42-
end
4330
end
4431
end
4532
end

lib/datadog/tracing/contrib/http/distributed/propagation.rb

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require_relative 'fetcher'
44
require_relative '../../../distributed/propagation'
5+
require_relative '../../../distributed/circuit_breaker'
56
require_relative '../../../distributed/b3_multi'
67
require_relative '../../../distributed/b3_single'
78
require_relative '../../../distributed/datadog'

lib/datadog/tracing/contrib/http/instrumentation.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ def request(req, body = nil, &block)
3535
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
3636
span.resource = req.method
3737

38-
if Tracing.enabled? && !Contrib::HTTP.should_skip_distributed_tracing?(client_config, trace)
38+
if Tracing.enabled? && !Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
39+
client_config: client_config,
40+
datadog_config: Datadog.configuration.tracing[:http],
41+
trace: trace
42+
)
3943
Contrib::HTTP.inject(trace, req)
4044
end
4145

lib/datadog/tracing/contrib/httpclient/instrumentation.rb

+5-14
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ def do_get_block(req, proxy, conn, &block)
3030
span.service = service_name(host, request_options, client_config)
3131
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
3232

33-
if Tracing.enabled? && !should_skip_distributed_tracing?(client_config, trace)
33+
if Tracing.enabled? && !Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
34+
client_config: client_config,
35+
datadog_config: Datadog.configuration.tracing[:httpclient],
36+
trace: trace
37+
)
3438
Contrib::HTTP.inject(trace, req.header)
3539
end
3640

@@ -119,19 +123,6 @@ def analytics_enabled?(request_options)
119123
Contrib::Analytics.enabled?(request_options[:analytics_enabled])
120124
end
121125

122-
# Skips distributed tracing if disabled for this instrumentation
123-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
124-
def should_skip_distributed_tracing?(client_config, trace)
125-
if Datadog.configuration.appsec.standalone.enabled &&
126-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
127-
return true
128-
end
129-
130-
return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
131-
132-
!Datadog.configuration.tracing[:httpclient][:distributed_tracing]
133-
end
134-
135126
def set_analytics_sample_rate(span, request_options)
136127
return unless analytics_enabled?(request_options)
137128

lib/datadog/tracing/contrib/httprb/instrumentation.rb

+5-14
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ def perform(req, options)
3030
span.service = service_name(host, request_options, client_config)
3131
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
3232

33-
if Tracing.enabled? && !should_skip_distributed_tracing?(client_config, trace)
33+
if Tracing.enabled? && !Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
34+
client_config: client_config,
35+
datadog_config: Datadog.configuration.tracing[:httprb],
36+
trace: trace
37+
)
3438
Contrib::HTTP.inject(trace, req)
3539
end
3640

@@ -133,19 +137,6 @@ def logger
133137
Datadog.logger
134138
end
135139

136-
# Skips distributed tracing if disabled for this instrumentation
137-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
138-
def should_skip_distributed_tracing?(client_config, trace)
139-
if Datadog.configuration.appsec.standalone.enabled &&
140-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
141-
return true
142-
end
143-
144-
return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
145-
146-
!Datadog.configuration.tracing[:httprb][:distributed_tracing]
147-
end
148-
149140
def set_analytics_sample_rate(span, request_options)
150141
return unless analytics_enabled?(request_options)
151142

lib/datadog/tracing/contrib/rest_client/request_patch.rb

+6-12
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ def execute(&block)
2525
return super(&block) unless Tracing.enabled?
2626

2727
datadog_trace_request(uri) do |_span, trace|
28-
Contrib::HTTP.inject(trace, processed_headers) unless should_skip_distributed_tracing?(trace)
28+
unless Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
29+
datadog_config: datadog_configuration,
30+
trace: trace
31+
)
32+
Contrib::HTTP.inject(trace, processed_headers)
33+
end
2934

3035
super(&block)
3136
end
@@ -121,17 +126,6 @@ def analytics_enabled?
121126
def analytics_sample_rate
122127
datadog_configuration[:analytics_sample_rate]
123128
end
124-
125-
# Skips distributed tracing if disabled for this instrumentation
126-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
127-
def should_skip_distributed_tracing?(trace)
128-
if Datadog.configuration.appsec.standalone.enabled &&
129-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
130-
return true
131-
end
132-
133-
!datadog_configuration[:distributed_tracing]
134-
end
135129
end
136130
end
137131
end

lib/datadog/tracing/contrib/sidekiq/client_tracer.rb

+6-12
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ def call(worker_class, job, queue, redis_pool)
2424
resource = job_resource(job)
2525

2626
Datadog::Tracing.trace(Ext::SPAN_PUSH, service: @sidekiq_service) do |span, trace_op|
27-
Sidekiq.inject(trace_op, job) unless should_skip_distributed_tracing?(trace_op)
27+
unless Tracing::Distributed::CircuitBreaker.should_skip_distributed_tracing?(
28+
datadog_config: configuration,
29+
trace: trace_op
30+
)
31+
Sidekiq.inject(trace_op, job)
32+
end
2833

2934
span.resource = resource
3035

@@ -55,17 +60,6 @@ def call(worker_class, job, queue, redis_pool)
5560
def configuration
5661
Datadog.configuration.tracing[:sidekiq]
5762
end
58-
59-
# Skips distributed tracing if disabled for this instrumentation
60-
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
61-
def should_skip_distributed_tracing?(trace)
62-
if Datadog.configuration.appsec.standalone.enabled &&
63-
(trace.nil? || trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
64-
return true
65-
end
66-
67-
!configuration[:distributed_tracing]
68-
end
6963
end
7064
end
7165
end

lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require_relative '../../../distributed/fetcher'
44
require_relative '../../../distributed/propagation'
5+
require_relative '../../../distributed/circuit_breaker'
56
require_relative '../../../distributed/b3_multi'
67
require_relative '../../../distributed/b3_single'
78
require_relative '../../../distributed/datadog'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
module Datadog
4+
module Tracing
5+
module Distributed
6+
# Helper method to decide when to skip distributed tracing
7+
module CircuitBreaker
8+
module_function
9+
10+
# Skips distributed tracing if disabled for this instrumentation
11+
# or if APM is disabled unless there is an AppSec event (from upstream distributed trace or local)
12+
def should_skip_distributed_tracing?(client_config: nil, datadog_config: nil, trace: nil)
13+
if ::Datadog.configuration.appsec.standalone.enabled &&
14+
(trace.nil? || trace.get_tag(::Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1')
15+
return true
16+
end
17+
18+
return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
19+
return !datadog_config[:distributed_tracing] if datadog_config
20+
21+
false
22+
end
23+
end
24+
end
25+
end
26+
end

sig/datadog/tracing/contrib/http/circuit_breaker.rbs

-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ module Datadog
55
module CircuitBreaker
66
def should_skip_tracing?: (untyped request) -> (true | false)
77
def internal_request?: (untyped request) -> bool
8-
9-
def should_skip_distributed_tracing?: (untyped client_config) -> untyped
108
end
119
end
1210
end

sig/datadog/tracing/contrib/httpclient/instrumentation.rbs

-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ module Datadog
2323

2424
def logger: () -> untyped
2525

26-
def should_skip_distributed_tracing?: (untyped client_config) -> untyped
27-
2826
def set_analytics_sample_rate: (untyped span, untyped request_options) -> (nil | untyped)
2927
end
3028
end

sig/datadog/tracing/contrib/httprb/instrumentation.rbs

-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ module Datadog
2323

2424
def logger: () -> untyped
2525

26-
def should_skip_distributed_tracing?: (untyped client_config) -> untyped
27-
2826
def set_analytics_sample_rate: (untyped span, untyped request_options) -> (nil | untyped)
2927
end
3028
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Datadog
2+
module Tracing
3+
module Distributed
4+
module CircuitBreaker
5+
def self.should_skip_distributed_tracing?: (?client_config: Hash[Symbol, untyped]?, ?datadog_config: Datadog::Tracing::Contrib::Configuration::Settings?, ?trace: Datadog::Tracing::TraceOperation?) -> bool
6+
end
7+
end
8+
end
9+
end

0 commit comments

Comments
 (0)