datadog 2.28.0 → 2.30.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 +87 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +82 -12
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +32 -11
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +3 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +9 -24
- data/ext/datadog_profiling_native_extension/heap_recorder.c +186 -55
- data/ext/datadog_profiling_native_extension/heap_recorder.h +12 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +51 -64
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +0 -13
- data/ext/datadog_profiling_native_extension/profiling.c +3 -1
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +24 -8
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +1 -3
- data/ext/datadog_profiling_native_extension/stack_recorder.c +63 -48
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -1
- data/ext/libdatadog_api/crashtracker.c +5 -0
- data/ext/libdatadog_api/crashtracker_report_exception.c +126 -0
- data/ext/libdatadog_api/extconf.rb +4 -21
- data/ext/libdatadog_extconf_helpers.rb +49 -11
- data/lib/datadog/ai_guard/configuration/settings.rb +3 -0
- data/lib/datadog/appsec/assets/blocked.html +2 -1
- data/lib/datadog/appsec/configuration/settings.rb +14 -0
- data/lib/datadog/appsec/context.rb +44 -9
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +3 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +55 -6
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +60 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +11 -6
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -10
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +4 -4
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +26 -5
- data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +72 -7
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +5 -3
- data/lib/datadog/appsec/counter_sampler.rb +25 -0
- data/lib/datadog/appsec/event.rb +1 -17
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
- data/lib/datadog/appsec/instrumentation/gateway.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +18 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/security_engine/engine.rb +23 -2
- data/lib/datadog/appsec/utils/http/body.rb +38 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +2 -1
- data/lib/datadog/appsec/utils/http/media_type.rb +28 -35
- data/lib/datadog/appsec/utils/http/url_encoded.rb +52 -0
- data/lib/datadog/core/configuration/components.rb +29 -4
- data/lib/datadog/core/configuration/option.rb +2 -1
- data/lib/datadog/core/configuration/options.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +27 -3
- data/lib/datadog/core/configuration/supported_configurations.rb +19 -0
- data/lib/datadog/core/configuration.rb +2 -2
- data/lib/datadog/core/crashtracking/component.rb +71 -19
- data/lib/datadog/core/environment/agent_info.rb +65 -1
- data/lib/datadog/core/logger.rb +1 -1
- data/lib/datadog/core/metrics/logging.rb +1 -1
- data/lib/datadog/core/process_discovery.rb +20 -19
- data/lib/datadog/core/rate_limiter.rb +2 -0
- data/lib/datadog/core/remote/component.rb +16 -5
- data/lib/datadog/core/remote/transport/config.rb +5 -11
- data/lib/datadog/core/runtime/metrics.rb +1 -2
- data/lib/datadog/core/telemetry/component.rb +0 -13
- data/lib/datadog/core/telemetry/transport/telemetry.rb +5 -6
- data/lib/datadog/core/transport/ext.rb +1 -0
- data/lib/datadog/core/transport/http/response.rb +4 -0
- data/lib/datadog/core/transport/parcel.rb +61 -9
- data/lib/datadog/core/utils/base64.rb +1 -1
- data/lib/datadog/core/utils/fnv.rb +26 -0
- data/lib/datadog/core/workers/interval_loop.rb +13 -6
- data/lib/datadog/core/workers/queue.rb +0 -4
- data/lib/datadog/core/workers/runtime_metrics.rb +9 -1
- data/lib/datadog/core.rb +6 -1
- data/lib/datadog/data_streams/processor.rb +35 -33
- data/lib/datadog/data_streams/transport/http/stats.rb +6 -0
- data/lib/datadog/data_streams/transport/http.rb +0 -4
- data/lib/datadog/data_streams/transport/stats.rb +5 -12
- data/lib/datadog/di/boot.rb +1 -0
- data/lib/datadog/di/component.rb +17 -5
- data/lib/datadog/di/configuration/settings.rb +9 -0
- data/lib/datadog/di/context.rb +6 -0
- data/lib/datadog/di/instrumenter.rb +183 -134
- data/lib/datadog/di/probe.rb +10 -1
- data/lib/datadog/di/probe_file_loader.rb +2 -2
- data/lib/datadog/di/probe_manager.rb +86 -64
- data/lib/datadog/di/probe_notification_builder.rb +46 -18
- data/lib/datadog/di/probe_notifier_worker.rb +65 -9
- data/lib/datadog/di/probe_repository.rb +198 -0
- data/lib/datadog/di/proc_responder.rb +4 -0
- data/lib/datadog/di/remote.rb +6 -7
- data/lib/datadog/di/serializer.rb +127 -9
- data/lib/datadog/di/transport/diagnostics.rb +5 -7
- data/lib/datadog/di/transport/http/diagnostics.rb +3 -1
- data/lib/datadog/di/transport/http/input.rb +1 -1
- data/lib/datadog/di/transport/http.rb +12 -3
- data/lib/datadog/di/transport/input.rb +51 -14
- data/lib/datadog/kit/tracing/method_tracer.rb +132 -0
- data/lib/datadog/open_feature/configuration.rb +2 -0
- data/lib/datadog/open_feature/transport.rb +8 -11
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +13 -0
- data/lib/datadog/profiling/component.rb +20 -6
- data/lib/datadog/profiling/http_transport.rb +5 -6
- data/lib/datadog/profiling/profiler.rb +15 -8
- data/lib/datadog/tracing/contrib/dalli/integration.rb +4 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +2 -2
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +13 -8
- data/lib/datadog/tracing/contrib/grape/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/karafka/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +2 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +10 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +5 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +24 -0
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +18 -6
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/registerable.rb +11 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +15 -4
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +3 -1
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +1 -0
- data/lib/datadog/tracing/metadata/ext.rb +4 -0
- data/lib/datadog/tracing/sync_writer.rb +0 -1
- data/lib/datadog/tracing/transport/io/client.rb +5 -8
- data/lib/datadog/tracing/transport/io/traces.rb +28 -34
- data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
- data/lib/datadog/tracing/transport/traces.rb +4 -10
- data/lib/datadog/tracing/writer.rb +0 -1
- data/lib/datadog/version.rb +1 -1
- metadata +14 -8
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
- data/lib/datadog/tracing/workers/trace_writer.rb +0 -204
|
@@ -25,12 +25,15 @@ module Datadog
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def infer(path)
|
|
28
|
-
|
|
28
|
+
count = 0
|
|
29
|
+
result = []
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
split(path, '/') do |segment|
|
|
31
32
|
next if segment.empty?
|
|
33
|
+
break if count >= MAX_NUMBER_OF_SEGMENTS
|
|
34
|
+
count += 1
|
|
32
35
|
|
|
33
|
-
case segment
|
|
36
|
+
result << case segment
|
|
34
37
|
when INT_PARAM_REGEX then '{param:int}'
|
|
35
38
|
when INT_ID_PARAM_REGEX then '{param:int_id}'
|
|
36
39
|
when HEX_PARAM_REGEX then '{param:hex}'
|
|
@@ -40,12 +43,21 @@ module Datadog
|
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"/#{segments.join("/")}"
|
|
46
|
+
result.empty? ? '/' : "/#{result.join('/')}"
|
|
46
47
|
rescue
|
|
47
48
|
nil
|
|
48
49
|
end
|
|
50
|
+
|
|
51
|
+
if RUBY_VERSION >= '2.6.'
|
|
52
|
+
def split(path, pattern = nil, &block)
|
|
53
|
+
path.split(pattern, &block)
|
|
54
|
+
end
|
|
55
|
+
else
|
|
56
|
+
def split(path, pattern = nil, &block)
|
|
57
|
+
path.split(pattern).each(&block)
|
|
58
|
+
path
|
|
59
|
+
end
|
|
60
|
+
end
|
|
49
61
|
end
|
|
50
62
|
end
|
|
51
63
|
end
|
|
@@ -51,8 +51,11 @@ module Datadog
|
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
option :distributed_tracing
|
|
55
|
-
|
|
54
|
+
option :distributed_tracing do |o|
|
|
55
|
+
o.type :bool
|
|
56
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
57
|
+
o.default true
|
|
58
|
+
end
|
|
56
59
|
option :request_queuing do |o|
|
|
57
60
|
o.type :bool
|
|
58
61
|
o.default false
|
|
@@ -9,6 +9,7 @@ module Datadog
|
|
|
9
9
|
module Ext
|
|
10
10
|
APP = 'rails'
|
|
11
11
|
ENV_ENABLED = 'DD_TRACE_RAILS_ENABLED'
|
|
12
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_RAILS_DISTRIBUTED_TRACING'
|
|
12
13
|
# @!visibility private
|
|
13
14
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RAILS_ANALYTICS_ENABLED'
|
|
14
15
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RAILS_ANALYTICS_SAMPLE_RATE'
|
|
@@ -33,6 +33,17 @@ module Datadog
|
|
|
33
33
|
def register_as(name, registry: Contrib::REGISTRY, auto_patch: false, **options)
|
|
34
34
|
registry.add(name, new(name, **options), auto_patch)
|
|
35
35
|
end
|
|
36
|
+
|
|
37
|
+
# Registers this `as` in the global tracer registry as an alias of `original_name`.
|
|
38
|
+
# Using `as` or `original_name` become interchangeable.
|
|
39
|
+
# The configuration object is shared between the two names.
|
|
40
|
+
# The patcher will only run once if both are activated.
|
|
41
|
+
def register_alias_for(original_name, as:, registry: Contrib::REGISTRY)
|
|
42
|
+
original = registry[original_name]
|
|
43
|
+
raise ArgumentError, "integration '#{original_name}' not registered" unless original
|
|
44
|
+
|
|
45
|
+
registry.add(as, original, false)
|
|
46
|
+
end
|
|
36
47
|
end
|
|
37
48
|
|
|
38
49
|
# Instance methods for registerable behavior
|
|
@@ -30,8 +30,11 @@ module Datadog
|
|
|
30
30
|
o.default 1.0
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
option :distributed_tracing
|
|
34
|
-
|
|
33
|
+
option :distributed_tracing do |o|
|
|
34
|
+
o.type :bool
|
|
35
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
36
|
+
o.default true
|
|
37
|
+
end
|
|
35
38
|
option :service_name do |o|
|
|
36
39
|
o.default do
|
|
37
40
|
Contrib::SpanAttributeSchema.fetch_service_name(
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_REST_CLIENT_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_REST_CLIENT_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_REST_CLIENT_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_REST_CLIENT_PEER_SERVICE'
|
|
13
14
|
# @!visibility private
|
|
@@ -38,7 +38,11 @@ module Datadog
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
option :quantize, default: {}, type: :hash
|
|
41
|
-
option :distributed_tracing
|
|
41
|
+
option :distributed_tracing do |o|
|
|
42
|
+
o.type :bool
|
|
43
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
44
|
+
o.default false
|
|
45
|
+
end
|
|
42
46
|
end
|
|
43
47
|
end
|
|
44
48
|
end
|
|
@@ -12,6 +12,7 @@ module Datadog
|
|
|
12
12
|
# @!visibility private
|
|
13
13
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED'
|
|
14
14
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE'
|
|
15
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_SIDEKIQ_DISTRIBUTED_TRACING'
|
|
15
16
|
SERVICE_NAME = 'sidekiq'
|
|
16
17
|
SIDEKIQ_8_SECONDS_PER_INTEGER = 0.001 # Sidekiq 8 uses integer epoch milliseconds, rather than epoch floats
|
|
17
18
|
SPAN_PUSH = 'sidekiq.push'
|
|
@@ -33,7 +33,11 @@ module Datadog
|
|
|
33
33
|
o.default 1.0
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
option :distributed_tracing
|
|
36
|
+
option :distributed_tracing do |o|
|
|
37
|
+
o.type :bool
|
|
38
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
39
|
+
o.default true
|
|
40
|
+
end
|
|
37
41
|
option :headers, default: DEFAULT_HEADERS, type: :hash
|
|
38
42
|
option :resource_script_names, default: false, type: :bool
|
|
39
43
|
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_SINATRA_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_SINATRA_DISTRIBUTED_TRACING'
|
|
11
12
|
# @!visibility private
|
|
12
13
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SINATRA_ANALYTICS_ENABLED'
|
|
13
14
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SINATRA_ANALYTICS_SAMPLE_RATE'
|
|
@@ -13,13 +13,24 @@ module Datadog
|
|
|
13
13
|
class Integration
|
|
14
14
|
include Contrib::Integration
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
MINIMUM_SNEAKERS_VERSION = Gem::Version.new('2.12.0')
|
|
17
|
+
# All versions are supported. Kicks first version is 3.0.0.
|
|
18
|
+
MINIMUM_KICKS_VERSION = Gem::Version.new('3.0.0')
|
|
17
19
|
|
|
18
20
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
|
19
21
|
register_as :sneakers, auto_patch: true
|
|
20
|
-
|
|
22
|
+
register_alias_for :sneakers, as: :kicks
|
|
23
|
+
|
|
24
|
+
# Sneakers development continues in the Kicks gem.
|
|
25
|
+
# The **only** thing that has changed is the gem name,
|
|
26
|
+
# even the file naming and module namespacing are the same (require 'sneakers', `::Sneakers`).
|
|
27
|
+
#
|
|
28
|
+
# The last version of Sneakers is 2.12.0.
|
|
29
|
+
# The first version of Kicks is 3.0.0. We currently support all versions of Kicks.
|
|
30
|
+
#
|
|
31
|
+
# @see https://github.com/jondot/sneakers/commit/9780692624c666b6db8266d2d5710f709cb0f2e2
|
|
21
32
|
def self.version
|
|
22
|
-
Gem.loaded_specs['sneakers']&.version
|
|
33
|
+
Gem.loaded_specs['sneakers']&.version || Gem.loaded_specs['kicks']&.version
|
|
23
34
|
end
|
|
24
35
|
|
|
25
36
|
def self.loaded?
|
|
@@ -27,7 +38,7 @@ module Datadog
|
|
|
27
38
|
end
|
|
28
39
|
|
|
29
40
|
def self.compatible?
|
|
30
|
-
super && version
|
|
41
|
+
super && !!(version&.>= MINIMUM_SNEAKERS_VERSION)
|
|
31
42
|
end
|
|
32
43
|
|
|
33
44
|
def new_configuration
|
|
@@ -51,6 +51,12 @@ module Datadog
|
|
|
51
51
|
o.default false
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
option :inject_sql_basehash do |o|
|
|
55
|
+
o.type :bool
|
|
56
|
+
o.env Contrib::Propagation::SqlComment::Ext::ENV_DBM_INJECT_SQL_BASEHASH
|
|
57
|
+
o.default false
|
|
58
|
+
end
|
|
59
|
+
|
|
54
60
|
option :peer_service do |o|
|
|
55
61
|
o.type :string, nilable: true
|
|
56
62
|
o.env Ext::ENV_PEER_SERVICE
|
|
@@ -57,7 +57,9 @@ module Datadog
|
|
|
57
57
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
58
58
|
|
|
59
59
|
propagation_mode = Contrib::Propagation::SqlComment::Mode.new(
|
|
60
|
-
comment_propagation,
|
|
60
|
+
comment_propagation,
|
|
61
|
+
datadog_configuration[:append_comment],
|
|
62
|
+
datadog_configuration[:inject_sql_basehash]
|
|
61
63
|
)
|
|
62
64
|
|
|
63
65
|
Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
|
|
@@ -66,6 +66,10 @@ module Datadog
|
|
|
66
66
|
TAG_DD_PARENT_ID = '_dd.parent_id'
|
|
67
67
|
DD_PARENT_ID_DEFAULT = '0000000000000000'
|
|
68
68
|
|
|
69
|
+
# Knuth Sampling Rate: the sampling rate applied by agent-based or rule-based sampling.
|
|
70
|
+
# This is a propagated tag (prefixed with `_dd.p.`) that is included in `x-datadog-tags`.
|
|
71
|
+
TAG_KNUTH_SAMPLING_RATE = '_dd.p.ksr'
|
|
72
|
+
|
|
69
73
|
# Trace tags with this prefix will propagate from a trace through distributed tracing.
|
|
70
74
|
# Distributed headers tags with this prefix will be injected into the active trace.
|
|
71
75
|
TAGS_PREFIX = '_dd.p.'
|
|
@@ -9,7 +9,6 @@ require_relative 'transport/http'
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Tracing
|
|
11
11
|
# SyncWriter flushes both services and traces synchronously
|
|
12
|
-
# DEV: To be replaced by Datadog::Tracing::Workers::TraceWriter.
|
|
13
12
|
#
|
|
14
13
|
# Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
|
|
15
14
|
# the separate `datadog-lambda` uses it as of February 2021:
|
|
@@ -19,8 +19,11 @@ module Datadog
|
|
|
19
19
|
@out = out
|
|
20
20
|
@encoder = encoder
|
|
21
21
|
|
|
22
|
+
# Note: The :encode option was previously supported but is no longer used.
|
|
23
|
+
# Data is now expected to be pre-encoded in the Parcel before reaching this client,
|
|
24
|
+
# matching the behavior of other transports (e.g., HTTP transport).
|
|
25
|
+
# If provided, the :encode option will be silently ignored for backwards compatibility.
|
|
22
26
|
@request_block = options.fetch(:request, method(:send_default_request))
|
|
23
|
-
@encode_block = options.fetch(:encode, method(:encode_data))
|
|
24
27
|
@write_block = options.fetch(:write, method(:write_data))
|
|
25
28
|
@response_block = options.fetch(:response, method(:build_response))
|
|
26
29
|
end
|
|
@@ -38,7 +41,6 @@ module Datadog
|
|
|
38
41
|
# Update statistics
|
|
39
42
|
update_stats_from_response!(response)
|
|
40
43
|
|
|
41
|
-
# Return response
|
|
42
44
|
response
|
|
43
45
|
rescue => e
|
|
44
46
|
message =
|
|
@@ -59,10 +61,6 @@ module Datadog
|
|
|
59
61
|
InternalErrorResponse.new(e)
|
|
60
62
|
end
|
|
61
63
|
|
|
62
|
-
def encode_data(encoder, request)
|
|
63
|
-
request.parcel.encode_with(encoder)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
64
|
def write_data(out, data)
|
|
67
65
|
out.puts(data)
|
|
68
66
|
end
|
|
@@ -74,8 +72,7 @@ module Datadog
|
|
|
74
72
|
private
|
|
75
73
|
|
|
76
74
|
def send_default_request(out, request)
|
|
77
|
-
|
|
78
|
-
data = @encode_block.call(encoder, request)
|
|
75
|
+
data = request.parcel.data
|
|
79
76
|
|
|
80
77
|
# Write to IO
|
|
81
78
|
result = @write_block.call(out, data)
|
|
@@ -21,29 +21,6 @@ module Datadog
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
# Extensions for HTTP client
|
|
25
|
-
module Client
|
|
26
|
-
def send_traces(traces)
|
|
27
|
-
# Build a request
|
|
28
|
-
req = Transport::Traces::Request.new(Parcel.new(traces))
|
|
29
|
-
|
|
30
|
-
[send_request(req) do |out, request|
|
|
31
|
-
# Encode trace data
|
|
32
|
-
data = encode_data(encoder, request)
|
|
33
|
-
|
|
34
|
-
# Write to IO
|
|
35
|
-
result = if block_given?
|
|
36
|
-
yield(out, data)
|
|
37
|
-
else
|
|
38
|
-
write_data(out, data)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Generate response
|
|
42
|
-
Traces::Response.new(result)
|
|
43
|
-
end]
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
24
|
# Encoder for IO-specific trace encoding
|
|
48
25
|
# API compliant when used with {JSONEncoder}.
|
|
49
26
|
module Encoder
|
|
@@ -54,13 +31,13 @@ module Datadog
|
|
|
54
31
|
].freeze
|
|
55
32
|
|
|
56
33
|
# Encodes a list of traces
|
|
57
|
-
def encode_traces(
|
|
34
|
+
def encode_traces(traces)
|
|
58
35
|
trace_hashes = traces.map do |trace|
|
|
59
36
|
encode_trace(trace)
|
|
60
37
|
end
|
|
61
38
|
|
|
62
|
-
# Wrap traces
|
|
63
|
-
|
|
39
|
+
# Wrap traces
|
|
40
|
+
{traces: trace_hashes}
|
|
64
41
|
end
|
|
65
42
|
|
|
66
43
|
private
|
|
@@ -78,17 +55,34 @@ module Datadog
|
|
|
78
55
|
end
|
|
79
56
|
end
|
|
80
57
|
|
|
81
|
-
#
|
|
82
|
-
|
|
83
|
-
include Datadog::Core::Transport::Parcel
|
|
58
|
+
# Extensions for HTTP client
|
|
59
|
+
module Client
|
|
84
60
|
include Encoder
|
|
85
61
|
|
|
86
|
-
def
|
|
87
|
-
|
|
88
|
-
|
|
62
|
+
def send_traces(traces)
|
|
63
|
+
# Build a request
|
|
64
|
+
encoded_traces = encode_traces(traces)
|
|
65
|
+
encoder = Core::Encoding::JSONEncoder
|
|
66
|
+
parcel = Core::Transport::Parcel.new(
|
|
67
|
+
encoder.encode(encoded_traces),
|
|
68
|
+
content_type: encoder.content_type,
|
|
69
|
+
)
|
|
70
|
+
req = Transport::Traces::Request.new(parcel)
|
|
71
|
+
|
|
72
|
+
[send_request(req) do |out, request|
|
|
73
|
+
# Get already-encoded data from parcel
|
|
74
|
+
data = request.parcel.data
|
|
75
|
+
|
|
76
|
+
# Write to IO
|
|
77
|
+
result = if block_given?
|
|
78
|
+
yield(out, data)
|
|
79
|
+
else
|
|
80
|
+
write_data(out, data)
|
|
81
|
+
end
|
|
89
82
|
|
|
90
|
-
|
|
91
|
-
|
|
83
|
+
# Generate response
|
|
84
|
+
Traces::Response.new(result)
|
|
85
|
+
end]
|
|
92
86
|
end
|
|
93
87
|
end
|
|
94
88
|
|
|
@@ -49,6 +49,7 @@ module Datadog
|
|
|
49
49
|
|
|
50
50
|
tag_agent_sample_rate!
|
|
51
51
|
tag_hostname!
|
|
52
|
+
tag_knuth_sampling_rate!
|
|
52
53
|
tag_lang!
|
|
53
54
|
tag_origin!
|
|
54
55
|
tag_process_id!
|
|
@@ -110,6 +111,16 @@ module Datadog
|
|
|
110
111
|
)
|
|
111
112
|
end
|
|
112
113
|
|
|
114
|
+
def tag_knuth_sampling_rate!
|
|
115
|
+
rate = trace.rule_sample_rate || trace.agent_sample_rate
|
|
116
|
+
return unless rate
|
|
117
|
+
|
|
118
|
+
root_span.set_tag(
|
|
119
|
+
Tracing::Metadata::Ext::Distributed::TAG_KNUTH_SAMPLING_RATE,
|
|
120
|
+
format('%.6g', rate)
|
|
121
|
+
)
|
|
122
|
+
end
|
|
123
|
+
|
|
113
124
|
def tag_lang!
|
|
114
125
|
return if trace.lang.nil?
|
|
115
126
|
|
|
@@ -14,19 +14,13 @@ module Datadog
|
|
|
14
14
|
module Transport
|
|
15
15
|
module Traces
|
|
16
16
|
# Data transfer object for encoded traces
|
|
17
|
-
class
|
|
18
|
-
include Datadog::Core::Transport::Parcel
|
|
19
|
-
|
|
17
|
+
class Parcel < Core::Transport::Parcel
|
|
20
18
|
attr_reader :trace_count
|
|
21
19
|
|
|
22
|
-
def initialize(data, trace_count)
|
|
23
|
-
super(data)
|
|
20
|
+
def initialize(data, trace_count:, **opts)
|
|
21
|
+
super(data, **opts)
|
|
24
22
|
@trace_count = trace_count
|
|
25
23
|
end
|
|
26
|
-
|
|
27
|
-
def count
|
|
28
|
-
data.length
|
|
29
|
-
end
|
|
30
24
|
end
|
|
31
25
|
|
|
32
26
|
# Traces request
|
|
@@ -135,7 +129,7 @@ module Datadog
|
|
|
135
129
|
)
|
|
136
130
|
|
|
137
131
|
responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
|
|
138
|
-
request = Request.new(
|
|
132
|
+
request = Request.new(Parcel.new(encoded_traces, trace_count: trace_count))
|
|
139
133
|
|
|
140
134
|
client.send_request(:traces, request).tap do |response|
|
|
141
135
|
if downgrade?(response)
|
|
@@ -9,7 +9,6 @@ require_relative 'transport/http'
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Tracing
|
|
11
11
|
# Processor that sends traces and metadata to the agent
|
|
12
|
-
# DEV: Our goal is for {Datadog::Tracing::Workers::TraceWriter} to replace this class in the future
|
|
13
12
|
# @public_api
|
|
14
13
|
class Writer
|
|
15
14
|
attr_reader \
|
data/lib/datadog/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: datadog
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.30.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: 2026-
|
|
11
|
+
date: 2026-03-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -64,14 +64,14 @@ dependencies:
|
|
|
64
64
|
requirements:
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
67
|
+
version: 29.0.0.1.0
|
|
68
68
|
type: :runtime
|
|
69
69
|
prerelease: false
|
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version:
|
|
74
|
+
version: 29.0.0.1.0
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
76
|
name: logger
|
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -169,6 +169,7 @@ files:
|
|
|
169
169
|
- ext/datadog_profiling_native_extension/unsafe_api_calls_check.h
|
|
170
170
|
- ext/libdatadog_api/crashtracker.c
|
|
171
171
|
- ext/libdatadog_api/crashtracker.h
|
|
172
|
+
- ext/libdatadog_api/crashtracker_report_exception.c
|
|
172
173
|
- ext/libdatadog_api/datadog_ruby_common.c
|
|
173
174
|
- ext/libdatadog_api/datadog_ruby_common.h
|
|
174
175
|
- ext/libdatadog_api/ddsketch.c
|
|
@@ -260,7 +261,7 @@ files:
|
|
|
260
261
|
- lib/datadog/appsec/contrib/rack/patcher.rb
|
|
261
262
|
- lib/datadog/appsec/contrib/rack/request_body_middleware.rb
|
|
262
263
|
- lib/datadog/appsec/contrib/rack/request_middleware.rb
|
|
263
|
-
- lib/datadog/appsec/contrib/
|
|
264
|
+
- lib/datadog/appsec/contrib/rack/response_body.rb
|
|
264
265
|
- lib/datadog/appsec/contrib/rails/framework.rb
|
|
265
266
|
- lib/datadog/appsec/contrib/rails/gateway/request.rb
|
|
266
267
|
- lib/datadog/appsec/contrib/rails/gateway/watcher.rb
|
|
@@ -281,6 +282,7 @@ files:
|
|
|
281
282
|
- lib/datadog/appsec/contrib/sinatra/patcher.rb
|
|
282
283
|
- lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb
|
|
283
284
|
- lib/datadog/appsec/contrib/sinatra/request_middleware.rb
|
|
285
|
+
- lib/datadog/appsec/counter_sampler.rb
|
|
284
286
|
- lib/datadog/appsec/event.rb
|
|
285
287
|
- lib/datadog/appsec/ext.rb
|
|
286
288
|
- lib/datadog/appsec/extensions.rb
|
|
@@ -310,8 +312,10 @@ files:
|
|
|
310
312
|
- lib/datadog/appsec/utils.rb
|
|
311
313
|
- lib/datadog/appsec/utils/hash_coercion.rb
|
|
312
314
|
- lib/datadog/appsec/utils/http.rb
|
|
315
|
+
- lib/datadog/appsec/utils/http/body.rb
|
|
313
316
|
- lib/datadog/appsec/utils/http/media_range.rb
|
|
314
317
|
- lib/datadog/appsec/utils/http/media_type.rb
|
|
318
|
+
- lib/datadog/appsec/utils/http/url_encoded.rb
|
|
315
319
|
- lib/datadog/auto_instrument.rb
|
|
316
320
|
- lib/datadog/auto_instrument_base.rb
|
|
317
321
|
- lib/datadog/core.rb
|
|
@@ -454,6 +458,7 @@ files:
|
|
|
454
458
|
- lib/datadog/core/utils/at_fork_monkey_patch.rb
|
|
455
459
|
- lib/datadog/core/utils/base64.rb
|
|
456
460
|
- lib/datadog/core/utils/duration.rb
|
|
461
|
+
- lib/datadog/core/utils/fnv.rb
|
|
457
462
|
- lib/datadog/core/utils/forking.rb
|
|
458
463
|
- lib/datadog/core/utils/hash.rb
|
|
459
464
|
- lib/datadog/core/utils/lru_cache.rb
|
|
@@ -516,6 +521,7 @@ files:
|
|
|
516
521
|
- lib/datadog/di/probe_manager.rb
|
|
517
522
|
- lib/datadog/di/probe_notification_builder.rb
|
|
518
523
|
- lib/datadog/di/probe_notifier_worker.rb
|
|
524
|
+
- lib/datadog/di/probe_repository.rb
|
|
519
525
|
- lib/datadog/di/proc_responder.rb
|
|
520
526
|
- lib/datadog/di/redactor.rb
|
|
521
527
|
- lib/datadog/di/remote.rb
|
|
@@ -539,6 +545,7 @@ files:
|
|
|
539
545
|
- lib/datadog/kit/appsec/events/v2.rb
|
|
540
546
|
- lib/datadog/kit/enable_core_dumps.rb
|
|
541
547
|
- lib/datadog/kit/identity.rb
|
|
548
|
+
- lib/datadog/kit/tracing/method_tracer.rb
|
|
542
549
|
- lib/datadog/open_feature.rb
|
|
543
550
|
- lib/datadog/open_feature/component.rb
|
|
544
551
|
- lib/datadog/open_feature/configuration.rb
|
|
@@ -1088,7 +1095,6 @@ files:
|
|
|
1088
1095
|
- lib/datadog/tracing/transport/traces.rb
|
|
1089
1096
|
- lib/datadog/tracing/utils.rb
|
|
1090
1097
|
- lib/datadog/tracing/workers.rb
|
|
1091
|
-
- lib/datadog/tracing/workers/trace_writer.rb
|
|
1092
1098
|
- lib/datadog/tracing/writer.rb
|
|
1093
1099
|
- lib/datadog/version.rb
|
|
1094
1100
|
homepage: https://github.com/DataDog/dd-trace-rb
|
|
@@ -1097,8 +1103,8 @@ licenses:
|
|
|
1097
1103
|
- Apache-2.0
|
|
1098
1104
|
metadata:
|
|
1099
1105
|
allowed_push_host: https://rubygems.org
|
|
1100
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
|
1101
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
|
1106
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.30.0/CHANGELOG.md
|
|
1107
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.30.0
|
|
1102
1108
|
post_install_message:
|
|
1103
1109
|
rdoc_options: []
|
|
1104
1110
|
require_paths:
|