ddtrace 1.6.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +89 -2
- data/README.md +2 -2
- data/ext/ddtrace_profiling_loader/extconf.rb +5 -2
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +1 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +3 -2
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +81 -47
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +1 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +332 -125
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +11 -13
- data/ext/ddtrace_profiling_native_extension/extconf.rb +22 -8
- data/ext/ddtrace_profiling_native_extension/helpers.h +5 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +8 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +111 -26
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +9 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +205 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +86 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +28 -6
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +84 -35
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +1 -0
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
- data/lib/datadog/appsec/assets/blocked.html +98 -3
- data/lib/datadog/appsec/assets/blocked.json +1 -0
- data/lib/datadog/appsec/assets/blocked.text +5 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +35 -46
- data/lib/datadog/appsec/assets/waf_rules/risky.json +1 -1
- data/lib/datadog/appsec/assets/waf_rules/strict.json +46 -1
- data/lib/datadog/appsec/assets.rb +2 -2
- data/lib/datadog/appsec/configuration/settings.rb +6 -0
- data/lib/datadog/appsec/configuration.rb +4 -0
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +4 -8
- data/lib/datadog/appsec/contrib/rack/request.rb +17 -0
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +3 -6
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -8
- data/lib/datadog/appsec/extensions.rb +10 -0
- data/lib/datadog/appsec/processor.rb +18 -0
- data/lib/datadog/appsec/response.rb +54 -0
- data/lib/datadog/core/configuration/components.rb +27 -6
- data/lib/datadog/core/configuration/ext.rb +18 -0
- data/lib/datadog/core/configuration/settings.rb +14 -341
- data/lib/datadog/core/diagnostics/health.rb +4 -22
- data/lib/datadog/core/environment/variable_helpers.rb +58 -10
- data/lib/datadog/core/runtime/ext.rb +1 -1
- data/lib/datadog/core/utils.rb +0 -21
- data/lib/datadog/core.rb +21 -1
- data/lib/datadog/opentracer/distributed_headers.rb +7 -9
- data/lib/datadog/opentracer/rack_propagator.rb +0 -3
- data/lib/datadog/opentracer/text_map_propagator.rb +5 -7
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +10 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +20 -5
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
- data/lib/datadog/profiling/collectors/old_stack.rb +7 -0
- data/lib/datadog/profiling/exporter.rb +5 -0
- data/lib/datadog/profiling/old_recorder.rb +8 -0
- data/lib/datadog/profiling/profiler.rb +7 -0
- data/lib/datadog/profiling/scheduler.rb +4 -7
- data/lib/datadog/profiling/stack_recorder.rb +36 -0
- data/lib/datadog/profiling/tasks/setup.rb +0 -7
- data/lib/datadog/profiling.rb +2 -0
- data/lib/datadog/tracing/configuration/ext.rb +33 -3
- data/lib/datadog/tracing/configuration/settings.rb +433 -0
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +6 -1
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +6 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +6 -12
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +27 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +43 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +6 -1
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +32 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +38 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +6 -1
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +6 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/patcher.rb +3 -2
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/pg/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +12 -2
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +10 -12
- data/lib/datadog/tracing/contrib/que/tracer.rb +2 -0
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +4 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +4 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +2 -0
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/redis/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +30 -21
- data/lib/datadog/tracing/contrib/redis/integration.rb +34 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +18 -14
- data/lib/datadog/tracing/contrib/redis/quantize.rb +12 -9
- data/lib/datadog/tracing/contrib/redis/tags.rb +4 -6
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +72 -0
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +2 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +6 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +5 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +2 -0
- data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -6
- data/lib/datadog/tracing/diagnostics/health.rb +40 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +66 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +66 -0
- data/lib/datadog/tracing/distributed/datadog.rb +153 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +1 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +30 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +18 -16
- data/lib/datadog/tracing/distributed/helpers.rb +9 -7
- data/lib/datadog/tracing/distributed/none.rb +19 -0
- data/lib/datadog/tracing/distributed/propagation.rb +127 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +369 -0
- data/lib/datadog/tracing/metadata/ext.rb +1 -1
- data/lib/datadog/tracing/propagation/http.rb +3 -106
- data/lib/datadog/tracing/sampling/priority_sampler.rb +11 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +3 -3
- data/lib/datadog/tracing/span.rb +3 -19
- data/lib/datadog/tracing/span_operation.rb +5 -4
- data/lib/datadog/tracing/trace_digest.rb +75 -2
- data/lib/datadog/tracing/trace_operation.rb +5 -4
- data/lib/datadog/tracing/trace_segment.rb +1 -1
- data/lib/datadog/tracing/utils.rb +50 -0
- data/lib/ddtrace/transport/trace_formatter.rb +2 -5
- data/lib/ddtrace/version.rb +2 -2
- metadata +35 -15
- data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
- data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -144
- data/lib/datadog/tracing/distributed/headers/parser.rb +0 -37
- data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
- data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
- data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
- data/lib/datadog/tracing/propagation/grpc.rb +0 -98
|
@@ -6,6 +6,70 @@ module Datadog
|
|
|
6
6
|
# Used to propagate context and continue traces across execution boundaries.
|
|
7
7
|
# @public_api
|
|
8
8
|
class TraceDigest
|
|
9
|
+
# @!attribute [r] span_id
|
|
10
|
+
# Datadog id for the currently active span.
|
|
11
|
+
# @return [Integer]
|
|
12
|
+
# @!attribute [r] span_name
|
|
13
|
+
# The operation name of the currently active span.
|
|
14
|
+
# @return [String]
|
|
15
|
+
# @!attribute [r] span_resource
|
|
16
|
+
# The resource name of the currently active span.
|
|
17
|
+
# @return [String]
|
|
18
|
+
# @!attribute [r] span_service
|
|
19
|
+
# The service of the currently active span.
|
|
20
|
+
# @return [String]
|
|
21
|
+
# @!attribute [r] span_type
|
|
22
|
+
# The type of the currently active span.
|
|
23
|
+
# @return [String]
|
|
24
|
+
# @!attribute [r] trace_distributed_tags
|
|
25
|
+
# Datadog-specific tags that support richer distributed tracing association.
|
|
26
|
+
# @return [Hash<String,String>]
|
|
27
|
+
# @!attribute [r] trace_hostname
|
|
28
|
+
# The hostname of the currently active trace. Use to attribute traces to hosts.
|
|
29
|
+
# @return [String]
|
|
30
|
+
# @!attribute [r] trace_id
|
|
31
|
+
# Datadog id for the currently active trace.
|
|
32
|
+
# @return [Integer]
|
|
33
|
+
# @!attribute [r] trace_name
|
|
34
|
+
# Operation name for the currently active trace.
|
|
35
|
+
# @return [Integer]
|
|
36
|
+
# @!attribute [r] trace_origin
|
|
37
|
+
# Datadog-specific attribution of this trace's creation.
|
|
38
|
+
# @return [String]
|
|
39
|
+
# @!attribute [r] trace_process_id
|
|
40
|
+
# The OS-specific process id.
|
|
41
|
+
# @return [Integer]
|
|
42
|
+
# @!attribute [r] trace_resource
|
|
43
|
+
# The resource name of the currently active trace.
|
|
44
|
+
# @return [String]
|
|
45
|
+
# @!attribute [r] trace_runtime_id
|
|
46
|
+
# Unique id to this Ruby process. Used to differentiate traces coming from
|
|
47
|
+
# child processes forked from same parent process.
|
|
48
|
+
# @return [String]
|
|
49
|
+
# @!attribute [r] trace_sampling_priority
|
|
50
|
+
# Datadog-specific sampling decision for the currently active trace.
|
|
51
|
+
# @return [Integer]
|
|
52
|
+
# @!attribute [r] trace_service
|
|
53
|
+
# The service of the currently active trace.
|
|
54
|
+
# @return [String]
|
|
55
|
+
# @!attribute [r] trace_distributed_id
|
|
56
|
+
# The trace id extracted from a distributed context, if different from `trace_id`.
|
|
57
|
+
#
|
|
58
|
+
# The current use case is when the distributed context has a trace id integer larger than 64-bit:
|
|
59
|
+
# This attribute will preserve the original id, while `trace_id` will only contain the lower 64 bits.
|
|
60
|
+
# @return [Integer]
|
|
61
|
+
# @see https://www.w3.org/TR/trace-context/#trace-id
|
|
62
|
+
# @!attribute [r] trace_tracestate
|
|
63
|
+
# The W3C "tracestate" extracted from a distributed context.
|
|
64
|
+
# This field is a string representing vendor-specific distribution data.
|
|
65
|
+
# @return [String]
|
|
66
|
+
# @see https://www.w3.org/TR/trace-context/#tracestate-header
|
|
67
|
+
# @!attribute [r] trace_flags
|
|
68
|
+
# The W3C "trace-flags" extracted from a distributed context. This field is an 8-bit unsigned integer.
|
|
69
|
+
# @return [Integer]
|
|
70
|
+
# @see https://www.w3.org/TR/trace-context/#trace-flags
|
|
71
|
+
# TODO: The documentation for the last attribute above won't be rendered.
|
|
72
|
+
# TODO: This might be a YARD bug as adding an attribute, making it now second-last attribute, renders correctly.
|
|
9
73
|
attr_reader \
|
|
10
74
|
:span_id,
|
|
11
75
|
:span_name,
|
|
@@ -21,7 +85,10 @@ module Datadog
|
|
|
21
85
|
:trace_resource,
|
|
22
86
|
:trace_runtime_id,
|
|
23
87
|
:trace_sampling_priority,
|
|
24
|
-
:trace_service
|
|
88
|
+
:trace_service,
|
|
89
|
+
:trace_distributed_id,
|
|
90
|
+
:trace_flags,
|
|
91
|
+
:trace_state
|
|
25
92
|
|
|
26
93
|
def initialize(
|
|
27
94
|
span_id: nil,
|
|
@@ -38,7 +105,10 @@ module Datadog
|
|
|
38
105
|
trace_resource: nil,
|
|
39
106
|
trace_runtime_id: nil,
|
|
40
107
|
trace_sampling_priority: nil,
|
|
41
|
-
trace_service: nil
|
|
108
|
+
trace_service: nil,
|
|
109
|
+
trace_distributed_id: nil,
|
|
110
|
+
trace_flags: nil,
|
|
111
|
+
trace_state: nil
|
|
42
112
|
)
|
|
43
113
|
@span_id = span_id
|
|
44
114
|
@span_name = span_name && span_name.dup.freeze
|
|
@@ -55,6 +125,9 @@ module Datadog
|
|
|
55
125
|
@trace_runtime_id = trace_runtime_id && trace_runtime_id.dup.freeze
|
|
56
126
|
@trace_sampling_priority = trace_sampling_priority
|
|
57
127
|
@trace_service = trace_service && trace_service.dup.freeze
|
|
128
|
+
@trace_distributed_id = trace_distributed_id
|
|
129
|
+
@trace_flags = trace_flags
|
|
130
|
+
@trace_state = trace_state && trace_state.dup.freeze
|
|
58
131
|
|
|
59
132
|
freeze
|
|
60
133
|
end
|
|
@@ -4,12 +4,13 @@ require_relative '../core'
|
|
|
4
4
|
require_relative '../core/environment/identity'
|
|
5
5
|
require_relative '../core/utils'
|
|
6
6
|
|
|
7
|
-
require_relative 'sampling/ext'
|
|
8
7
|
require_relative 'event'
|
|
8
|
+
require_relative 'metadata/tagging'
|
|
9
|
+
require_relative 'sampling/ext'
|
|
9
10
|
require_relative 'span_operation'
|
|
10
|
-
require_relative 'trace_segment'
|
|
11
11
|
require_relative 'trace_digest'
|
|
12
|
-
require_relative '
|
|
12
|
+
require_relative 'trace_segment'
|
|
13
|
+
require_relative 'utils'
|
|
13
14
|
|
|
14
15
|
module Datadog
|
|
15
16
|
module Tracing
|
|
@@ -70,7 +71,7 @@ module Datadog
|
|
|
70
71
|
metrics: nil
|
|
71
72
|
)
|
|
72
73
|
# Attributes
|
|
73
|
-
@id = id ||
|
|
74
|
+
@id = id || Tracing::Utils.next_id
|
|
74
75
|
@max_length = max_length || DEFAULT_MAX_LENGTH
|
|
75
76
|
@parent_span_id = parent_span_id
|
|
76
77
|
@sampled = sampled.nil? ? true : sampled
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/utils/forking'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
# Utils contains low-level tracing utility functions.
|
|
8
|
+
# @public_api
|
|
9
|
+
module Utils
|
|
10
|
+
extend Datadog::Core::Utils::Forking
|
|
11
|
+
|
|
12
|
+
# The max value for a {Datadog::Tracing::Span} identifier.
|
|
13
|
+
# Span and trace identifiers should be strictly positive and strictly inferior to this limit.
|
|
14
|
+
#
|
|
15
|
+
# Limited to +2<<62-1+ positive integers, as Ruby is able to represent such numbers "inline",
|
|
16
|
+
# inside a +VALUE+ scalar, thus not requiring memory allocation.
|
|
17
|
+
#
|
|
18
|
+
# The range of IDs also has to consider portability across different languages and platforms.
|
|
19
|
+
RUBY_MAX_ID = (1 << 62) - 1
|
|
20
|
+
|
|
21
|
+
# Excludes zero from possible values
|
|
22
|
+
RUBY_ID_RANGE = (1..RUBY_MAX_ID).freeze
|
|
23
|
+
|
|
24
|
+
# While we only generate 63-bit integers due to limitations in other languages, we support
|
|
25
|
+
# parsing 64-bit integers for distributed tracing since an upstream system may generate one
|
|
26
|
+
EXTERNAL_MAX_ID = 1 << 64
|
|
27
|
+
|
|
28
|
+
# We use a custom random number generator because we want no interference
|
|
29
|
+
# with the default one. Using the default prng, we could break code that
|
|
30
|
+
# would rely on srand/rand sequences.
|
|
31
|
+
|
|
32
|
+
# Return a randomly generated integer, valid as a Span ID or Trace ID.
|
|
33
|
+
# This method is thread-safe and fork-safe.
|
|
34
|
+
def self.next_id
|
|
35
|
+
after_fork! { reset! }
|
|
36
|
+
id_rng.rand(RUBY_ID_RANGE)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.id_rng
|
|
40
|
+
@id_rng ||= Random.new
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.reset!
|
|
44
|
+
@id_rng = Random.new
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private_class_method :id_rng, :reset!
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -94,7 +94,7 @@ module Datadog
|
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def tag_lang!
|
|
97
|
-
return if trace.lang.nil?
|
|
97
|
+
return if trace.lang.nil?
|
|
98
98
|
|
|
99
99
|
root_span.set_tag(
|
|
100
100
|
Core::Runtime::Ext::TAG_LANG,
|
|
@@ -114,10 +114,7 @@ module Datadog
|
|
|
114
114
|
def tag_process_id!
|
|
115
115
|
return unless trace.process_id
|
|
116
116
|
|
|
117
|
-
root_span.set_tag(
|
|
118
|
-
Core::Runtime::Ext::TAG_PID,
|
|
119
|
-
trace.process_id
|
|
120
|
-
)
|
|
117
|
+
root_span.set_tag(Core::Runtime::Ext::TAG_PROCESS_ID, trace.process_id)
|
|
121
118
|
end
|
|
122
119
|
|
|
123
120
|
def tag_rate_limiter_rate!
|
data/lib/ddtrace/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ddtrace
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Datadog, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-12-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -33,7 +33,7 @@ dependencies:
|
|
|
33
33
|
version: 0.10.16
|
|
34
34
|
- - "<="
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: 0.10.
|
|
36
|
+
version: 0.10.18
|
|
37
37
|
type: :runtime
|
|
38
38
|
prerelease: false
|
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -43,7 +43,7 @@ dependencies:
|
|
|
43
43
|
version: 0.10.16
|
|
44
44
|
- - "<="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.10.
|
|
46
|
+
version: 0.10.18
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: libddwaf
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -102,6 +102,10 @@ files:
|
|
|
102
102
|
- ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c
|
|
103
103
|
- ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h
|
|
104
104
|
- ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c
|
|
105
|
+
- ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c
|
|
106
|
+
- ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h
|
|
107
|
+
- ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c
|
|
108
|
+
- ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h
|
|
105
109
|
- ext/ddtrace_profiling_native_extension/collectors_stack.c
|
|
106
110
|
- ext/ddtrace_profiling_native_extension/collectors_stack.h
|
|
107
111
|
- ext/ddtrace_profiling_native_extension/extconf.rb
|
|
@@ -114,11 +118,17 @@ files:
|
|
|
114
118
|
- ext/ddtrace_profiling_native_extension/profiling.c
|
|
115
119
|
- ext/ddtrace_profiling_native_extension/ruby_helpers.c
|
|
116
120
|
- ext/ddtrace_profiling_native_extension/ruby_helpers.h
|
|
121
|
+
- ext/ddtrace_profiling_native_extension/setup_signal_handler.c
|
|
122
|
+
- ext/ddtrace_profiling_native_extension/setup_signal_handler.h
|
|
117
123
|
- ext/ddtrace_profiling_native_extension/stack_recorder.c
|
|
118
124
|
- ext/ddtrace_profiling_native_extension/stack_recorder.h
|
|
125
|
+
- ext/ddtrace_profiling_native_extension/time_helpers.c
|
|
126
|
+
- ext/ddtrace_profiling_native_extension/time_helpers.h
|
|
119
127
|
- lib/datadog/appsec.rb
|
|
120
128
|
- lib/datadog/appsec/assets.rb
|
|
121
129
|
- lib/datadog/appsec/assets/blocked.html
|
|
130
|
+
- lib/datadog/appsec/assets/blocked.json
|
|
131
|
+
- lib/datadog/appsec/assets/blocked.text
|
|
122
132
|
- lib/datadog/appsec/assets/waf_rules/README.md
|
|
123
133
|
- lib/datadog/appsec/assets/waf_rules/recommended.json
|
|
124
134
|
- lib/datadog/appsec/assets/waf_rules/risky.json
|
|
@@ -168,6 +178,7 @@ files:
|
|
|
168
178
|
- lib/datadog/appsec/reactive/engine.rb
|
|
169
179
|
- lib/datadog/appsec/reactive/operation.rb
|
|
170
180
|
- lib/datadog/appsec/reactive/subscriber.rb
|
|
181
|
+
- lib/datadog/appsec/response.rb
|
|
171
182
|
- lib/datadog/ci.rb
|
|
172
183
|
- lib/datadog/ci/configuration/components.rb
|
|
173
184
|
- lib/datadog/ci/configuration/settings.rb
|
|
@@ -199,6 +210,7 @@ files:
|
|
|
199
210
|
- lib/datadog/core/configuration/base.rb
|
|
200
211
|
- lib/datadog/core/configuration/components.rb
|
|
201
212
|
- lib/datadog/core/configuration/dependency_resolver.rb
|
|
213
|
+
- lib/datadog/core/configuration/ext.rb
|
|
202
214
|
- lib/datadog/core/configuration/option.rb
|
|
203
215
|
- lib/datadog/core/configuration/option_definition.rb
|
|
204
216
|
- lib/datadog/core/configuration/option_definition_set.rb
|
|
@@ -206,7 +218,6 @@ files:
|
|
|
206
218
|
- lib/datadog/core/configuration/options.rb
|
|
207
219
|
- lib/datadog/core/configuration/settings.rb
|
|
208
220
|
- lib/datadog/core/diagnostics/environment_logger.rb
|
|
209
|
-
- lib/datadog/core/diagnostics/ext.rb
|
|
210
221
|
- lib/datadog/core/diagnostics/health.rb
|
|
211
222
|
- lib/datadog/core/encoding.rb
|
|
212
223
|
- lib/datadog/core/environment/cgroup.rb
|
|
@@ -302,6 +313,8 @@ files:
|
|
|
302
313
|
- lib/datadog/profiling/collectors/code_provenance.rb
|
|
303
314
|
- lib/datadog/profiling/collectors/cpu_and_wall_time.rb
|
|
304
315
|
- lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb
|
|
316
|
+
- lib/datadog/profiling/collectors/dynamic_sampling_rate.rb
|
|
317
|
+
- lib/datadog/profiling/collectors/idle_sampling_helper.rb
|
|
305
318
|
- lib/datadog/profiling/collectors/old_stack.rb
|
|
306
319
|
- lib/datadog/profiling/collectors/stack.rb
|
|
307
320
|
- lib/datadog/profiling/encoding/profile.rb
|
|
@@ -339,6 +352,7 @@ files:
|
|
|
339
352
|
- lib/datadog/tracing/buffer.rb
|
|
340
353
|
- lib/datadog/tracing/client_ip.rb
|
|
341
354
|
- lib/datadog/tracing/configuration/ext.rb
|
|
355
|
+
- lib/datadog/tracing/configuration/settings.rb
|
|
342
356
|
- lib/datadog/tracing/context.rb
|
|
343
357
|
- lib/datadog/tracing/context_provider.rb
|
|
344
358
|
- lib/datadog/tracing/contrib.rb
|
|
@@ -492,6 +506,8 @@ files:
|
|
|
492
506
|
- lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb
|
|
493
507
|
- lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb
|
|
494
508
|
- lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb
|
|
509
|
+
- lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb
|
|
510
|
+
- lib/datadog/tracing/contrib/grpc/distributed/propagation.rb
|
|
495
511
|
- lib/datadog/tracing/contrib/grpc/ext.rb
|
|
496
512
|
- lib/datadog/tracing/contrib/grpc/integration.rb
|
|
497
513
|
- lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb
|
|
@@ -506,6 +522,8 @@ files:
|
|
|
506
522
|
- lib/datadog/tracing/contrib/hanami/router_tracing.rb
|
|
507
523
|
- lib/datadog/tracing/contrib/http/circuit_breaker.rb
|
|
508
524
|
- lib/datadog/tracing/contrib/http/configuration/settings.rb
|
|
525
|
+
- lib/datadog/tracing/contrib/http/distributed/fetcher.rb
|
|
526
|
+
- lib/datadog/tracing/contrib/http/distributed/propagation.rb
|
|
509
527
|
- lib/datadog/tracing/contrib/http/ext.rb
|
|
510
528
|
- lib/datadog/tracing/contrib/http/instrumentation.rb
|
|
511
529
|
- lib/datadog/tracing/contrib/http/integration.rb
|
|
@@ -622,6 +640,7 @@ files:
|
|
|
622
640
|
- lib/datadog/tracing/contrib/redis/patcher.rb
|
|
623
641
|
- lib/datadog/tracing/contrib/redis/quantize.rb
|
|
624
642
|
- lib/datadog/tracing/contrib/redis/tags.rb
|
|
643
|
+
- lib/datadog/tracing/contrib/redis/trace_middleware.rb
|
|
625
644
|
- lib/datadog/tracing/contrib/redis/vendor/LICENSE
|
|
626
645
|
- lib/datadog/tracing/contrib/redis/vendor/resolver.rb
|
|
627
646
|
- lib/datadog/tracing/contrib/registerable.rb
|
|
@@ -689,17 +708,18 @@ files:
|
|
|
689
708
|
- lib/datadog/tracing/contrib/utils/quantization/hash.rb
|
|
690
709
|
- lib/datadog/tracing/contrib/utils/quantization/http.rb
|
|
691
710
|
- lib/datadog/tracing/correlation.rb
|
|
711
|
+
- lib/datadog/tracing/diagnostics/ext.rb
|
|
712
|
+
- lib/datadog/tracing/diagnostics/health.rb
|
|
713
|
+
- lib/datadog/tracing/distributed/b3_multi.rb
|
|
714
|
+
- lib/datadog/tracing/distributed/b3_single.rb
|
|
715
|
+
- lib/datadog/tracing/distributed/datadog.rb
|
|
692
716
|
- lib/datadog/tracing/distributed/datadog_tags_codec.rb
|
|
693
|
-
- lib/datadog/tracing/distributed/
|
|
694
|
-
- lib/datadog/tracing/distributed/headers/b3_single.rb
|
|
695
|
-
- lib/datadog/tracing/distributed/headers/datadog.rb
|
|
717
|
+
- lib/datadog/tracing/distributed/fetcher.rb
|
|
696
718
|
- lib/datadog/tracing/distributed/headers/ext.rb
|
|
697
|
-
- lib/datadog/tracing/distributed/headers/parser.rb
|
|
698
719
|
- lib/datadog/tracing/distributed/helpers.rb
|
|
699
|
-
- lib/datadog/tracing/distributed/
|
|
700
|
-
- lib/datadog/tracing/distributed/
|
|
701
|
-
- lib/datadog/tracing/distributed/
|
|
702
|
-
- lib/datadog/tracing/distributed/metadata/parser.rb
|
|
720
|
+
- lib/datadog/tracing/distributed/none.rb
|
|
721
|
+
- lib/datadog/tracing/distributed/propagation.rb
|
|
722
|
+
- lib/datadog/tracing/distributed/trace_context.rb
|
|
703
723
|
- lib/datadog/tracing/event.rb
|
|
704
724
|
- lib/datadog/tracing/flush.rb
|
|
705
725
|
- lib/datadog/tracing/metadata.rb
|
|
@@ -710,7 +730,6 @@ files:
|
|
|
710
730
|
- lib/datadog/tracing/pipeline.rb
|
|
711
731
|
- lib/datadog/tracing/pipeline/span_filter.rb
|
|
712
732
|
- lib/datadog/tracing/pipeline/span_processor.rb
|
|
713
|
-
- lib/datadog/tracing/propagation/grpc.rb
|
|
714
733
|
- lib/datadog/tracing/propagation/http.rb
|
|
715
734
|
- lib/datadog/tracing/runtime/metrics.rb
|
|
716
735
|
- lib/datadog/tracing/sampling/all_sampler.rb
|
|
@@ -736,6 +755,7 @@ files:
|
|
|
736
755
|
- lib/datadog/tracing/trace_operation.rb
|
|
737
756
|
- lib/datadog/tracing/trace_segment.rb
|
|
738
757
|
- lib/datadog/tracing/tracer.rb
|
|
758
|
+
- lib/datadog/tracing/utils.rb
|
|
739
759
|
- lib/datadog/tracing/workers.rb
|
|
740
760
|
- lib/datadog/tracing/workers/trace_writer.rb
|
|
741
761
|
- lib/datadog/tracing/writer.rb
|
|
@@ -796,7 +816,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
796
816
|
- !ruby/object:Gem::Version
|
|
797
817
|
version: 2.0.0
|
|
798
818
|
requirements: []
|
|
799
|
-
rubygems_version: 3.3.
|
|
819
|
+
rubygems_version: 3.3.26
|
|
800
820
|
signing_key:
|
|
801
821
|
specification_version: 4
|
|
802
822
|
summary: Datadog tracing code for your Ruby applications
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative 'parser'
|
|
4
|
-
require_relative '../helpers'
|
|
5
|
-
require_relative 'ext'
|
|
6
|
-
require_relative '../../trace_digest'
|
|
7
|
-
|
|
8
|
-
module Datadog
|
|
9
|
-
module Tracing
|
|
10
|
-
module Distributed
|
|
11
|
-
module Headers
|
|
12
|
-
# B3 provides helpers to inject or extract headers for B3 style headers
|
|
13
|
-
module B3
|
|
14
|
-
include Ext
|
|
15
|
-
|
|
16
|
-
def self.inject!(digest, env)
|
|
17
|
-
return if digest.nil?
|
|
18
|
-
|
|
19
|
-
# DEV: We need these to be hex encoded
|
|
20
|
-
env[B3_HEADER_TRACE_ID] = digest.trace_id.to_s(16)
|
|
21
|
-
env[B3_HEADER_SPAN_ID] = digest.span_id.to_s(16)
|
|
22
|
-
|
|
23
|
-
if digest.trace_sampling_priority
|
|
24
|
-
sampling_priority = Helpers.clamp_sampling_priority(
|
|
25
|
-
digest.trace_sampling_priority
|
|
26
|
-
)
|
|
27
|
-
env[B3_HEADER_SAMPLED] = sampling_priority.to_s
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
env
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.extract(env)
|
|
34
|
-
# Extract values from headers
|
|
35
|
-
# DEV: B3 doesn't have "origin"
|
|
36
|
-
headers = Parser.new(env)
|
|
37
|
-
trace_id = headers.id(B3_HEADER_TRACE_ID, 16)
|
|
38
|
-
span_id = headers.id(B3_HEADER_SPAN_ID, 16)
|
|
39
|
-
# We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
|
|
40
|
-
sampling_priority = headers.number(B3_HEADER_SAMPLED)
|
|
41
|
-
|
|
42
|
-
# Return early if this propagation is not valid
|
|
43
|
-
return unless trace_id && span_id
|
|
44
|
-
|
|
45
|
-
TraceDigest.new(
|
|
46
|
-
trace_id: trace_id,
|
|
47
|
-
span_id: span_id,
|
|
48
|
-
trace_sampling_priority: sampling_priority
|
|
49
|
-
)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative 'parser'
|
|
4
|
-
require_relative '../helpers'
|
|
5
|
-
require_relative 'ext'
|
|
6
|
-
require_relative '../../trace_digest'
|
|
7
|
-
|
|
8
|
-
module Datadog
|
|
9
|
-
module Tracing
|
|
10
|
-
module Distributed
|
|
11
|
-
module Headers
|
|
12
|
-
# B3Single provides helpers to inject or extract headers for B3 single header style headers
|
|
13
|
-
module B3Single
|
|
14
|
-
include Ext
|
|
15
|
-
|
|
16
|
-
def self.inject!(digest, env)
|
|
17
|
-
return if digest.nil?
|
|
18
|
-
|
|
19
|
-
# Header format:
|
|
20
|
-
# b3: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
|
|
21
|
-
# https://github.com/apache/incubator-zipkin-b3-propagation/tree/7c6e9f14d6627832bd80baa87ac7dabee7be23cf#single-header
|
|
22
|
-
# DEV: `{SamplingState}` and `{ParentSpanId`}` are optional
|
|
23
|
-
|
|
24
|
-
# DEV: We need these to be hex encoded
|
|
25
|
-
header = "#{digest.trace_id.to_s(16)}-#{digest.span_id.to_s(16)}"
|
|
26
|
-
|
|
27
|
-
if digest.trace_sampling_priority
|
|
28
|
-
sampling_priority = Helpers.clamp_sampling_priority(
|
|
29
|
-
digest.trace_sampling_priority
|
|
30
|
-
)
|
|
31
|
-
header += "-#{sampling_priority}"
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
env[B3_HEADER_SINGLE] = header
|
|
35
|
-
|
|
36
|
-
env
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def self.extract(env)
|
|
40
|
-
# Header format:
|
|
41
|
-
# b3: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
|
|
42
|
-
# https://github.com/apache/incubator-zipkin-b3-propagation/tree/7c6e9f14d6627832bd80baa87ac7dabee7be23cf#single-header
|
|
43
|
-
# DEV: `{SamplingState}` and `{ParentSpanId`}` are optional
|
|
44
|
-
|
|
45
|
-
headers = Parser.new(env)
|
|
46
|
-
value = headers.header(B3_HEADER_SINGLE)
|
|
47
|
-
return if value.nil?
|
|
48
|
-
|
|
49
|
-
parts = value.split('-')
|
|
50
|
-
trace_id = Helpers.value_to_id(parts[0], 16) unless parts.empty?
|
|
51
|
-
span_id = Helpers.value_to_id(parts[1], 16) if parts.length > 1
|
|
52
|
-
sampling_priority = Helpers.value_to_number(parts[2]) if parts.length > 2
|
|
53
|
-
|
|
54
|
-
# Return early if this propagation is not valid
|
|
55
|
-
return unless trace_id && span_id
|
|
56
|
-
|
|
57
|
-
TraceDigest.new(
|
|
58
|
-
span_id: span_id,
|
|
59
|
-
trace_id: trace_id,
|
|
60
|
-
trace_sampling_priority: sampling_priority
|
|
61
|
-
)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: true
|
|
3
|
-
|
|
4
|
-
require_relative 'parser'
|
|
5
|
-
require_relative 'ext'
|
|
6
|
-
require_relative '../../metadata/ext'
|
|
7
|
-
require_relative '../../trace_digest'
|
|
8
|
-
require_relative '../datadog_tags_codec'
|
|
9
|
-
|
|
10
|
-
module Datadog
|
|
11
|
-
module Tracing
|
|
12
|
-
module Distributed
|
|
13
|
-
module Headers
|
|
14
|
-
# Datadog provides helpers to inject or extract headers for Datadog style headers
|
|
15
|
-
module Datadog
|
|
16
|
-
class << self
|
|
17
|
-
include Ext
|
|
18
|
-
|
|
19
|
-
def inject!(digest, env)
|
|
20
|
-
return if digest.nil?
|
|
21
|
-
|
|
22
|
-
env[HTTP_HEADER_TRACE_ID] = digest.trace_id.to_s
|
|
23
|
-
env[HTTP_HEADER_PARENT_ID] = digest.span_id.to_s
|
|
24
|
-
env[HTTP_HEADER_SAMPLING_PRIORITY] = digest.trace_sampling_priority.to_s if digest.trace_sampling_priority
|
|
25
|
-
env[HTTP_HEADER_ORIGIN] = digest.trace_origin.to_s unless digest.trace_origin.nil?
|
|
26
|
-
|
|
27
|
-
inject_tags(digest, env)
|
|
28
|
-
|
|
29
|
-
env
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def extract(env)
|
|
33
|
-
# Extract values from headers
|
|
34
|
-
headers = Parser.new(env)
|
|
35
|
-
trace_id = headers.id(HTTP_HEADER_TRACE_ID)
|
|
36
|
-
parent_id = headers.id(HTTP_HEADER_PARENT_ID)
|
|
37
|
-
origin = headers.header(HTTP_HEADER_ORIGIN)
|
|
38
|
-
sampling_priority = headers.number(HTTP_HEADER_SAMPLING_PRIORITY)
|
|
39
|
-
|
|
40
|
-
# Return early if this propagation is not valid
|
|
41
|
-
# DEV: To be valid we need to have a trace id and a parent id
|
|
42
|
-
# or when it is a synthetics trace, just the trace id.
|
|
43
|
-
# DEV: `Parser#id` will not return 0
|
|
44
|
-
return unless (trace_id && parent_id) || (origin && trace_id)
|
|
45
|
-
|
|
46
|
-
trace_distributed_tags = extract_tags(headers)
|
|
47
|
-
|
|
48
|
-
# Return new trace headers
|
|
49
|
-
TraceDigest.new(
|
|
50
|
-
span_id: parent_id,
|
|
51
|
-
trace_id: trace_id,
|
|
52
|
-
trace_origin: origin,
|
|
53
|
-
trace_sampling_priority: sampling_priority,
|
|
54
|
-
trace_distributed_tags: trace_distributed_tags,
|
|
55
|
-
)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
private
|
|
59
|
-
|
|
60
|
-
# Export trace distributed tags through the `x-datadog-tags` header.
|
|
61
|
-
#
|
|
62
|
-
# DEV: This method accesses global state (the active trace) to record its error state as a trace tag.
|
|
63
|
-
# DEV: This means errors cannot be reported if there's not active span.
|
|
64
|
-
# DEV: Ideally, we'd have a dedicated error reporting stream for all of ddtrace.
|
|
65
|
-
# DEV: The same comment applies to the {.extract_tags}.
|
|
66
|
-
def inject_tags(digest, env)
|
|
67
|
-
return if digest.trace_distributed_tags.nil? || digest.trace_distributed_tags.empty?
|
|
68
|
-
|
|
69
|
-
if ::Datadog.configuration.tracing.x_datadog_tags_max_length <= 0
|
|
70
|
-
active_trace = Tracing.active_trace
|
|
71
|
-
active_trace.set_tag('_dd.propagation_error', 'disabled') if active_trace
|
|
72
|
-
return
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
encoded_tags = DatadogTagsCodec.encode(digest.trace_distributed_tags)
|
|
76
|
-
|
|
77
|
-
if encoded_tags.size > ::Datadog.configuration.tracing.x_datadog_tags_max_length
|
|
78
|
-
active_trace = Tracing.active_trace
|
|
79
|
-
active_trace.set_tag('_dd.propagation_error', 'inject_max_size') if active_trace
|
|
80
|
-
|
|
81
|
-
::Datadog.logger.warn(
|
|
82
|
-
"Failed to inject x-datadog-tags: tags are too large (size:#{encoded_tags.size} " \
|
|
83
|
-
"limit:#{::Datadog.configuration.tracing.x_datadog_tags_max_length}). This limit can be configured " \
|
|
84
|
-
'through the DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH environment variable.'
|
|
85
|
-
)
|
|
86
|
-
return
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
env[HTTP_HEADER_TAGS] = encoded_tags
|
|
90
|
-
rescue => e
|
|
91
|
-
active_trace = Tracing.active_trace
|
|
92
|
-
active_trace.set_tag('_dd.propagation_error', 'encoding_error') if active_trace
|
|
93
|
-
::Datadog.logger.warn(
|
|
94
|
-
"Failed to inject x-datadog-tags: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
|
95
|
-
)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Import `x-datadog-tags` header tags as trace distributed tags.
|
|
99
|
-
# Only tags that have the `_dd.p.` prefix are processed.
|
|
100
|
-
def extract_tags(headers)
|
|
101
|
-
tags_header = headers.header(HTTP_HEADER_TAGS)
|
|
102
|
-
return unless tags_header
|
|
103
|
-
|
|
104
|
-
if ::Datadog.configuration.tracing.x_datadog_tags_max_length <= 0
|
|
105
|
-
active_trace = Tracing.active_trace
|
|
106
|
-
active_trace.set_tag('_dd.propagation_error', 'disabled') if active_trace
|
|
107
|
-
return
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
if tags_header.size > ::Datadog.configuration.tracing.x_datadog_tags_max_length
|
|
111
|
-
active_trace = Tracing.active_trace
|
|
112
|
-
active_trace.set_tag('_dd.propagation_error', 'extract_max_size') if active_trace
|
|
113
|
-
|
|
114
|
-
::Datadog.logger.warn(
|
|
115
|
-
"Failed to extract x-datadog-tags: tags are too large (size:#{tags_header.size} " \
|
|
116
|
-
"limit:#{::Datadog.configuration.tracing.x_datadog_tags_max_length}). This limit can be configured " \
|
|
117
|
-
'through the DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH environment variable.'
|
|
118
|
-
)
|
|
119
|
-
return
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
tags = DatadogTagsCodec.decode(tags_header)
|
|
123
|
-
# Only extract keys with the expected Datadog prefix
|
|
124
|
-
tags.select! do |key, _|
|
|
125
|
-
key.start_with?(Tracing::Metadata::Ext::Distributed::TAGS_PREFIX) && key != EXCLUDED_TAG
|
|
126
|
-
end
|
|
127
|
-
tags
|
|
128
|
-
rescue => e
|
|
129
|
-
active_trace = Tracing.active_trace
|
|
130
|
-
active_trace.set_tag('_dd.propagation_error', 'decoding_error') if active_trace
|
|
131
|
-
::Datadog.logger.warn(
|
|
132
|
-
"Failed to extract x-datadog-tags: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
|
133
|
-
)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# We want to exclude tags that we don't want to propagate downstream.
|
|
137
|
-
EXCLUDED_TAG = '_dd.p.upstream_services'
|
|
138
|
-
private_constant :EXCLUDED_TAG
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
end
|