datadog 2.30.0 → 2.32.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 +44 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +17 -7
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +11 -4
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +6 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +18 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +7 -4
- data/ext/datadog_profiling_native_extension/http_transport.c +10 -5
- data/ext/libdatadog_api/crashtracker.c +5 -8
- data/ext/libdatadog_api/datadog_ruby_common.c +18 -0
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/di.c +127 -0
- data/ext/libdatadog_api/extconf.rb +9 -4
- data/ext/libdatadog_api/init.c +5 -2
- data/ext/libdatadog_extconf_helpers.rb +46 -1
- data/lib/datadog/ai_guard/component.rb +2 -0
- data/lib/datadog/ai_guard/configuration.rb +105 -2
- data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +41 -3
- data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
- data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +3 -1
- data/lib/datadog/ai_guard/evaluation/request.rb +14 -9
- data/lib/datadog/ai_guard/evaluation/result.rb +3 -1
- data/lib/datadog/ai_guard/evaluation.rb +37 -7
- data/lib/datadog/ai_guard/ext.rb +1 -0
- data/lib/datadog/ai_guard.rb +26 -8
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +11 -7
- data/lib/datadog/appsec/configuration.rb +414 -1
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +6 -7
- data/lib/datadog/appsec/instrumentation/gateway.rb +0 -13
- data/lib/datadog/appsec/metrics/telemetry.rb +13 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -0
- data/lib/datadog/appsec/security_engine/runner.rb +1 -1
- data/lib/datadog/appsec/trace_keeper.rb +18 -6
- data/lib/datadog/appsec/utils/http/media_type.rb +1 -2
- data/lib/datadog/appsec/utils/http/url_encoded.rb +3 -3
- data/lib/datadog/appsec.rb +5 -9
- data/lib/datadog/core/configuration/base.rb +17 -5
- data/lib/datadog/core/configuration/components.rb +22 -9
- data/lib/datadog/core/configuration/config_helper.rb +9 -0
- data/lib/datadog/core/configuration/option.rb +30 -5
- data/lib/datadog/core/configuration/option_definition.rb +38 -12
- data/lib/datadog/core/configuration/options.rb +40 -6
- data/lib/datadog/core/configuration/settings.rb +18 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
- data/lib/datadog/core/contrib/rails/utils.rb +7 -3
- data/lib/datadog/core/crashtracking/component.rb +3 -3
- data/lib/datadog/core/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/core/environment/container.rb +2 -2
- data/lib/datadog/core/environment/ext.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +25 -3
- data/lib/datadog/core/environment/process.rb +12 -0
- data/lib/datadog/core/feature_flags.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +5 -5
- data/lib/datadog/core/remote/client.rb +1 -1
- data/lib/datadog/core/remote/component.rb +38 -21
- data/lib/datadog/core/runtime/metrics.rb +1 -1
- data/lib/datadog/core/telemetry/component.rb +3 -0
- data/lib/datadog/core/telemetry/emitter.rb +1 -1
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +2 -3
- data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +32 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +151 -169
- data/lib/datadog/core/telemetry/event.rb +1 -7
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -0
- data/lib/datadog/core/telemetry/worker.rb +20 -0
- data/lib/datadog/core/transport/http.rb +2 -0
- data/lib/datadog/core/utils/only_once.rb +1 -1
- data/lib/datadog/core/utils/spawn_monkey_patch.rb +36 -0
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core.rb +1 -2
- data/lib/datadog/data_streams/configuration.rb +40 -1
- data/lib/datadog/data_streams/pathway_context.rb +1 -1
- data/lib/datadog/data_streams/processor.rb +1 -1
- data/lib/datadog/data_streams.rb +1 -1
- data/lib/datadog/di/base.rb +8 -5
- data/lib/datadog/di/boot.rb +2 -4
- data/lib/datadog/di/code_tracker.rb +179 -1
- data/lib/datadog/di/component.rb +5 -1
- data/lib/datadog/di/configuration.rb +235 -2
- data/lib/datadog/di/instrumenter.rb +55 -29
- data/lib/datadog/di/probe_builder.rb +1 -1
- data/lib/datadog/di/probe_file_loader.rb +2 -2
- data/lib/datadog/di/probe_manager.rb +6 -6
- data/lib/datadog/di/probe_notification_builder.rb +110 -2
- data/lib/datadog/di/probe_notifier_worker.rb +2 -2
- data/lib/datadog/di/remote.rb +6 -6
- data/lib/datadog/di/transport/input.rb +3 -3
- data/lib/datadog/di.rb +81 -0
- data/lib/datadog/error_tracking/configuration.rb +55 -2
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/open_feature/component.rb +18 -1
- data/lib/datadog/open_feature/evaluation_engine.rb +2 -2
- data/lib/datadog/open_feature/hooks/flag_eval_hook.rb +49 -0
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
- data/lib/datadog/open_feature/provider.rb +19 -1
- data/lib/datadog/open_feature/remote.rb +1 -1
- data/lib/datadog/open_feature/transport.rb +1 -1
- data/lib/datadog/opentelemetry/configuration/settings.rb +2 -0
- data/lib/datadog/opentelemetry/metrics.rb +3 -3
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +1 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +36 -11
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +31 -2
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +8 -2
- data/lib/datadog/profiling/collectors/info.rb +16 -3
- data/lib/datadog/profiling/component.rb +12 -4
- data/lib/datadog/profiling/exporter.rb +37 -12
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +21 -12
- data/lib/datadog/profiling/http_transport.rb +12 -1
- data/lib/datadog/profiling/load_native_extension.rb +2 -2
- data/lib/datadog/profiling/profiler.rb +13 -5
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/tasks/exec.rb +8 -3
- data/lib/datadog/profiling/tasks/help.rb +1 -0
- data/lib/datadog/profiling/tasks/setup.rb +2 -2
- data/lib/datadog/profiling.rb +1 -2
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/symbol_database/configuration.rb +65 -0
- data/lib/datadog/symbol_database/extractor.rb +915 -0
- data/lib/datadog/symbol_database/file_hash.rb +46 -0
- data/lib/datadog/symbol_database/logger.rb +43 -0
- data/lib/datadog/symbol_database/scope.rb +98 -0
- data/lib/datadog/symbol_database/service_version.rb +57 -0
- data/lib/datadog/symbol_database/symbol.rb +66 -0
- data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
- data/lib/datadog/symbol_database/transport/http.rb +45 -0
- data/lib/datadog/symbol_database/transport.rb +54 -0
- data/lib/datadog/symbol_database/uploader.rb +166 -0
- data/lib/datadog/symbol_database.rb +49 -0
- data/lib/datadog/tracing/buffer.rb +3 -3
- data/lib/datadog/tracing/component.rb +11 -0
- data/lib/datadog/tracing/configuration/settings.rb +2 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +5 -3
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +20 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +3 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/component.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +18 -3
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +7 -4
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/extensions.rb +9 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +5 -5
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +2 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +2 -2
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +3 -3
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +0 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +4 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib.rb +8 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/tracing/distributed/baggage.rb +59 -5
- data/lib/datadog/tracing/distributed/datadog.rb +13 -11
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +1 -1
- data/lib/datadog/tracing/distributed/propagation.rb +2 -2
- data/lib/datadog/tracing/distributed/trace_context.rb +74 -32
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +2 -2
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/remote.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +2 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +13 -0
- data/lib/datadog/tracing/sampling/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +54 -25
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +4 -4
- data/lib/datadog/tracing/trace_operation.rb +53 -9
- data/lib/datadog/tracing/tracer.rb +29 -4
- data/lib/datadog/tracing/transport/io/client.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +1 -1
- data/lib/datadog/tracing/workers.rb +2 -1
- data/lib/datadog/version.rb +1 -1
- metadata +27 -12
- data/lib/datadog/ai_guard/configuration/settings.rb +0 -113
- data/lib/datadog/appsec/configuration/settings.rb +0 -423
- data/lib/datadog/data_streams/configuration/settings.rb +0 -49
- data/lib/datadog/di/configuration/settings.rb +0 -243
- data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
|
@@ -161,6 +161,17 @@ module Datadog
|
|
|
161
161
|
@sampler.sample!(trace)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
+
def reconsider_sample_resource!(trace)
|
|
165
|
+
return unless @sampler.respond_to?(:reconsider_sample_resource!)
|
|
166
|
+
|
|
167
|
+
@sampler.reconsider_sample_resource!(trace)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def resource_sampling?
|
|
171
|
+
@sampler.respond_to?(:resource_sampling?) &&
|
|
172
|
+
@sampler.resource_sampling?
|
|
173
|
+
end
|
|
174
|
+
|
|
164
175
|
def update(*args, **kwargs)
|
|
165
176
|
return unless @sampler.respond_to?(:update)
|
|
166
177
|
|
|
@@ -430,7 +430,7 @@ module Datadog
|
|
|
430
430
|
rescue => e
|
|
431
431
|
# `File#read` errors have clear and actionable messages, no need to add extra exception info.
|
|
432
432
|
Datadog.logger.warn(
|
|
433
|
-
"Cannot read span sampling rules file `#{rules_file}`: #{e.message}." \
|
|
433
|
+
"Cannot read span sampling rules file `#{rules_file}`: #{e.class}: #{e.message}." \
|
|
434
434
|
'No span sampling rules will be applied.'
|
|
435
435
|
)
|
|
436
436
|
nil
|
|
@@ -481,6 +481,7 @@ module Datadog
|
|
|
481
481
|
# @default `{}`
|
|
482
482
|
# @return [Hash]
|
|
483
483
|
option :writer_options do |o|
|
|
484
|
+
o.skip_telemetry true
|
|
484
485
|
o.type :hash
|
|
485
486
|
o.default({})
|
|
486
487
|
end
|
|
@@ -43,7 +43,7 @@ module Datadog
|
|
|
43
43
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
44
44
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_CONTROLLER)
|
|
45
45
|
rescue => e
|
|
46
|
-
Datadog.logger.error(e.message)
|
|
46
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
47
47
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
48
48
|
end
|
|
49
49
|
|
|
@@ -88,7 +88,7 @@ module Datadog
|
|
|
88
88
|
span.finish
|
|
89
89
|
end
|
|
90
90
|
rescue => e
|
|
91
|
-
Datadog.logger.error(e.message)
|
|
91
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
92
92
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -121,7 +121,9 @@ module Datadog
|
|
|
121
121
|
result
|
|
122
122
|
# rubocop:disable Lint/RescueException
|
|
123
123
|
rescue Exception => e
|
|
124
|
-
payload[:exception]
|
|
124
|
+
# Rails ActiveSupport::Notifications convention — payload[:exception] is
|
|
125
|
+
# an array of [class_name_string, message_string] consumed by subscribers.
|
|
126
|
+
payload[:exception] = [e.class.name, e.message] # rubocop:disable CustomCops/ExceptionMessageCop
|
|
125
127
|
payload[:exception_object] = e
|
|
126
128
|
raise e
|
|
127
129
|
ensure
|
|
@@ -76,6 +76,26 @@ module Datadog
|
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
|
+
|
|
80
|
+
# Since Rails 8.1, `Router#find_routes` was removed by inlining its body into `recognize`.
|
|
81
|
+
# https://github.com/rails/rails/commit/e533a32ddf06668dfa3dfbe9b665607e235b06ac
|
|
82
|
+
module RecognizeRouter
|
|
83
|
+
def recognize(req)
|
|
84
|
+
# recognize modifies SCRIPT_NAME before yielding; capture it before super.
|
|
85
|
+
original_script_name = req.env[SCRIPT_NAME_KEY]
|
|
86
|
+
|
|
87
|
+
super do |route, parameters|
|
|
88
|
+
if Instrumentation.dispatcher_route?(route)
|
|
89
|
+
http_route = route.path.spec.to_s
|
|
90
|
+
http_route = http_route.delete_suffix(FORMAT_SUFFIX)
|
|
91
|
+
|
|
92
|
+
Instrumentation.set_http_route_tags(http_route, original_script_name)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
yield route, parameters
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
79
99
|
end
|
|
80
100
|
end
|
|
81
101
|
end
|
|
@@ -19,7 +19,9 @@ module Datadog
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def patch
|
|
22
|
-
if ::ActionPack.gem_version >= Gem::Version.new('
|
|
22
|
+
if ::ActionPack.gem_version >= Gem::Version.new('8.1')
|
|
23
|
+
::ActionDispatch::Journey::Router.prepend(ActionDispatch::Instrumentation::Journey::RecognizeRouter)
|
|
24
|
+
elsif ::ActionPack.gem_version >= Gem::Version.new('7.1')
|
|
23
25
|
::ActionDispatch::Journey::Router.prepend(ActionDispatch::Instrumentation::Journey::LazyRouter)
|
|
24
26
|
else
|
|
25
27
|
::ActionDispatch::Journey::Router.prepend(ActionDispatch::Instrumentation::Journey::Router)
|
|
@@ -76,7 +76,7 @@ module Datadog
|
|
|
76
76
|
#
|
|
77
77
|
Datadog.logger.error(
|
|
78
78
|
'Failed to resolve ActiveRecord database configuration. ' \
|
|
79
|
-
"Cause: #{e.class
|
|
79
|
+
"Cause: #{e.class} Source: #{Array(e.backtrace).first}"
|
|
80
80
|
)
|
|
81
81
|
Core::Telemetry::Logger.report(e, description: 'Failed to resolve ActiveRecord database configuration')
|
|
82
82
|
|
|
@@ -96,7 +96,7 @@ module Datadog
|
|
|
96
96
|
rescue => e
|
|
97
97
|
Datadog.logger.error(
|
|
98
98
|
"Failed to resolve key #{matcher.inspect}. " \
|
|
99
|
-
"Cause: #{e.class
|
|
99
|
+
"Cause: #{e.class} Source: #{Array(e.backtrace).first}"
|
|
100
100
|
)
|
|
101
101
|
Core::Telemetry::Logger.report(e, description: 'Failed to resolve key')
|
|
102
102
|
|
|
@@ -49,7 +49,7 @@ module Datadog
|
|
|
49
49
|
span.set_tag(Ext::TAG_INSTANTIATION_CLASS_NAME, payload.fetch(:class_name))
|
|
50
50
|
span.set_tag(Ext::TAG_INSTANTIATION_RECORD_COUNT, payload.fetch(:record_count))
|
|
51
51
|
rescue => e
|
|
52
|
-
Datadog.logger.error(e.message)
|
|
52
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
53
53
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -69,7 +69,7 @@ module Datadog
|
|
|
69
69
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, config[:host]) if config[:host]
|
|
70
70
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, config[:port]) if config[:port]
|
|
71
71
|
rescue => e
|
|
72
|
-
Datadog.logger.error(e.message)
|
|
72
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
73
73
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
74
74
|
end
|
|
75
75
|
end
|
|
@@ -77,7 +77,7 @@ module Datadog
|
|
|
77
77
|
# in case.
|
|
78
78
|
Datadog.logger.debug(
|
|
79
79
|
"connection_id #{connection_id} does not represent a valid object. " \
|
|
80
|
-
"Cause: #{e.class
|
|
80
|
+
"Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
|
|
81
81
|
)
|
|
82
82
|
end
|
|
83
83
|
else
|
|
@@ -125,7 +125,7 @@ module Datadog
|
|
|
125
125
|
@block&.call(span, name, id, payload)
|
|
126
126
|
rescue => e
|
|
127
127
|
Datadog.logger.debug(
|
|
128
|
-
"ActiveSupport::Notifications handler for '#{name}' failed: #{e.class
|
|
128
|
+
"ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e.message}"
|
|
129
129
|
)
|
|
130
130
|
end
|
|
131
131
|
end
|
|
@@ -147,7 +147,7 @@ module Datadog
|
|
|
147
147
|
callback.call(event, key, *args)
|
|
148
148
|
rescue => e
|
|
149
149
|
Datadog.logger.debug(
|
|
150
|
-
"ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class
|
|
150
|
+
"ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e.message}"
|
|
151
151
|
)
|
|
152
152
|
end
|
|
153
153
|
end
|
|
@@ -90,7 +90,7 @@ module Datadog
|
|
|
90
90
|
|
|
91
91
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
92
92
|
rescue => e
|
|
93
|
-
Datadog.logger.error(e.message)
|
|
93
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
94
94
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
95
95
|
end
|
|
96
96
|
# rubocop:enable Metrics/MethodLength
|
|
@@ -20,7 +20,7 @@ module Datadog
|
|
|
20
20
|
@registry.each do |name, callback|
|
|
21
21
|
callback.call(config)
|
|
22
22
|
rescue => e
|
|
23
|
-
Datadog.logger.warn("Error configuring integration #{name}: #{e}")
|
|
23
|
+
Datadog.logger.warn("Error configuring integration #{name}: #{e.class}: #{e.message}")
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -45,8 +45,11 @@ module Datadog
|
|
|
45
45
|
config = if matcher == :default
|
|
46
46
|
default_configuration
|
|
47
47
|
else
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
resolver.get(matcher) || begin
|
|
49
|
+
new_config = new_configuration
|
|
50
|
+
set_integration_settings_path!(new_config)
|
|
51
|
+
resolver.add(matcher, new_config)
|
|
52
|
+
end
|
|
50
53
|
end
|
|
51
54
|
|
|
52
55
|
# Apply the settings
|
|
@@ -67,11 +70,23 @@ module Datadog
|
|
|
67
70
|
#
|
|
68
71
|
# @return [Datadog::Tracing::Contrib::Configuration::Settings] the memoized integration-specific settings object
|
|
69
72
|
def default_configuration
|
|
70
|
-
@default_configuration ||=
|
|
73
|
+
@default_configuration ||= begin
|
|
74
|
+
configuration = new_configuration
|
|
75
|
+
set_integration_settings_path!(configuration)
|
|
76
|
+
configuration
|
|
77
|
+
end
|
|
71
78
|
end
|
|
72
79
|
|
|
73
80
|
protected
|
|
74
81
|
|
|
82
|
+
def set_integration_settings_path!(configuration)
|
|
83
|
+
# name is called from Registerable::InstanceMethods#name
|
|
84
|
+
# which is set by register_as
|
|
85
|
+
return unless respond_to?(:name)
|
|
86
|
+
|
|
87
|
+
configuration.class.settings_path = "tracing.#{name}" if configuration.class.respond_to?(:settings_path=)
|
|
88
|
+
end
|
|
89
|
+
|
|
75
90
|
# Returns a new configuration object for this integration.
|
|
76
91
|
#
|
|
77
92
|
# This method normally needs to be overridden for each integration
|
|
@@ -95,14 +95,17 @@ module Datadog
|
|
|
95
95
|
super(*args)
|
|
96
96
|
|
|
97
97
|
@cache_limit = cache_limit
|
|
98
|
-
|
|
98
|
+
# Workaround for Ruby VM < 3.2.8, < 3.3.8 and < 3.4.3 (see https://bugs.ruby-lang.org/issues/21170)
|
|
99
|
+
# We initialize the hash with 10 dummy entries + clear it to force Ruby to use an
|
|
100
|
+
# "st_table" representation for the Hash, not an "ar_table" (since Ruby will not
|
|
101
|
+
# shrink a Hash using an "st_table" back to an "ar_table")
|
|
102
|
+
@cache = Hash[*1..20]
|
|
103
|
+
@cache.clear
|
|
99
104
|
end
|
|
100
105
|
|
|
101
106
|
# (see Resolver#resolve)
|
|
102
107
|
def resolve(value)
|
|
103
|
-
|
|
104
|
-
@cache[value]
|
|
105
|
-
else
|
|
108
|
+
@cache.fetch(value) do
|
|
106
109
|
if @cache.size >= @cache_limit
|
|
107
110
|
@cache.shift # Remove the oldest entry if cache is full
|
|
108
111
|
end
|
|
@@ -16,7 +16,7 @@ module Datadog
|
|
|
16
16
|
command = Core::Utils.utf8_encode(command, binary: true, placeholder: placeholder)
|
|
17
17
|
Core::Utils.truncate(command, Ext::QUANTIZE_MAX_CMD_LENGTH)
|
|
18
18
|
rescue => e
|
|
19
|
-
Datadog.logger.debug("Error sanitizing Dalli operation: #{e}")
|
|
19
|
+
Datadog.logger.debug("Error sanitizing Dalli operation: #{e.class}: #{e.message}")
|
|
20
20
|
placeholder
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -98,7 +98,7 @@ module Datadog
|
|
|
98
98
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
99
99
|
rescue => e
|
|
100
100
|
# TODO: Refactor the code to streamline the execution without ensure
|
|
101
|
-
Datadog.logger.error(e.message)
|
|
101
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
102
102
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
103
103
|
ensure
|
|
104
104
|
# the call is still executed
|
|
@@ -40,7 +40,7 @@ module Datadog
|
|
|
40
40
|
span
|
|
41
41
|
end
|
|
42
42
|
rescue => e
|
|
43
|
-
Datadog.logger.debug
|
|
43
|
+
Datadog.logger.debug { "#{e.class}: #{e.message}" }
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
@stack.request_call(datum)
|
|
@@ -180,7 +180,7 @@ module Datadog
|
|
|
180
180
|
end
|
|
181
181
|
end
|
|
182
182
|
rescue => e
|
|
183
|
-
Datadog.logger.debug
|
|
183
|
+
Datadog.logger.debug { "#{e.class}: #{e.message}" }
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
def propagate!(trace, span, datum)
|
|
@@ -227,6 +227,15 @@ module Datadog
|
|
|
227
227
|
end
|
|
228
228
|
end
|
|
229
229
|
|
|
230
|
+
# Returns the subset of built-in integrations that are instrumented,
|
|
231
|
+
# excluding custom integrations registered through the public contrib API.
|
|
232
|
+
# This method is only for telemetry reporting.
|
|
233
|
+
# @!visibility private
|
|
234
|
+
def instrumented_built_in_integrations
|
|
235
|
+
instrumented = Set.new(instrumented_integrations.each_value)
|
|
236
|
+
Contrib::BUILT_IN_INTEGRATIONS.select { |integration| instrumented.include?(integration) }.freeze
|
|
237
|
+
end
|
|
238
|
+
|
|
230
239
|
# @!visibility private
|
|
231
240
|
def reset!
|
|
232
241
|
INSTRUMENTED_INTEGRATIONS_LOCK.synchronize do
|
|
@@ -83,7 +83,7 @@ module Datadog
|
|
|
83
83
|
|
|
84
84
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
85
85
|
rescue => e
|
|
86
|
-
Datadog.logger.error(e.message)
|
|
86
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
87
87
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
88
88
|
end
|
|
89
89
|
# rubocop:enable Metrics/AbcSize
|
|
@@ -98,7 +98,7 @@ module Datadog
|
|
|
98
98
|
Datadog.configuration.tracing.header_tags.response_tags(env[:response_headers])
|
|
99
99
|
)
|
|
100
100
|
rescue => e
|
|
101
|
-
Datadog.logger.error(e.message)
|
|
101
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
102
102
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
103
103
|
end
|
|
104
104
|
# rubocop:enable Metrics/AbcSize
|
|
@@ -77,7 +77,7 @@ module Datadog
|
|
|
77
77
|
|
|
78
78
|
Thread.current[KEY_RUN] = true
|
|
79
79
|
rescue => e
|
|
80
|
-
Datadog.logger.error(e.message)
|
|
80
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
81
81
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
82
82
|
end
|
|
83
83
|
|
|
@@ -121,7 +121,7 @@ module Datadog
|
|
|
121
121
|
span.finish(finish)
|
|
122
122
|
end
|
|
123
123
|
rescue => e
|
|
124
|
-
Datadog.logger.error(e.message)
|
|
124
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
125
125
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
126
126
|
end
|
|
127
127
|
|
|
@@ -165,7 +165,7 @@ module Datadog
|
|
|
165
165
|
|
|
166
166
|
Thread.current[KEY_RENDER] = true
|
|
167
167
|
rescue => e
|
|
168
|
-
Datadog.logger.error(e.message)
|
|
168
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
169
169
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
170
170
|
end
|
|
171
171
|
|
|
@@ -190,7 +190,7 @@ module Datadog
|
|
|
190
190
|
span.finish(finish)
|
|
191
191
|
end
|
|
192
192
|
rescue => e
|
|
193
|
-
Datadog.logger.error(e.message)
|
|
193
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
194
194
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
195
195
|
end
|
|
196
196
|
|
|
@@ -229,7 +229,7 @@ module Datadog
|
|
|
229
229
|
span.finish(finish)
|
|
230
230
|
end
|
|
231
231
|
rescue => e
|
|
232
|
-
Datadog.logger.error(e.message)
|
|
232
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
233
233
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
234
234
|
end
|
|
235
235
|
|
|
@@ -90,7 +90,7 @@ module Datadog
|
|
|
90
90
|
end
|
|
91
91
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
92
92
|
rescue => e
|
|
93
|
-
Datadog.logger.debug("GRPC client trace failed: #{e}")
|
|
93
|
+
Datadog.logger.debug("GRPC client trace failed: #{e.class}: #{e.message}")
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def find_deadline(call)
|
|
@@ -112,7 +112,7 @@ module Datadog
|
|
|
112
112
|
|
|
113
113
|
Core::Utils.extract_host_port(peer_address)
|
|
114
114
|
rescue => e
|
|
115
|
-
Datadog.logger.debug { "Could not parse host:port from #{call}: #{e}" }
|
|
115
|
+
Datadog.logger.debug { "Could not parse host:port from #{call}: #{e.class}: #{e.message}" }
|
|
116
116
|
nil
|
|
117
117
|
end
|
|
118
118
|
end
|
|
@@ -54,7 +54,7 @@ module Datadog
|
|
|
54
54
|
Tracing.continue_trace!(GRPC.extract(metadata))
|
|
55
55
|
rescue => e
|
|
56
56
|
Datadog.logger.debug(
|
|
57
|
-
"unable to propagate GRPC metadata to context: #{e}"
|
|
57
|
+
"unable to propagate GRPC metadata to context: #{e.class}: #{e.message}"
|
|
58
58
|
)
|
|
59
59
|
end
|
|
60
60
|
|
|
@@ -86,7 +86,7 @@ module Datadog
|
|
|
86
86
|
# Measure service stats
|
|
87
87
|
Contrib::Analytics.set_measured(span)
|
|
88
88
|
rescue => e
|
|
89
|
-
Datadog.logger.debug("GRPC server trace failed: #{e}")
|
|
89
|
+
Datadog.logger.debug("GRPC server trace failed: #{e.class}: #{e.message}")
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
end
|
|
@@ -37,7 +37,7 @@ module Datadog
|
|
|
37
37
|
|
|
38
38
|
if Tracing::Distributed::PropagationPolicy.enabled?(
|
|
39
39
|
pin_config: client_config,
|
|
40
|
-
global_config:
|
|
40
|
+
global_config: request_options,
|
|
41
41
|
trace: trace
|
|
42
42
|
)
|
|
43
43
|
Contrib::HTTP.inject(trace, req)
|
|
@@ -93,7 +93,7 @@ module Datadog
|
|
|
93
93
|
|
|
94
94
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
95
95
|
rescue => e
|
|
96
|
-
Datadog.logger.error("error preparing span from http request: #{e}")
|
|
96
|
+
Datadog.logger.error("error preparing span from http request: #{e.class}: #{e.message}")
|
|
97
97
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
98
98
|
end
|
|
99
99
|
|
|
@@ -108,7 +108,7 @@ module Datadog
|
|
|
108
108
|
Datadog.configuration.tracing.header_tags.response_tags(response)
|
|
109
109
|
)
|
|
110
110
|
rescue => e
|
|
111
|
-
Datadog.logger.error("error preparing span from http response: #{e}")
|
|
111
|
+
Datadog.logger.error("error preparing span from http response: #{e.class}: #{e.message}")
|
|
112
112
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
113
113
|
end
|
|
114
114
|
|
|
@@ -41,7 +41,9 @@ module Datadog
|
|
|
41
41
|
# Add additional request specific tags to the span.
|
|
42
42
|
annotate_span_with_request!(span, req, request_options)
|
|
43
43
|
rescue => e
|
|
44
|
-
Datadog.logger.error(
|
|
44
|
+
Datadog.logger.error(
|
|
45
|
+
"error preparing span for httpclient request: #{e.class}: #{e.message}, Source: #{e.backtrace}"
|
|
46
|
+
)
|
|
45
47
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
46
48
|
ensure
|
|
47
49
|
res = super
|
|
@@ -107,7 +109,9 @@ module Datadog
|
|
|
107
109
|
Datadog.configuration.tracing.header_tags.response_tags(response.header)
|
|
108
110
|
)
|
|
109
111
|
rescue => e
|
|
110
|
-
Datadog.logger.error(
|
|
112
|
+
Datadog.logger.error(
|
|
113
|
+
"error preparing span from httpclient response: #{e.class}: #{e.message}, Source: #{e.backtrace}"
|
|
114
|
+
)
|
|
111
115
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
112
116
|
end
|
|
113
117
|
|
|
@@ -35,13 +35,13 @@ module Datadog
|
|
|
35
35
|
global_config: Datadog.configuration.tracing[:httprb],
|
|
36
36
|
trace: trace
|
|
37
37
|
)
|
|
38
|
-
Contrib::HTTP.inject(trace, req)
|
|
38
|
+
Contrib::HTTP.inject(trace, req.headers)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Add additional request specific tags to the span.
|
|
42
42
|
annotate_span_with_request!(span, req, request_options)
|
|
43
43
|
rescue => e
|
|
44
|
-
logger.error("error preparing span for http.rb request: #{e}, Source: #{e.backtrace}")
|
|
44
|
+
logger.error("error preparing span for http.rb request: #{e.class}: #{e.message}, Source: #{e.backtrace}")
|
|
45
45
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
46
46
|
ensure
|
|
47
47
|
res = super(req, options)
|
|
@@ -117,7 +117,7 @@ module Datadog
|
|
|
117
117
|
Datadog.configuration.tracing.header_tags.response_tags(response.headers)
|
|
118
118
|
)
|
|
119
119
|
rescue => e
|
|
120
|
-
logger.error("error preparing span from http.rb response: #{e}, Source: #{e.backtrace}")
|
|
120
|
+
logger.error("error preparing span from http.rb response: #{e.class}: #{e.message}, Source: #{e.backtrace}")
|
|
121
121
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
122
122
|
end
|
|
123
123
|
|
|
@@ -27,7 +27,7 @@ module Datadog
|
|
|
27
27
|
auto_instrumentation: true
|
|
28
28
|
) { |key| headers[key] }
|
|
29
29
|
rescue => e
|
|
30
|
-
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
|
|
30
|
+
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
yield(message) if block
|
|
@@ -49,7 +49,7 @@ module Datadog
|
|
|
49
49
|
auto_instrumentation: true
|
|
50
50
|
)
|
|
51
51
|
rescue => e
|
|
52
|
-
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
|
|
52
|
+
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
yield(batch) if block
|
|
@@ -30,7 +30,7 @@ module Datadog
|
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
rescue => e
|
|
33
|
-
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
|
|
33
|
+
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -51,7 +51,7 @@ module Datadog
|
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
rescue => e
|
|
54
|
-
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
|
|
54
|
+
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
@@ -49,7 +49,7 @@ module Datadog
|
|
|
49
49
|
auto_instrumentation: true
|
|
50
50
|
) { |key| headers[key] }
|
|
51
51
|
rescue => e
|
|
52
|
-
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e}")
|
|
52
|
+
Datadog.logger.debug("Error setting DSM checkpoint: #{e.class}: #{e.message}")
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|