ddtrace 1.12.1 → 1.13.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 +109 -9
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +97 -14
- data/ext/ddtrace_profiling_native_extension/extconf.rb +6 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +19 -6
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +1 -1
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +41 -2
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +6 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +6 -10
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +40 -4
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +14 -0
- data/lib/datadog/appsec/component.rb +9 -0
- data/lib/datadog/appsec/configuration/settings.rb +104 -195
- data/lib/datadog/appsec/configuration.rb +0 -79
- data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
- data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +52 -0
- data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
- data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
- data/lib/datadog/appsec/contrib/devise/tracking.rb +49 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +12 -7
- data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/rails/patcher.rb +8 -8
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +1 -1
- data/lib/datadog/appsec/event.rb +1 -1
- data/lib/datadog/appsec/extensions.rb +1 -130
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +1 -1
- data/lib/datadog/appsec/processor.rb +1 -1
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/remote.rb +1 -1
- data/lib/datadog/appsec.rb +1 -2
- data/lib/datadog/ci/configuration/settings.rb +6 -8
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +7 -5
- data/lib/datadog/ci/contrib/cucumber/ext.rb +10 -8
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +35 -0
- data/lib/datadog/ci/contrib/minitest/ext.rb +21 -0
- data/lib/datadog/ci/contrib/minitest/integration.rb +49 -0
- data/lib/datadog/ci/contrib/minitest/patcher.rb +27 -0
- data/lib/datadog/ci/contrib/minitest/test_helper.rb +68 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +7 -5
- data/lib/datadog/ci/contrib/rspec/ext.rb +9 -7
- data/lib/datadog/ci.rb +1 -0
- data/lib/datadog/core/backport.rb +51 -0
- data/lib/datadog/core/configuration/base.rb +5 -5
- data/lib/datadog/core/configuration/components.rb +6 -1
- data/lib/datadog/core/configuration/ext.rb +7 -5
- data/lib/datadog/core/configuration/option.rb +269 -19
- data/lib/datadog/core/configuration/option_definition.rb +76 -11
- data/lib/datadog/core/configuration/options.rb +22 -10
- data/lib/datadog/core/configuration/settings.rb +116 -61
- data/lib/datadog/core/environment/ext.rb +13 -11
- data/lib/datadog/core/environment/yjit.rb +58 -0
- data/lib/datadog/core/git/ext.rb +24 -22
- data/lib/datadog/core/logging/ext.rb +3 -1
- data/lib/datadog/core/metrics/ext.rb +7 -5
- data/lib/datadog/core/remote/client/capabilities.rb +5 -0
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +25 -34
- data/lib/datadog/core/remote/configuration/content.rb +28 -1
- data/lib/datadog/core/remote/configuration/repository.rb +3 -1
- data/lib/datadog/core/remote/ext.rb +1 -1
- data/lib/datadog/core/remote/negotiation.rb +17 -4
- data/lib/datadog/core/runtime/ext.rb +22 -12
- data/lib/datadog/core/runtime/metrics.rb +43 -0
- data/lib/datadog/core/telemetry/client.rb +12 -2
- data/lib/datadog/core/telemetry/emitter.rb +4 -2
- data/lib/datadog/core/telemetry/event.rb +19 -4
- data/lib/datadog/core/telemetry/ext.rb +4 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +2 -4
- data/lib/datadog/core/telemetry/http/ext.rb +10 -8
- data/lib/datadog/core/telemetry/http/transport.rb +1 -0
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
- data/lib/datadog/core/telemetry/v2/request.rb +29 -0
- data/lib/datadog/core/transport/http/client.rb +1 -1
- data/lib/datadog/core/transport/http/config.rb +10 -0
- data/lib/datadog/core/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/hash.rb +47 -0
- data/lib/datadog/core/utils/network.rb +1 -1
- data/lib/datadog/core/utils/safe_dup.rb +27 -20
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +2 -2
- data/lib/datadog/kit/appsec/events.rb +139 -89
- data/lib/datadog/kit/identity.rb +80 -65
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +3 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +9 -2
- data/lib/datadog/profiling/component.rb +41 -9
- data/lib/datadog/profiling/exporter.rb +5 -1
- data/lib/datadog/profiling/flush.rb +9 -2
- data/lib/datadog/profiling/http_transport.rb +4 -1
- data/lib/datadog/profiling/load_native_extension.rb +7 -1
- data/lib/datadog/profiling.rb +11 -1
- data/lib/datadog/tracing/component.rb +58 -6
- data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
- data/lib/datadog/tracing/configuration/ext.rb +35 -32
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +106 -92
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -23
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +0 -8
- data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -15
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +0 -5
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -16
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +37 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +9 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +19 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +8 -6
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +8 -5
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +43 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +0 -5
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +19 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/excon/middleware.rb +20 -5
- data/lib/datadog/tracing/contrib/ext.rb +23 -1
- data/lib/datadog/tracing/contrib/extensions.rb +32 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +16 -5
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +19 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +29 -20
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +21 -20
- data/lib/datadog/tracing/contrib/grpc/ext.rb +16 -13
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +4 -7
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/http/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +17 -5
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +17 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +17 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -39
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +20 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +9 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +9 -5
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +52 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +128 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +17 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +9 -5
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +25 -20
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +9 -5
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +12 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +21 -12
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +0 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +16 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +18 -16
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +53 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +8 -49
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +15 -11
- data/lib/datadog/tracing/contrib/rails/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +4 -10
- data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +12 -9
- data/lib/datadog/tracing/contrib/rake/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/redis/tags.rb +9 -5
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +9 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +20 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +18 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +11 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +21 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -13
- data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
- data/lib/datadog/tracing/correlation.rb +9 -12
- data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
- data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
- data/lib/datadog/tracing/metadata/ext.rb +9 -6
- data/lib/datadog/tracing/remote.rb +78 -0
- data/lib/datadog/tracing/sampling/rule_sampler.rb +29 -0
- data/lib/datadog/tracing/span_operation.rb +3 -15
- data/lib/datadog/tracing/trace_operation.rb +16 -3
- data/lib/datadog/tracing/trace_segment.rb +5 -2
- data/lib/datadog/tracing/tracer.rb +10 -1
- data/lib/ddtrace/transport/ext.rb +15 -9
- data/lib/ddtrace/transport/trace_formatter.rb +9 -0
- data/lib/ddtrace/version.rb +9 -12
- metadata +38 -10
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
|
@@ -7,7 +7,7 @@ module Datadog
|
|
|
7
7
|
# Passing in a `nil` tracer is supported and will disable the following profiling features:
|
|
8
8
|
# * Code Hotspots panel in the trace viewer, as well as scoping a profile down to a span
|
|
9
9
|
# * Endpoint aggregation in the profiler UX, including normalization (resource per endpoint call)
|
|
10
|
-
def self.build_profiler_component(settings:, agent_settings:, optional_tracer:)
|
|
10
|
+
def self.build_profiler_component(settings:, agent_settings:, optional_tracer:) # rubocop:disable Metrics/MethodLength
|
|
11
11
|
return unless settings.profiling.enabled
|
|
12
12
|
|
|
13
13
|
# Workaround for weird dependency direction: the Core::Configuration::Components class currently has a
|
|
@@ -64,7 +64,11 @@ module Datadog
|
|
|
64
64
|
|
|
65
65
|
# NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
|
|
66
66
|
|
|
67
|
+
no_signals_workaround_enabled = false
|
|
68
|
+
|
|
67
69
|
if enable_new_profiler?(settings)
|
|
70
|
+
no_signals_workaround_enabled = no_signals_workaround_enabled?(settings)
|
|
71
|
+
|
|
68
72
|
recorder = Datadog::Profiling::StackRecorder.new(
|
|
69
73
|
cpu_time_enabled: RUBY_PLATFORM.include?('linux'), # Only supported on Linux currently
|
|
70
74
|
alloc_samples_enabled: false, # Always disabled for now -- work in progress
|
|
@@ -76,7 +80,8 @@ module Datadog
|
|
|
76
80
|
endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled,
|
|
77
81
|
gc_profiling_enabled: enable_gc_profiling?(settings),
|
|
78
82
|
allocation_counting_enabled: settings.profiling.advanced.allocation_counting_enabled,
|
|
79
|
-
no_signals_workaround_enabled: no_signals_workaround_enabled
|
|
83
|
+
no_signals_workaround_enabled: no_signals_workaround_enabled,
|
|
84
|
+
timeline_enabled: settings.profiling.advanced.experimental_timeline_enabled,
|
|
80
85
|
)
|
|
81
86
|
else
|
|
82
87
|
load_pprof_support
|
|
@@ -85,7 +90,7 @@ module Datadog
|
|
|
85
90
|
collector = build_profiler_oldstack_collector(settings, recorder, optional_tracer)
|
|
86
91
|
end
|
|
87
92
|
|
|
88
|
-
exporter = build_profiler_exporter(settings, recorder)
|
|
93
|
+
exporter = build_profiler_exporter(settings, recorder, no_signals_workaround_enabled: no_signals_workaround_enabled)
|
|
89
94
|
transport = build_profiler_transport(settings, agent_settings)
|
|
90
95
|
scheduler = Profiling::Scheduler.new(exporter: exporter, transport: transport)
|
|
91
96
|
|
|
@@ -96,11 +101,15 @@ module Datadog
|
|
|
96
101
|
Profiling::OldRecorder.new([Profiling::Events::StackSample], settings.profiling.advanced.max_events)
|
|
97
102
|
end
|
|
98
103
|
|
|
99
|
-
private_class_method def self.build_profiler_exporter(settings, recorder)
|
|
104
|
+
private_class_method def self.build_profiler_exporter(settings, recorder, no_signals_workaround_enabled:)
|
|
100
105
|
code_provenance_collector =
|
|
101
106
|
(Profiling::Collectors::CodeProvenance.new if settings.profiling.advanced.code_provenance_enabled)
|
|
102
107
|
|
|
103
|
-
Profiling::Exporter.new(
|
|
108
|
+
Profiling::Exporter.new(
|
|
109
|
+
pprof_recorder: recorder,
|
|
110
|
+
code_provenance_collector: code_provenance_collector,
|
|
111
|
+
no_signals_workaround_enabled: no_signals_workaround_enabled,
|
|
112
|
+
)
|
|
104
113
|
end
|
|
105
114
|
|
|
106
115
|
private_class_method def self.build_profiler_oldstack_collector(settings, old_recorder, tracer)
|
|
@@ -198,7 +207,7 @@ module Datadog
|
|
|
198
207
|
if Gem.loaded_specs['mysql2'] && incompatible_libmysqlclient_version?(settings)
|
|
199
208
|
Datadog.logger.warn(
|
|
200
209
|
'Enabling the profiling "no signals" workaround because an incompatible version of the mysql2 gem is ' \
|
|
201
|
-
'installed. Profiling data will have lower quality.' \
|
|
210
|
+
'installed. Profiling data will have lower quality. ' \
|
|
202
211
|
'To fix this, upgrade the libmysqlclient in your OS image to version 8.0.0 or above.'
|
|
203
212
|
)
|
|
204
213
|
return true
|
|
@@ -214,6 +223,16 @@ module Datadog
|
|
|
214
223
|
return true
|
|
215
224
|
end
|
|
216
225
|
|
|
226
|
+
if defined?(::PhusionPassenger)
|
|
227
|
+
Datadog.logger.warn(
|
|
228
|
+
'Enabling the profiling "no signals" workaround because the passenger web server is in use. ' \
|
|
229
|
+
'This is needed because passenger is currently incompatible with the normal working mode ' \
|
|
230
|
+
'of the profiler, as detailed in <https://github.com/DataDog/dd-trace-rb/issues/2976>. ' \
|
|
231
|
+
'Profiling data will have lower quality.'
|
|
232
|
+
)
|
|
233
|
+
return true
|
|
234
|
+
end
|
|
235
|
+
|
|
217
236
|
false
|
|
218
237
|
end
|
|
219
238
|
|
|
@@ -236,9 +255,22 @@ module Datadog
|
|
|
236
255
|
begin
|
|
237
256
|
require 'mysql2'
|
|
238
257
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
258
|
+
# The mysql2-aurora gem likes to monkey patch itself in replacement of Mysql2::Client, and uses
|
|
259
|
+
# `method_missing` to delegate to the original BUT unfortunately does not implement `respond_to_missing?` and
|
|
260
|
+
# thus our `respond_to?(:info)` below was failing.
|
|
261
|
+
#
|
|
262
|
+
# But on the bright side, the gem does stash a reference to the original Mysql2::Client class in a constant,
|
|
263
|
+
# so if that constant exists, we use that for our probing.
|
|
264
|
+
mysql2_client_class =
|
|
265
|
+
if defined?(Mysql2::Aurora::ORIGINAL_CLIENT_CLASS)
|
|
266
|
+
Mysql2::Aurora::ORIGINAL_CLIENT_CLASS
|
|
267
|
+
elsif defined?(Mysql2::Client)
|
|
268
|
+
Mysql2::Client
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
return true unless mysql2_client_class && mysql2_client_class.respond_to?(:info)
|
|
272
|
+
|
|
273
|
+
libmysqlclient_version = Gem::Version.new(mysql2_client_class.info[:version])
|
|
242
274
|
|
|
243
275
|
compatible = libmysqlclient_version >= Gem::Version.new('8.0.0')
|
|
244
276
|
|
|
@@ -22,13 +22,15 @@ module Datadog
|
|
|
22
22
|
:minimum_duration_seconds,
|
|
23
23
|
:time_provider,
|
|
24
24
|
:last_flush_finish_at,
|
|
25
|
-
:created_at
|
|
25
|
+
:created_at,
|
|
26
|
+
:no_signals_workaround_enabled
|
|
26
27
|
|
|
27
28
|
public
|
|
28
29
|
|
|
29
30
|
def initialize(
|
|
30
31
|
pprof_recorder:,
|
|
31
32
|
code_provenance_collector:,
|
|
33
|
+
no_signals_workaround_enabled:,
|
|
32
34
|
minimum_duration_seconds: PROFILE_DURATION_THRESHOLD_SECONDS,
|
|
33
35
|
time_provider: Time
|
|
34
36
|
)
|
|
@@ -38,6 +40,7 @@ module Datadog
|
|
|
38
40
|
@time_provider = time_provider
|
|
39
41
|
@last_flush_finish_at = nil
|
|
40
42
|
@created_at = time_provider.now.utc
|
|
43
|
+
@no_signals_workaround_enabled = no_signals_workaround_enabled
|
|
41
44
|
end
|
|
42
45
|
|
|
43
46
|
def flush
|
|
@@ -61,6 +64,7 @@ module Datadog
|
|
|
61
64
|
code_provenance_file_name: Datadog::Profiling::Ext::Transport::HTTP::CODE_PROVENANCE_FILENAME,
|
|
62
65
|
code_provenance_data: uncompressed_code_provenance,
|
|
63
66
|
tags_as_array: Datadog::Profiling::TagBuilder.call(settings: Datadog.configuration).to_a,
|
|
67
|
+
no_signals_workaround_enabled: no_signals_workaround_enabled,
|
|
64
68
|
)
|
|
65
69
|
end
|
|
66
70
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module Profiling
|
|
5
7
|
# Represents a collection of events of a specific type being flushed.
|
|
@@ -14,7 +16,8 @@ module Datadog
|
|
|
14
16
|
:pprof_data, # gzipped pprof bytes
|
|
15
17
|
:code_provenance_file_name,
|
|
16
18
|
:code_provenance_data, # gzipped json bytes
|
|
17
|
-
:tags_as_array
|
|
19
|
+
:tags_as_array,
|
|
20
|
+
:internal_metadata_json
|
|
18
21
|
|
|
19
22
|
def initialize(
|
|
20
23
|
start:,
|
|
@@ -23,7 +26,8 @@ module Datadog
|
|
|
23
26
|
pprof_data:,
|
|
24
27
|
code_provenance_file_name:,
|
|
25
28
|
code_provenance_data:,
|
|
26
|
-
tags_as_array
|
|
29
|
+
tags_as_array:,
|
|
30
|
+
no_signals_workaround_enabled:
|
|
27
31
|
)
|
|
28
32
|
@start = start
|
|
29
33
|
@finish = finish
|
|
@@ -32,6 +36,9 @@ module Datadog
|
|
|
32
36
|
@code_provenance_file_name = code_provenance_file_name
|
|
33
37
|
@code_provenance_data = code_provenance_data
|
|
34
38
|
@tags_as_array = tags_as_array
|
|
39
|
+
@internal_metadata_json = JSON.fast_generate(
|
|
40
|
+
no_signals_workaround_enabled: (!!no_signals_workaround_enabled).to_s,
|
|
41
|
+
)
|
|
35
42
|
end
|
|
36
43
|
end
|
|
37
44
|
end
|
|
@@ -40,6 +40,7 @@ module Datadog
|
|
|
40
40
|
code_provenance_data: flush.code_provenance_data,
|
|
41
41
|
|
|
42
42
|
tags_as_array: flush.tags_as_array,
|
|
43
|
+
internal_metadata_json: flush.internal_metadata_json,
|
|
43
44
|
)
|
|
44
45
|
|
|
45
46
|
if status == :ok
|
|
@@ -109,7 +110,8 @@ module Datadog
|
|
|
109
110
|
pprof_data:,
|
|
110
111
|
code_provenance_file_name:,
|
|
111
112
|
code_provenance_data:,
|
|
112
|
-
tags_as_array
|
|
113
|
+
tags_as_array:,
|
|
114
|
+
internal_metadata_json:
|
|
113
115
|
)
|
|
114
116
|
self.class._native_do_export(
|
|
115
117
|
exporter_configuration,
|
|
@@ -123,6 +125,7 @@ module Datadog
|
|
|
123
125
|
code_provenance_file_name,
|
|
124
126
|
code_provenance_data,
|
|
125
127
|
tags_as_array,
|
|
128
|
+
internal_metadata_json,
|
|
126
129
|
)
|
|
127
130
|
end
|
|
128
131
|
end
|
|
@@ -9,7 +9,13 @@
|
|
|
9
9
|
# All code on this file is on-purpose at the top-level; this makes it so this file is executed only once,
|
|
10
10
|
# the first time it gets required, to avoid any issues with the native extension being initialized more than once.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
begin
|
|
13
|
+
require "ddtrace_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}"
|
|
14
|
+
rescue LoadError => e
|
|
15
|
+
raise LoadError,
|
|
16
|
+
'Failed to load the profiling loader extension. To fix this, please remove and then reinstall ddtrace ' \
|
|
17
|
+
"(Details: #{e.message})"
|
|
18
|
+
end
|
|
13
19
|
|
|
14
20
|
extension_name = "ddtrace_profiling_native_extension.#{RUBY_VERSION}_#{RUBY_PLATFORM}"
|
|
15
21
|
full_file_path = "#{__dir__}/../../#{extension_name}.#{RbConfig::CONFIG['DLEXT']}"
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -66,6 +66,11 @@ module Datadog
|
|
|
66
66
|
nil
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
def self.enabled?
|
|
70
|
+
profiler = Datadog.send(:components).profiler
|
|
71
|
+
!!(profiler.scheduler.running? if profiler)
|
|
72
|
+
end
|
|
73
|
+
|
|
69
74
|
private_class_method def self.replace_noop_allocation_count
|
|
70
75
|
def self.allocation_count # rubocop:disable Lint/DuplicateMethods, Lint/NestedMethodDefinition (On purpose!)
|
|
71
76
|
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
@@ -178,6 +183,10 @@ module Datadog
|
|
|
178
183
|
end
|
|
179
184
|
end
|
|
180
185
|
|
|
186
|
+
# All requires for the profiler should be directly added here; and everything should be loaded eagerly.
|
|
187
|
+
# (Currently there's a few exceptions for the old profiler, but we should avoid other exceptions.)
|
|
188
|
+
#
|
|
189
|
+
# All of the profiler should be loaded and ready to go when this method returns `true`.
|
|
181
190
|
private_class_method def self.load_profiling
|
|
182
191
|
return false unless supported?
|
|
183
192
|
|
|
@@ -197,7 +206,8 @@ module Datadog
|
|
|
197
206
|
require_relative 'profiling/profiler'
|
|
198
207
|
require_relative 'profiling/native_extension'
|
|
199
208
|
require_relative 'profiling/trace_identifiers/helper'
|
|
200
|
-
# This file is
|
|
209
|
+
# This file is no longer eagerly loaded as a workaround for an issue. It only gets loaded dynamically if the old
|
|
210
|
+
# profiler is in use. See Profiling::Component#load_pprof_support for more details.
|
|
201
211
|
# require_relative 'profiling/pprof/pprof_pb'
|
|
202
212
|
require_relative 'profiling/tag_builder'
|
|
203
213
|
require_relative 'profiling/http_transport'
|
|
@@ -10,6 +10,17 @@ module Datadog
|
|
|
10
10
|
module Tracing
|
|
11
11
|
# Tracing component
|
|
12
12
|
module Component
|
|
13
|
+
# Methods that interact with component instance fields.
|
|
14
|
+
module InstanceMethods
|
|
15
|
+
# Hot-swaps with a new sampler.
|
|
16
|
+
# This operation acquires the Components lock to ensure
|
|
17
|
+
# there is no concurrent modification of the sampler.
|
|
18
|
+
def reconfigure_live_sampler
|
|
19
|
+
sampler = self.class.build_sampler(Datadog.configuration)
|
|
20
|
+
Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
13
24
|
def build_tracer(settings, agent_settings)
|
|
14
25
|
# If a custom tracer has been provided, use it instead.
|
|
15
26
|
# Ignore all other options (they should already be configured.)
|
|
@@ -27,13 +38,18 @@ module Datadog
|
|
|
27
38
|
writer = build_writer(settings, agent_settings)
|
|
28
39
|
end
|
|
29
40
|
|
|
30
|
-
|
|
41
|
+
# The sampler instance is wrapped in a delegator,
|
|
42
|
+
# so dynamic instrumentation can hot-swap it.
|
|
43
|
+
# This prevents full tracer reinitialization on sampling changes.
|
|
44
|
+
sampler_delegator = SamplerDelegatorComponent.new(sampler)
|
|
45
|
+
|
|
46
|
+
subscribe_to_writer_events!(writer, sampler_delegator, settings.tracing.test_mode.enabled)
|
|
31
47
|
|
|
32
48
|
Tracing::Tracer.new(
|
|
33
49
|
default_service: settings.service,
|
|
34
50
|
enabled: settings.tracing.enabled,
|
|
35
51
|
trace_flush: trace_flush,
|
|
36
|
-
sampler:
|
|
52
|
+
sampler: sampler_delegator,
|
|
37
53
|
span_sampler: build_span_sampler(settings),
|
|
38
54
|
writer: writer,
|
|
39
55
|
tags: build_tracer_tags(settings),
|
|
@@ -62,6 +78,23 @@ module Datadog
|
|
|
62
78
|
else
|
|
63
79
|
ensure_priority_sampling(sampler, settings)
|
|
64
80
|
end
|
|
81
|
+
elsif (rules = settings.tracing.sampling.rules)
|
|
82
|
+
post_sampler = Tracing::Sampling::RuleSampler.parse(
|
|
83
|
+
rules,
|
|
84
|
+
settings.tracing.sampling.rate_limit,
|
|
85
|
+
settings.tracing.sampling.default_rate
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
post_sampler ||= # Fallback RuleSampler in case `rules` parsing fails
|
|
89
|
+
Tracing::Sampling::RuleSampler.new(
|
|
90
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
91
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
95
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
96
|
+
post_sampler: post_sampler
|
|
97
|
+
)
|
|
65
98
|
elsif settings.tracing.priority_sampling == false
|
|
66
99
|
Tracing::Sampling::RuleSampler.new(
|
|
67
100
|
rate_limit: settings.tracing.sampling.rate_limit,
|
|
@@ -105,13 +138,11 @@ module Datadog
|
|
|
105
138
|
Tracing::Writer.new(agent_settings: agent_settings, **settings.tracing.writer_options)
|
|
106
139
|
end
|
|
107
140
|
|
|
108
|
-
def subscribe_to_writer_events!(writer,
|
|
141
|
+
def subscribe_to_writer_events!(writer, sampler_delegator, test_mode)
|
|
109
142
|
return unless writer.respond_to?(:events) # Check if it's a custom, external writer
|
|
110
143
|
|
|
111
144
|
writer.events.after_send.subscribe(&WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK)
|
|
112
145
|
|
|
113
|
-
return unless sampler.is_a?(Tracing::Sampling::PrioritySampler)
|
|
114
|
-
|
|
115
146
|
# DEV: We need to ignore priority sampling updates coming from the agent in test mode
|
|
116
147
|
# because test mode wants to *unconditionally* sample all traces.
|
|
117
148
|
#
|
|
@@ -119,7 +150,7 @@ module Datadog
|
|
|
119
150
|
# here to achieve 100% sampling rate.
|
|
120
151
|
return if test_mode
|
|
121
152
|
|
|
122
|
-
writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(
|
|
153
|
+
writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(sampler_delegator))
|
|
123
154
|
end
|
|
124
155
|
|
|
125
156
|
WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK = lambda do |_, responses|
|
|
@@ -143,6 +174,27 @@ module Datadog
|
|
|
143
174
|
Tracing::Sampling::Span::Sampler.new(rules || [])
|
|
144
175
|
end
|
|
145
176
|
|
|
177
|
+
# Sampler wrapper component, to allow for hot-swapping
|
|
178
|
+
# the sampler instance used by the tracer.
|
|
179
|
+
# Swapping samplers happens during Dynamic Configuration.
|
|
180
|
+
class SamplerDelegatorComponent
|
|
181
|
+
attr_accessor :sampler
|
|
182
|
+
|
|
183
|
+
def initialize(sampler)
|
|
184
|
+
@sampler = sampler
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def sample!(trace)
|
|
188
|
+
@sampler.sample!(trace)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def update(*args, **kwargs)
|
|
192
|
+
return unless @sampler.respond_to?(:update)
|
|
193
|
+
|
|
194
|
+
@sampler.update(*args, **kwargs)
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
146
198
|
private
|
|
147
199
|
|
|
148
200
|
def build_tracer_tags(settings)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Configuration
|
|
6
|
+
module Dynamic
|
|
7
|
+
# Maps a remote dynamic configuration to a location configuration option.
|
|
8
|
+
class Option
|
|
9
|
+
attr_reader :name, :env_var
|
|
10
|
+
|
|
11
|
+
# @param name [String] dynamic configuration option name. This must match the remote configuration payload.
|
|
12
|
+
def initialize(name, env_var)
|
|
13
|
+
@name = name
|
|
14
|
+
@env_var = env_var
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Reconfigures the provided option, setting its value to `value`.
|
|
18
|
+
#
|
|
19
|
+
# @param value [Object,nil] the new value for this option
|
|
20
|
+
def call(value)
|
|
21
|
+
raise NotImplementedError
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# A dynamic configuration option that can directly mapped to a `Datadog.configuration`
|
|
26
|
+
# option and changing such option is the only requirement to apply the configuration locally.
|
|
27
|
+
class SimpleOption < Option
|
|
28
|
+
# @param name [String] dynamic configuration option name. This must match the remote configuration payload.
|
|
29
|
+
# @param env_var [String] the canonical environment variable that represents this option.
|
|
30
|
+
# This is used for telemetry reporting.
|
|
31
|
+
# @param setting_key [Symbol] option from `Datadog.configuration.tracing` that will be modified
|
|
32
|
+
#
|
|
33
|
+
# DEV: `Datadog.configuration` cannot be an argument default value because
|
|
34
|
+
# DEV: it is dynamic. Also, it is not yet declared when this method is parsed by Ruby.
|
|
35
|
+
def initialize(name, env_var, setting_key)
|
|
36
|
+
super(name, env_var)
|
|
37
|
+
@setting_key = setting_key
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Reconfigures the provided option, setting its value to `value`.
|
|
41
|
+
#
|
|
42
|
+
# @param value [Object,nil] the new value for this option
|
|
43
|
+
def call(value)
|
|
44
|
+
Datadog.logger.debug { "Reconfigured tracer option `#{@setting_key}` with value `#{value}`" }
|
|
45
|
+
|
|
46
|
+
if value.nil?
|
|
47
|
+
# Restore the local configuration value
|
|
48
|
+
configuration_object.unset_option(
|
|
49
|
+
@setting_key,
|
|
50
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
51
|
+
)
|
|
52
|
+
else
|
|
53
|
+
configuration_object.set_option(
|
|
54
|
+
@setting_key,
|
|
55
|
+
value,
|
|
56
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
protected
|
|
62
|
+
|
|
63
|
+
# The base where `setting_key` will apply
|
|
64
|
+
def configuration_object
|
|
65
|
+
Datadog.configuration.tracing
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'dynamic/option'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Configuration
|
|
8
|
+
# Tracing Dynamic Configuration,
|
|
9
|
+
# powered by the Remote Configuration platform.
|
|
10
|
+
module Dynamic
|
|
11
|
+
# Dynamic configuration for `DD_LOGS_INJECTION`.
|
|
12
|
+
class LogInjectionEnabled < SimpleOption
|
|
13
|
+
def initialize
|
|
14
|
+
super('log_injection_enabled', 'DD_LOGS_INJECTION', :log_injection)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Dynamic configuration for `DD_TRACE_HEADER_TAGS`.
|
|
19
|
+
class TracingHeaderTags < SimpleOption
|
|
20
|
+
def initialize
|
|
21
|
+
super('tracing_header_tags', 'DD_TRACE_HEADER_TAGS', :header_tags)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(tracing_header_tags)
|
|
25
|
+
# Modify the remote configuration value that it matches the
|
|
26
|
+
# environment variable it configures.
|
|
27
|
+
if tracing_header_tags
|
|
28
|
+
tracing_header_tags.map! do |hash|
|
|
29
|
+
"#{hash['header']}:#{hash['tag_name']}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
super(tracing_header_tags)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Dynamic configuration for `DD_TRACE_SAMPLE_RATE`.
|
|
38
|
+
class TracingSamplingRate < SimpleOption
|
|
39
|
+
def initialize
|
|
40
|
+
super('tracing_sampling_rate', 'DD_TRACE_SAMPLE_RATE', :default_rate)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Ensures sampler is rebuilt and new configuration is applied
|
|
44
|
+
def call(tracing_sampling_rate)
|
|
45
|
+
super
|
|
46
|
+
Datadog.send(:components).reconfigure_live_sampler
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
def configuration_object
|
|
52
|
+
Datadog.configuration.tracing.sampling
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# List of all tracing dynamic configuration options supported.
|
|
57
|
+
OPTIONS = [LogInjectionEnabled, TracingHeaderTags, TracingSamplingRate].map do |option_class|
|
|
58
|
+
option = option_class.new
|
|
59
|
+
[option.name, option.env_var, option]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -1,99 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Tracing
|
|
3
5
|
module Configuration
|
|
4
6
|
# Constants for configuration settings
|
|
5
7
|
# e.g. Env vars, default values, enums, etc...
|
|
6
8
|
module Ext
|
|
7
|
-
ENV_ENABLED = 'DD_TRACE_ENABLED'
|
|
8
|
-
|
|
9
|
+
ENV_ENABLED = 'DD_TRACE_ENABLED'
|
|
10
|
+
ENV_HEADER_TAGS = 'DD_TRACE_HEADER_TAGS'
|
|
11
|
+
ENV_TRACE_ID_128_BIT_GENERATION_ENABLED = 'DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED'
|
|
9
12
|
|
|
10
13
|
# @public_api
|
|
11
14
|
module SpanAttributeSchema
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
VERSION_ONE = 'v1'.freeze
|
|
15
|
+
ENV_GLOBAL_DEFAULT_SERVICE_NAME_ENABLED = 'DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED'
|
|
16
|
+
ENV_PEER_SERVICE_MAPPING = 'DD_TRACE_PEER_SERVICE_MAPPING'
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
# @public_api
|
|
18
20
|
module Analytics
|
|
19
|
-
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'
|
|
21
|
+
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
# @public_api
|
|
23
25
|
module Correlation
|
|
24
|
-
ENV_LOGS_INJECTION_ENABLED = 'DD_LOGS_INJECTION'
|
|
25
|
-
ENV_TRACE_ID_128_BIT_LOGGING_ENABLED = 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
26
|
+
ENV_LOGS_INJECTION_ENABLED = 'DD_LOGS_INJECTION'
|
|
27
|
+
ENV_TRACE_ID_128_BIT_LOGGING_ENABLED = 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
# @public_api
|
|
29
31
|
module Distributed
|
|
30
32
|
# Custom Datadog format
|
|
31
|
-
PROPAGATION_STYLE_DATADOG = 'Datadog'
|
|
33
|
+
PROPAGATION_STYLE_DATADOG = 'Datadog'
|
|
32
34
|
|
|
33
|
-
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'
|
|
35
|
+
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'
|
|
34
36
|
# @deprecated Use `b3multi` instead.
|
|
35
|
-
PROPAGATION_STYLE_B3 = 'B3'
|
|
37
|
+
PROPAGATION_STYLE_B3 = 'B3'
|
|
36
38
|
|
|
37
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'
|
|
39
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'
|
|
38
40
|
# @deprecated Use `b3` instead.
|
|
39
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'
|
|
41
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'
|
|
40
42
|
|
|
41
43
|
# W3C Trace Context
|
|
42
|
-
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
|
44
|
+
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
|
43
45
|
|
|
44
46
|
# Sets both extract and inject propagation style tho the provided value.
|
|
45
47
|
# Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
|
|
46
48
|
# `DD_TRACE_PROPAGATION_STYLE_EXTRACT`.
|
|
47
|
-
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
49
|
+
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
48
50
|
|
|
49
|
-
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
51
|
+
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
50
52
|
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_INJECT` instead.
|
|
51
|
-
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'
|
|
53
|
+
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'
|
|
52
54
|
|
|
53
|
-
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'
|
|
55
|
+
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'
|
|
54
56
|
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_EXTRACT` instead.
|
|
55
|
-
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'
|
|
57
|
+
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'
|
|
56
58
|
|
|
57
59
|
# A no-op propagator. Compatible with OpenTelemetry's `none` propagator.
|
|
58
60
|
# @see https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/#get_otel__propagators
|
|
59
|
-
PROPAGATION_STYLE_NONE = 'none'
|
|
61
|
+
PROPAGATION_STYLE_NONE = 'none'
|
|
60
62
|
|
|
61
|
-
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'
|
|
63
|
+
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'
|
|
62
64
|
end
|
|
63
65
|
|
|
64
66
|
# @public_api
|
|
65
67
|
module NET
|
|
66
|
-
ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'
|
|
68
|
+
ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
# @public_api
|
|
70
72
|
module Sampling
|
|
71
|
-
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
72
|
-
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
73
|
+
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
74
|
+
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
75
|
+
ENV_RULES = 'DD_TRACE_SAMPLING_RULES'
|
|
73
76
|
|
|
74
77
|
# @public_api
|
|
75
78
|
module Span
|
|
76
|
-
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'
|
|
77
|
-
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'
|
|
79
|
+
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'
|
|
80
|
+
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'
|
|
78
81
|
end
|
|
79
82
|
end
|
|
80
83
|
|
|
81
84
|
# @public_api
|
|
82
85
|
module Test
|
|
83
|
-
ENV_MODE_ENABLED = 'DD_TRACE_TEST_MODE_ENABLED'
|
|
86
|
+
ENV_MODE_ENABLED = 'DD_TRACE_TEST_MODE_ENABLED'
|
|
84
87
|
end
|
|
85
88
|
|
|
86
89
|
# @public_api
|
|
87
90
|
module Transport
|
|
88
|
-
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'
|
|
89
|
-
ENV_DEFAULT_URL = 'DD_TRACE_AGENT_URL'
|
|
91
|
+
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'
|
|
92
|
+
ENV_DEFAULT_URL = 'DD_TRACE_AGENT_URL'
|
|
90
93
|
end
|
|
91
94
|
|
|
92
95
|
# @public_api
|
|
93
96
|
module ClientIp
|
|
94
|
-
ENV_ENABLED = 'DD_TRACE_CLIENT_IP_ENABLED'
|
|
95
|
-
ENV_DISABLED = 'DD_TRACE_CLIENT_IP_HEADER_DISABLED'
|
|
96
|
-
ENV_HEADER_NAME = 'DD_TRACE_CLIENT_IP_HEADER'
|
|
97
|
+
ENV_ENABLED = 'DD_TRACE_CLIENT_IP_ENABLED'
|
|
98
|
+
ENV_DISABLED = 'DD_TRACE_CLIENT_IP_HEADER_DISABLED' # TODO: deprecated, remove later
|
|
99
|
+
ENV_HEADER_NAME = 'DD_TRACE_CLIENT_IP_HEADER'
|
|
97
100
|
end
|
|
98
101
|
end
|
|
99
102
|
end
|