datadog 2.39.0 → 2.41.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 +97 -44
- data/ext/datadog_profiling_native_extension/collectors_stack.c +219 -148
- data/ext/datadog_profiling_native_extension/collectors_stack.h +16 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +12 -7
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +19 -11
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +12 -7
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -3
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +284 -76
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +16 -10
- data/ext/libdatadog_api/datadog_ruby_common.c +19 -11
- data/ext/libdatadog_api/datadog_ruby_common.h +7 -0
- data/ext/libdatadog_api/init.c +4 -0
- data/ext/libdatadog_api/trace_exporter.c +1312 -0
- data/ext/libdatadog_api/trace_exporter.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/ai_guard/api_client.rb +1 -1
- data/lib/datadog/ai_guard/evaluation/request.rb +8 -8
- data/lib/datadog/ai_guard/evaluation.rb +11 -3
- data/lib/datadog/ai_guard/ext.rb +3 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +21 -42
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +11 -2
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +1 -1
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +2 -2
- data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +6 -3
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +2 -2
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
- data/lib/datadog/appsec/processor/rule_loader.rb +12 -12
- data/lib/datadog/appsec/response.rb +1 -1
- data/lib/datadog/appsec/route_normalizer/route_pattern.rb +3 -3
- data/lib/datadog/appsec/security_engine/engine.rb +3 -3
- data/lib/datadog/core/configuration/components.rb +2 -2
- data/lib/datadog/core/configuration/option_definition.rb +1 -1
- data/lib/datadog/core/configuration/options.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +33 -41
- data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +36 -1
- data/lib/datadog/core/environment/gc.rb +1 -1
- data/lib/datadog/core/environment/vm_cache.rb +1 -1
- data/lib/datadog/core/environment/yjit.rb +2 -2
- data/lib/datadog/core/metrics/helpers.rb +1 -1
- data/lib/datadog/core/metrics/options.rb +2 -2
- data/lib/datadog/core/process_discovery.rb +1 -1
- data/lib/datadog/core/remote/client.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -2
- data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +3 -1
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +1 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +5 -24
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +1 -1
- data/lib/datadog/core/telemetry/event/log.rb +2 -2
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +1 -1
- data/lib/datadog/core/telemetry/metric.rb +2 -2
- data/lib/datadog/core/telemetry/request.rb +2 -2
- data/lib/datadog/core/transport/http.rb +1 -1
- data/lib/datadog/core/transport/transport.rb +1 -1
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +170 -18
- data/lib/datadog/core/utils/sequence.rb +3 -6
- data/lib/datadog/core/utils/time.rb +16 -54
- data/lib/datadog/data_streams/processor.rb +14 -14
- data/lib/datadog/di/el/compiler.rb +88 -12
- data/lib/datadog/di/el/evaluator.rb +82 -2
- data/lib/datadog/di/el/expression.rb +13 -2
- data/lib/datadog/di/instrumenter.rb +5 -4
- data/lib/datadog/di/probe_builder.rb +7 -6
- data/lib/datadog/di/probe_notification_builder.rb +2 -2
- data/lib/datadog/di/serializer.rb +29 -4
- data/lib/datadog/error_tracking/component.rb +1 -1
- data/lib/datadog/kit/appsec/events/v2.rb +2 -2
- data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
- data/lib/datadog/open_feature/exposures/event.rb +5 -5
- data/lib/datadog/profiling/collectors/info.rb +1 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +6 -13
- data/lib/datadog/profiling/component.rb +1 -0
- data/lib/datadog/profiling/tasks/exec.rb +1 -1
- data/lib/datadog/profiling.rb +4 -0
- data/lib/datadog/symbol_database/extractor.rb +6 -6
- data/lib/datadog/tracing/component.rb +21 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +5 -3
- data/lib/datadog/tracing/configuration/ext.rb +1 -0
- data/lib/datadog/tracing/configuration/settings.rb +16 -0
- data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +2 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +4 -0
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +7 -2
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +7 -2
- data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/patchable.rb +1 -1
- data/lib/datadog/tracing/contrib/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/quantize.rb +36 -2
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +9 -3
- data/lib/datadog/tracing/contrib/sequel/database.rb +1 -5
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +1 -1
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/correlation.rb +2 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +2 -2
- data/lib/datadog/tracing/distributed/baggage.rb +1 -2
- data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
- data/lib/datadog/tracing/metadata/tagging.rb +1 -1
- data/lib/datadog/tracing/remote.rb +2 -2
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_operation.rb +1 -1
- data/lib/datadog/tracing/sync_writer.rb +8 -3
- data/lib/datadog/tracing/tracer.rb +8 -0
- data/lib/datadog/tracing/transport/io/traces.rb +1 -1
- data/lib/datadog/tracing/transport/native/response.rb +71 -0
- data/lib/datadog/tracing/transport/native.rb +387 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +1 -1
- data/lib/datadog/tracing/writer.rb +17 -4
- data/lib/datadog/version.rb +1 -1
- metadata +12 -7
|
@@ -31,7 +31,7 @@ module Datadog
|
|
|
31
31
|
@waf_builder = WAF::HandleBuilder.new(
|
|
32
32
|
obfuscator: {
|
|
33
33
|
key_regex: appsec_settings.obfuscator_key_regex,
|
|
34
|
-
value_regex: appsec_settings.obfuscator_value_regex
|
|
34
|
+
value_regex: appsec_settings.obfuscator_value_regex,
|
|
35
35
|
}
|
|
36
36
|
)
|
|
37
37
|
|
|
@@ -130,7 +130,7 @@ module Datadog
|
|
|
130
130
|
tags: {
|
|
131
131
|
waf_version: Datadog::AppSec::WAF::VERSION::BASE_STRING,
|
|
132
132
|
event_rules_version: ruleset_version.to_s,
|
|
133
|
-
success: success.to_s
|
|
133
|
+
success: success.to_s,
|
|
134
134
|
}
|
|
135
135
|
)
|
|
136
136
|
end
|
|
@@ -156,7 +156,7 @@ module Datadog
|
|
|
156
156
|
common_tags = {
|
|
157
157
|
waf_version: Datadog::AppSec::WAF::VERSION::BASE_STRING,
|
|
158
158
|
event_rules_version: diagnostics["ruleset_version"].to_s,
|
|
159
|
-
action: action
|
|
159
|
+
action: action,
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
if diagnostics["error"]
|
|
@@ -352,13 +352,13 @@ module Datadog
|
|
|
352
352
|
# have direct ownership of it.
|
|
353
353
|
old_statsd = [
|
|
354
354
|
runtime_metrics.metrics.statsd,
|
|
355
|
-
health_metrics.statsd
|
|
355
|
+
health_metrics.statsd,
|
|
356
356
|
].compact.uniq
|
|
357
357
|
|
|
358
358
|
new_statsd = if replacement
|
|
359
359
|
[
|
|
360
360
|
replacement.runtime_metrics.metrics.statsd,
|
|
361
|
-
replacement.health_metrics.statsd
|
|
361
|
+
replacement.health_metrics.statsd,
|
|
362
362
|
].compact.uniq
|
|
363
363
|
else
|
|
364
364
|
[]
|
|
@@ -644,6 +644,13 @@ module Datadog
|
|
|
644
644
|
o.env "DD_PROFILING_EXPERIMENTAL_USE_SYSTEM_DNS"
|
|
645
645
|
o.default true
|
|
646
646
|
end
|
|
647
|
+
|
|
648
|
+
# Whether the profiler samples include the class/module name in stack frames, like `Foo::Bar#baz`, or not (`baz`)
|
|
649
|
+
option :experimental_show_classes_enabled do |o|
|
|
650
|
+
o.type :bool
|
|
651
|
+
o.env "DD_PROFILING_EXPERIMENTAL_SHOW_CLASSES_ENABLED"
|
|
652
|
+
o.default false
|
|
653
|
+
end
|
|
647
654
|
end
|
|
648
655
|
|
|
649
656
|
# @public_api
|
|
@@ -792,55 +799,40 @@ module Datadog
|
|
|
792
799
|
end
|
|
793
800
|
end
|
|
794
801
|
|
|
795
|
-
#
|
|
796
|
-
#
|
|
797
|
-
#
|
|
798
|
-
#
|
|
799
|
-
# For [Timecop](https://rubygems.org/gems/timecop), for example, `->{ Time.now_without_mock_time }`
|
|
800
|
-
# allows Datadog features to use the real wall time when time is frozen.
|
|
801
|
-
#
|
|
802
|
-
# @default `->{ Time.now }`
|
|
803
|
-
# @return [Proc<Time>]
|
|
802
|
+
# Deprecated and no longer does anything.
|
|
803
|
+
# This gem already takes care to not be affected by timecop.
|
|
804
|
+
# DEV-3.0: Remove `time_now_provider` option
|
|
804
805
|
option :time_now_provider do |o|
|
|
805
|
-
o.default_proc { ::Time.now }
|
|
806
|
+
o.default_proc { Datadog::Core::Utils::Time.now }
|
|
806
807
|
o.type :proc
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
Core::Utils::Time.now_provider = default
|
|
808
|
+
o.after_set do |_, _, precedence|
|
|
809
|
+
unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
|
|
810
|
+
unless defined?(Datadog::CI) # the datadog-ci gem needs to work with any datadog gem version and not warn
|
|
811
|
+
Core.log_deprecation(key: :time_now_provider) do
|
|
812
|
+
"The time_now_provider setting has been deprecated for removal " \
|
|
813
|
+
"and no longer does anything. Please remove it from your Datadog.configure block. " \
|
|
814
|
+
"The datadog gem always uses the real non-mocked time, even when the timecop gem monkey-patches Time."
|
|
815
|
+
end
|
|
816
|
+
end
|
|
817
817
|
end
|
|
818
818
|
end
|
|
819
819
|
end
|
|
820
820
|
|
|
821
|
-
#
|
|
822
|
-
# gem
|
|
823
|
-
#
|
|
824
|
-
# It must respect the interface of [Datadog::Core::Utils::Time#get_time] method.
|
|
825
|
-
#
|
|
826
|
-
# For [Timecop](https://rubygems.org/gems/timecop), for example,
|
|
827
|
-
# `->(unit = :float_second) { ::Process.clock_gettime_without_mock(Datadog::Core::Utils::Time::MONOTONIC_CLOCK_ID, unit) }`
|
|
828
|
-
# allows Datadog features to use the real monotonic time when time is frozen with
|
|
829
|
-
# `Timecop.mock_process_clock = true`.
|
|
830
|
-
#
|
|
831
|
-
# @default `->(unit = :float_second) { ::Process.clock_gettime(Core::Utils::Time::MONOTONIC_CLOCK_ID, unit) }`
|
|
832
|
-
# @return [Proc<Numeric>]
|
|
821
|
+
# Deprecated and no longer does anything.
|
|
822
|
+
# This gem already takes care to not be affected by timecop.
|
|
823
|
+
# DEV-3.0: Remove `get_time_provider` option
|
|
833
824
|
option :get_time_provider do |o|
|
|
834
|
-
o.default_proc { |unit = :float_second| ::
|
|
825
|
+
o.default_proc { |unit = :float_second| Datadog::Core::Utils::Time.get_time(unit) }
|
|
835
826
|
o.type :proc
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
827
|
+
o.after_set do |_, _, precedence|
|
|
828
|
+
unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
|
|
829
|
+
unless defined?(Datadog::CI) # the datadog-ci gem needs to work with any datadog gem version and not warn
|
|
830
|
+
Core.log_deprecation(key: :get_time_provider) do
|
|
831
|
+
"The get_time_provider setting has been deprecated for removal " \
|
|
832
|
+
"and no longer does anything. Please remove it from your Datadog.configure block. " \
|
|
833
|
+
"The datadog gem always uses the real non-mocked time, even when the timecop gem monkey-patches Process.clock_gettime."
|
|
834
|
+
end
|
|
835
|
+
end
|
|
844
836
|
end
|
|
845
837
|
end
|
|
846
838
|
end
|
|
@@ -24,6 +24,7 @@ module Datadog
|
|
|
24
24
|
"DD_API_SECURITY_REQUEST_SAMPLE_RATE",
|
|
25
25
|
"DD_API_SECURITY_SAMPLE_DELAY",
|
|
26
26
|
"DD_APM_TRACING_ENABLED",
|
|
27
|
+
"DD_APPSEC_AGENTIC_ONBOARDING",
|
|
27
28
|
"DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING",
|
|
28
29
|
"DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE",
|
|
29
30
|
"DD_APPSEC_BODY_PARSING_SIZE_LIMIT",
|
|
@@ -60,6 +61,7 @@ module Datadog
|
|
|
60
61
|
"DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE",
|
|
61
62
|
"DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED",
|
|
62
63
|
"DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED",
|
|
64
|
+
"DD_EXPERIMENTAL_NATIVE_TRANSPORT_ENABLED",
|
|
63
65
|
"DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED",
|
|
64
66
|
"DD_EXTERNAL_ENV",
|
|
65
67
|
"DD_FLAGGING_EVALUATION_COUNTS_ENABLED",
|
|
@@ -85,6 +87,7 @@ module Datadog
|
|
|
85
87
|
"DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED",
|
|
86
88
|
"DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE",
|
|
87
89
|
"DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED",
|
|
90
|
+
"DD_PROFILING_EXPERIMENTAL_SHOW_CLASSES_ENABLED",
|
|
88
91
|
"DD_PROFILING_EXPERIMENTAL_USE_SYSTEM_DNS",
|
|
89
92
|
"DD_PROFILING_GC_ENABLED",
|
|
90
93
|
"DD_PROFILING_GVL_ENABLED",
|
|
@@ -75,7 +75,10 @@ module Datadog
|
|
|
75
75
|
tags: tags,
|
|
76
76
|
runtime_metrics_enabled: runtime_metrics_enabled,
|
|
77
77
|
vm: vm,
|
|
78
|
-
health_metrics_enabled: health_metrics_enabled
|
|
78
|
+
health_metrics_enabled: health_metrics_enabled,
|
|
79
|
+
otlp_traces_export_enabled: otlp_traces_export_enabled,
|
|
80
|
+
otlp_metrics_export_enabled: otlp_metrics_export_enabled,
|
|
81
|
+
otlp_logs_export_enabled: otlp_logs_export_enabled,
|
|
79
82
|
}
|
|
80
83
|
end
|
|
81
84
|
|
|
@@ -159,8 +162,40 @@ module Datadog
|
|
|
159
162
|
!!Datadog.configuration.health_metrics.enabled
|
|
160
163
|
end
|
|
161
164
|
|
|
165
|
+
# @return [Boolean] whether the tracer exports traces over OTLP.
|
|
166
|
+
# Always false: Ruby exports spans in Datadog's native format and has no OTLP trace exporter.
|
|
167
|
+
def otlp_traces_export_enabled
|
|
168
|
+
false
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @return [Boolean] whether the tracer exports metrics over OTLP
|
|
172
|
+
def otlp_metrics_export_enabled
|
|
173
|
+
metrics = opentelemetry_settings&.metrics
|
|
174
|
+
# A "none" exporter skips the OTLP metric reader even when metrics are enabled
|
|
175
|
+
# (mirrors Datadog::OpenTelemetry::Ext::EXPORTER_NONE).
|
|
176
|
+
!!(metrics&.enabled && metrics.exporter != "none")
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# @return [Boolean] whether the tracer exports logs over OTLP
|
|
180
|
+
def otlp_logs_export_enabled
|
|
181
|
+
logs = opentelemetry_settings&.logs
|
|
182
|
+
# A "none" exporter skips the OTLP log record processor even when logs are enabled
|
|
183
|
+
# (mirrors Datadog::OpenTelemetry::Ext::EXPORTER_NONE).
|
|
184
|
+
!!(logs&.enabled && logs.exporter != "none")
|
|
185
|
+
end
|
|
186
|
+
|
|
162
187
|
private
|
|
163
188
|
|
|
189
|
+
# The `opentelemetry` settings namespace is registered by core configuration, but access it
|
|
190
|
+
# defensively so a missing/unregistered namespace defaults to `false` rather than raising.
|
|
191
|
+
def opentelemetry_settings
|
|
192
|
+
return unless Datadog.configuration.respond_to?(:opentelemetry)
|
|
193
|
+
|
|
194
|
+
Datadog.configuration.opentelemetry
|
|
195
|
+
rescue
|
|
196
|
+
nil
|
|
197
|
+
end
|
|
198
|
+
|
|
164
199
|
# Outputs "k1:v1,k2:v2,..."
|
|
165
200
|
def hash_serializer(h)
|
|
166
201
|
h.map { |k, v| "#{k}:#{v}" }.join(",")
|
|
@@ -59,9 +59,9 @@ module Datadog
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def available?
|
|
62
|
-
defined?(::RubyVM::YJIT) \
|
|
62
|
+
!!(defined?(::RubyVM::YJIT) \
|
|
63
63
|
&& ::RubyVM::YJIT.enabled? \
|
|
64
|
-
&& ::RubyVM::YJIT.respond_to?(:runtime_stats)
|
|
64
|
+
&& ::RubyVM::YJIT.respond_to?(:runtime_stats))
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
|
@@ -16,8 +16,8 @@ module Datadog
|
|
|
16
16
|
"#{Ext::TAG_LANG_VERSION}:#{Environment::Identity.lang_version}",
|
|
17
17
|
# TODO: Technically not accurate, if tracing version diverges from datadog gem version
|
|
18
18
|
# If we extract tracing to its own gem, this needs to be updated.
|
|
19
|
-
"#{Ext::TAG_TRACER_VERSION}:#{Environment::Identity.gem_datadog_version}"
|
|
20
|
-
].freeze
|
|
19
|
+
"#{Ext::TAG_TRACER_VERSION}:#{Environment::Identity.gem_datadog_version}",
|
|
20
|
+
].freeze,
|
|
21
21
|
}.freeze
|
|
22
22
|
|
|
23
23
|
def metric_options(options = nil)
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
service_version: settings.version || "",
|
|
54
54
|
# Follows Java: https://github.com/DataDog/dd-trace-java/blob/2ebc964340ac530342cc389ba68ff0f5070d5f9f/dd-trace-core/src/main/java/datadog/trace/core/servicediscovery/ServiceDiscovery.java#L37-L38
|
|
55
55
|
process_tags: settings.experimental_propagate_process_tags_enabled ? Core::Environment::Process.serialized : "",
|
|
56
|
-
container_id: Core::Environment::Container.container_id || ""
|
|
56
|
+
container_id: Core::Environment::Container.container_id || "",
|
|
57
57
|
}
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -185,7 +185,7 @@ module Datadog
|
|
|
185
185
|
is_agent: false,
|
|
186
186
|
client_tracer: client_tracer,
|
|
187
187
|
# base64 is needed otherwise the Go agent fails with an unmarshal error
|
|
188
|
-
capabilities: @capabilities.base64_capabilities
|
|
188
|
+
capabilities: @capabilities.base64_capabilities,
|
|
189
189
|
},
|
|
190
190
|
cached_target_files: state.cached_target_files,
|
|
191
191
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Telemetry
|
|
6
|
+
module ConfigurationValue
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
def convert(value)
|
|
10
|
+
case value
|
|
11
|
+
when Integer, String, true, false, nil
|
|
12
|
+
value
|
|
13
|
+
when Float
|
|
14
|
+
value.finite? ? value : value.to_s
|
|
15
|
+
when Hash
|
|
16
|
+
value.map { |key, entry_value| "#{key}:#{entry_value}" }.join(",")
|
|
17
|
+
when Array
|
|
18
|
+
value.join(",")
|
|
19
|
+
when Module
|
|
20
|
+
value.name.to_s
|
|
21
|
+
else
|
|
22
|
+
implements_to_s = begin
|
|
23
|
+
value.method(:to_s).owner != Kernel
|
|
24
|
+
rescue NameError
|
|
25
|
+
false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
if implements_to_s
|
|
29
|
+
value.to_s
|
|
30
|
+
else
|
|
31
|
+
value.class.to_s
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "base"
|
|
4
|
+
require_relative "../configuration_value"
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Core
|
|
@@ -27,10 +28,11 @@ module Datadog
|
|
|
27
28
|
def configuration
|
|
28
29
|
config = Datadog.configuration
|
|
29
30
|
|
|
31
|
+
# @type var res: Array[telemetry_configuration]
|
|
30
32
|
res = @changes.map do |name, value|
|
|
31
33
|
{
|
|
32
34
|
name: name,
|
|
33
|
-
value: value,
|
|
35
|
+
value: Telemetry::ConfigurationValue.convert(value),
|
|
34
36
|
origin: @origin,
|
|
35
37
|
seq_id: Configuration::Option::Precedence::REMOTE_CONFIGURATION.numeric.next,
|
|
36
38
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "base"
|
|
4
|
+
require_relative "../configuration_value"
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Core
|
|
@@ -65,7 +66,7 @@ module Datadog
|
|
|
65
66
|
# actually enabled by env var or by implicit enablement via
|
|
66
67
|
# remote config.
|
|
67
68
|
enabled: components.dynamic_instrumentation&.started? || false,
|
|
68
|
-
}
|
|
69
|
+
},
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
if (unsupported_reason = Datadog::Profiling.unsupported_reason)
|
|
@@ -214,23 +215,9 @@ module Datadog
|
|
|
214
215
|
end
|
|
215
216
|
|
|
216
217
|
def to_telemetry_value(value)
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
value
|
|
221
|
-
when Hash
|
|
222
|
-
value.map { |key, entry_value| "#{key}:#{entry_value}" }.join(",")
|
|
223
|
-
when Array
|
|
224
|
-
value.join(",")
|
|
225
|
-
when Module
|
|
226
|
-
value.name.to_s
|
|
227
|
-
else
|
|
228
|
-
if implements_to_s?(value)
|
|
229
|
-
value.to_s
|
|
230
|
-
else
|
|
231
|
-
value.class.to_s
|
|
232
|
-
end
|
|
233
|
-
end
|
|
218
|
+
return value.to_s if value.is_a?(Float)
|
|
219
|
+
|
|
220
|
+
Telemetry::ConfigurationValue.convert(value)
|
|
234
221
|
end
|
|
235
222
|
|
|
236
223
|
def install_signature(settings)
|
|
@@ -280,12 +267,6 @@ module Datadog
|
|
|
280
267
|
parent_setting = settings.dig(*split_option)
|
|
281
268
|
parent_setting.send(:resolve_option, option_name.to_sym)
|
|
282
269
|
end
|
|
283
|
-
|
|
284
|
-
def implements_to_s?(value)
|
|
285
|
-
value.method(:to_s).owner != Kernel
|
|
286
|
-
rescue NameError
|
|
287
|
-
false
|
|
288
|
-
end
|
|
289
270
|
end
|
|
290
271
|
end
|
|
291
272
|
end
|
|
@@ -37,7 +37,7 @@ module Datadog
|
|
|
37
37
|
points: values,
|
|
38
38
|
type: type,
|
|
39
39
|
tags: tags,
|
|
40
|
-
common: common
|
|
40
|
+
common: common,
|
|
41
41
|
}
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -179,7 +179,7 @@ module Datadog
|
|
|
179
179
|
metric: name,
|
|
180
180
|
points: values,
|
|
181
181
|
tags: tags,
|
|
182
|
-
common: common
|
|
182
|
+
common: common,
|
|
183
183
|
}
|
|
184
184
|
end
|
|
185
185
|
end
|
|
@@ -50,7 +50,7 @@ module Datadog
|
|
|
50
50
|
runtime_version: Core::Environment::Ext::ENGINE_VERSION,
|
|
51
51
|
service_name: config.service,
|
|
52
52
|
service_version: config.version,
|
|
53
|
-
tracer_version: tracer_version
|
|
53
|
+
tracer_version: tracer_version,
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
tag_process_tags!(app, config)
|
|
@@ -64,7 +64,7 @@ module Datadog
|
|
|
64
64
|
hostname: Core::Environment::Platform.hostname,
|
|
65
65
|
kernel_name: Core::Environment::Platform.kernel_name,
|
|
66
66
|
kernel_release: Core::Environment::Platform.kernel_release,
|
|
67
|
-
kernel_version: Core::Environment::Platform.kernel_version
|
|
67
|
+
kernel_version: Core::Environment::Platform.kernel_version,
|
|
68
68
|
}
|
|
69
69
|
end
|
|
70
70
|
|
|
@@ -61,7 +61,7 @@ module Datadog
|
|
|
61
61
|
Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR =>
|
|
62
62
|
Core::Environment::Ext::LANG_ENGINE,
|
|
63
63
|
Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
|
64
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
|
64
|
+
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION,
|
|
65
65
|
}.tap do |headers|
|
|
66
66
|
# Add application container info
|
|
67
67
|
headers.merge!(Core::Environment::Container.to_headers)
|
|
@@ -69,7 +69,7 @@ module Datadog
|
|
|
69
69
|
|
|
70
70
|
@current_api_id = api_id
|
|
71
71
|
client_class = self.class.http_client_class || Core::Transport::HTTP::Client
|
|
72
|
-
@client = client_class.new(current_api, logger: logger)
|
|
72
|
+
@client = client_class.new(current_api, logger: logger)
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def downgrade?(response)
|