datadog 2.29.0 → 2.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +87 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +21 -12
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +9 -7
- 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 +6 -24
- data/ext/datadog_profiling_native_extension/heap_recorder.c +5 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +51 -64
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +0 -13
- data/ext/datadog_profiling_native_extension/profiling.c +3 -1
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +24 -8
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +1 -3
- data/ext/datadog_profiling_native_extension/stack_recorder.c +29 -43
- data/ext/libdatadog_api/crashtracker.c +5 -8
- data/ext/libdatadog_api/crashtracker_report_exception.c +34 -144
- 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 +79 -0
- data/ext/libdatadog_api/extconf.rb +5 -20
- data/ext/libdatadog_api/init.c +5 -2
- data/ext/libdatadog_extconf_helpers.rb +57 -11
- data/lib/datadog/ai_guard/component.rb +2 -0
- data/lib/datadog/ai_guard/configuration/settings.rb +3 -0
- 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 +36 -7
- 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/contrib/active_record/patcher.rb +3 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +25 -2
- data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +2 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +2 -2
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/event.rb +1 -17
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
- data/lib/datadog/appsec/instrumentation/gateway.rb +2 -15
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -2
- data/lib/datadog/appsec/utils/http/media_type.rb +1 -2
- data/lib/datadog/appsec/utils/http/url_encoded.rb +2 -2
- data/lib/datadog/appsec.rb +5 -9
- data/lib/datadog/core/configuration/base.rb +17 -5
- data/lib/datadog/core/configuration/components.rb +21 -8
- data/lib/datadog/core/configuration/config_helper.rb +9 -0
- data/lib/datadog/core/configuration/option.rb +32 -6
- data/lib/datadog/core/configuration/option_definition.rb +38 -12
- data/lib/datadog/core/configuration/options.rb +41 -7
- data/lib/datadog/core/configuration/settings.rb +42 -3
- data/lib/datadog/core/configuration/supported_configurations.rb +17 -0
- 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 +7 -15
- 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/metrics/client.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +5 -0
- data/lib/datadog/core/remote/component.rb +38 -21
- data/lib/datadog/core/runtime/metrics.rb +2 -3
- data/lib/datadog/core/telemetry/component.rb +3 -0
- 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/utils/base64.rb +1 -1
- 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/workers/async.rb +1 -1
- data/lib/datadog/core/workers/interval_loop.rb +13 -6
- data/lib/datadog/core/workers/queue.rb +0 -4
- data/lib/datadog/core/workers/runtime_metrics.rb +9 -1
- data/lib/datadog/core.rb +0 -1
- data/lib/datadog/data_streams/pathway_context.rb +1 -1
- data/lib/datadog/data_streams/processor.rb +1 -0
- data/lib/datadog/di/boot.rb +3 -4
- data/lib/datadog/di/component.rb +20 -4
- data/lib/datadog/di/instrumenter.rb +20 -10
- data/lib/datadog/di/probe_manager.rb +79 -62
- data/lib/datadog/di/probe_notification_builder.rb +148 -33
- data/lib/datadog/di/probe_notifier_worker.rb +52 -6
- data/lib/datadog/di/probe_repository.rb +198 -0
- data/lib/datadog/di/remote.rb +5 -6
- data/lib/datadog/di/serializer.rb +127 -9
- data/lib/datadog/di/transport/http.rb +12 -3
- data/lib/datadog/di/transport/input.rb +46 -8
- data/lib/datadog/di.rb +81 -0
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/open_feature/configuration.rb +2 -0
- data/lib/datadog/open_feature/evaluation_engine.rb +1 -1
- data/lib/datadog/open_feature/exposures/reporter.rb +1 -1
- data/lib/datadog/open_feature/exposures/worker.rb +1 -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/profiling/collectors/code_provenance.rb +2 -3
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +14 -1
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/component.rb +31 -1
- data/lib/datadog/profiling/http_transport.rb +5 -6
- data/lib/datadog/profiling/load_native_extension.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +15 -12
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- 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/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 +2 -2
- 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/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/configurable.rb +18 -3
- data/lib/datadog/tracing/contrib/dalli/integration.rb +4 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +7 -7
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +13 -8
- data/lib/datadog/tracing/contrib/grape/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/karafka/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
- 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/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +4 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +1 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/metadata/ext.rb +4 -0
- 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 +1 -1
- data/lib/datadog/tracing/span_operation.rb +1 -1
- data/lib/datadog/tracing/sync_writer.rb +0 -1
- data/lib/datadog/tracing/trace_operation.rb +50 -6
- data/lib/datadog/tracing/tracer.rb +25 -0
- data/lib/datadog/tracing/transport/io/client.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
- data/lib/datadog/tracing/writer.rb +0 -1
- data/lib/datadog/version.rb +1 -1
- metadata +15 -8
- data/lib/datadog/tracing/workers/trace_writer.rb +0 -204
|
@@ -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.
|
|
433
|
+
"Cannot read span sampling rules file `#{rules_file}`: #{e.class}: #{e}." \
|
|
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.
|
|
46
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
91
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
92
92
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -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)
|
|
@@ -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.
|
|
52
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
72
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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} 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}"
|
|
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}"
|
|
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.
|
|
93
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
94
94
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
95
95
|
end
|
|
96
96
|
# rubocop:enable Metrics/MethodLength
|
|
@@ -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
|
|
@@ -14,6 +14,7 @@ module Datadog
|
|
|
14
14
|
|
|
15
15
|
MINIMUM_VERSION = Gem::Version.new('2.0.0')
|
|
16
16
|
DALLI_PROTOCOL_BINARY_VERSION = Gem::Version.new('3.0.0')
|
|
17
|
+
DALLI_PROTOCOL_META_VERSION = Gem::Version.new('5.0.0')
|
|
17
18
|
|
|
18
19
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
|
19
20
|
register_as :dalli, auto_patch: true
|
|
@@ -31,7 +32,9 @@ module Datadog
|
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
def self.dalli_class
|
|
34
|
-
if version >=
|
|
35
|
+
if version >= DALLI_PROTOCOL_META_VERSION
|
|
36
|
+
::Dalli::Protocol::Meta
|
|
37
|
+
elsif version >= DALLI_PROTOCOL_BINARY_VERSION
|
|
35
38
|
::Dalli::Protocol::Binary
|
|
36
39
|
else
|
|
37
40
|
::Dalli::Server
|
|
@@ -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.
|
|
101
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
102
102
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
103
103
|
ensure
|
|
104
104
|
# the call is still executed
|
|
@@ -30,7 +30,11 @@ module Datadog
|
|
|
30
30
|
o.default 1.0
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
option :distributed_tracing
|
|
33
|
+
option :distributed_tracing do |o|
|
|
34
|
+
o.type :bool
|
|
35
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
36
|
+
o.default true
|
|
37
|
+
end
|
|
34
38
|
|
|
35
39
|
option :split_by_domain, default: false, type: :bool
|
|
36
40
|
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_ETHON_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_ETHON_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_ETHON_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_ETHON_PEER_SERVICE'
|
|
13
14
|
|
|
@@ -33,8 +33,11 @@ module Datadog
|
|
|
33
33
|
o.default 1.0
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
option :distributed_tracing
|
|
37
|
-
|
|
36
|
+
option :distributed_tracing do |o|
|
|
37
|
+
o.type :bool
|
|
38
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
39
|
+
o.default true
|
|
40
|
+
end
|
|
38
41
|
option :on_error do |o|
|
|
39
42
|
o.type :proc, nilable: true
|
|
40
43
|
end
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_EXCON_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_EXCON_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_EXCON_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_EXCON_PEER_SERVICE'
|
|
13
14
|
|
|
@@ -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}" }
|
|
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}" }
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
def propagate!(trace, span, datum)
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :on_error do |o|
|
|
38
41
|
o.type :proc, nilable: true
|
|
39
42
|
end
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_FARADAY_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_FARADAY_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_FARADAY_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_FARADAY_PEER_SERVICE'
|
|
13
14
|
ENV_ERROR_STATUS_CODES = 'DD_TRACE_FARADAY_ERROR_STATUS_CODES'
|
|
@@ -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.
|
|
86
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
101
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
80
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
124
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
168
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
193
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.
|
|
232
|
+
Datadog.logger.error("#{e.class}: #{e}")
|
|
233
233
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
234
234
|
end
|
|
235
235
|
|
|
@@ -253,10 +253,10 @@ module Datadog
|
|
|
253
253
|
end
|
|
254
254
|
|
|
255
255
|
def api_view(api)
|
|
256
|
-
# If the API inherits from Grape::API in version >= 1.2.0
|
|
256
|
+
# If the API inherits from Grape::API in version >= 1.2.0 and version <= 2.3.0
|
|
257
257
|
# then the API will be an instance and the name must be derived from the base.
|
|
258
258
|
# See https://github.com/ruby-grape/grape/issues/1825
|
|
259
|
-
if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance
|
|
259
|
+
if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance && api.respond_to?(:base)
|
|
260
260
|
api.base.to_s
|
|
261
261
|
else
|
|
262
262
|
api.to_s
|
|
@@ -6,13 +6,8 @@ module Datadog
|
|
|
6
6
|
module Grape
|
|
7
7
|
# Instrumentation for Grape::Endpoint
|
|
8
8
|
module Instrumentation
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
base.prepend(InstanceMethods)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# ClassMethods - implementing instrumentation
|
|
15
|
-
module ClassMethods
|
|
9
|
+
# GenerateApiMethodPatch - class method instrumentation for endpoint render (Grape < 3.0.0)
|
|
10
|
+
module GenerateApiMethodPatch
|
|
16
11
|
def generate_api_method(*params, &block)
|
|
17
12
|
method_api = super
|
|
18
13
|
|
|
@@ -23,7 +18,17 @@ module Datadog
|
|
|
23
18
|
end
|
|
24
19
|
end
|
|
25
20
|
|
|
26
|
-
#
|
|
21
|
+
# ExecutePatch - instance method instrumentation for endpoint render (Grape >= 3.0.0)
|
|
22
|
+
module ExecutePatch
|
|
23
|
+
def execute(*args)
|
|
24
|
+
return unless @source
|
|
25
|
+
|
|
26
|
+
::ActiveSupport::Notifications.instrument('endpoint_render.grape.start_render')
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# InstanceMethods - instance method instrumentation for endpoint run
|
|
27
32
|
module InstanceMethods
|
|
28
33
|
def run(*args)
|
|
29
34
|
::ActiveSupport::Notifications.instrument('endpoint_run.grape.start_process', endpoint: self, env: env)
|
|
@@ -21,7 +21,12 @@ module Datadog
|
|
|
21
21
|
|
|
22
22
|
def patch
|
|
23
23
|
# Patch endpoints
|
|
24
|
-
::Grape::Endpoint.
|
|
24
|
+
::Grape::Endpoint.prepend(Instrumentation::InstanceMethods)
|
|
25
|
+
if target_version < Gem::Version.new('3.0.0')
|
|
26
|
+
::Grape::Endpoint.singleton_class.prepend(Instrumentation::GenerateApiMethodPatch)
|
|
27
|
+
else
|
|
28
|
+
::Grape::Endpoint.prepend(Instrumentation::ExecutePatch)
|
|
29
|
+
end
|
|
25
30
|
|
|
26
31
|
# Subscribe to ActiveSupport events
|
|
27
32
|
Endpoint.subscribe
|
|
@@ -30,8 +30,11 @@ module Datadog
|
|
|
30
30
|
o.default 1.0
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
option :distributed_tracing
|
|
34
|
-
|
|
33
|
+
option :distributed_tracing do |o|
|
|
34
|
+
o.type :bool
|
|
35
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
36
|
+
o.default true
|
|
37
|
+
end
|
|
35
38
|
option :service_name do |o|
|
|
36
39
|
o.type :string, nilable: true
|
|
37
40
|
o.default do
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_GRPC_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_GRPC_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_GRPC_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_GRPC_PEER_SERVICE'
|
|
13
14
|
# @!visibility private
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :service_name do |o|
|
|
38
41
|
o.type :string, nilable: true
|
|
39
42
|
o.default do
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_HTTP_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_HTTP_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_NET_HTTP_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_NET_HTTP_PEER_SERVICE'
|
|
13
14
|
# @!visibility private
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :service_name do |o|
|
|
38
41
|
o.default do
|
|
39
42
|
Contrib::SpanAttributeSchema.fetch_service_name(
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_HTTPCLIENT_ENABLED'
|
|
11
|
+
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_HTTPCLIENT_DISTRIBUTED_TRACING'
|
|
11
12
|
ENV_SERVICE_NAME = 'DD_TRACE_HTTPCLIENT_SERVICE_NAME'
|
|
12
13
|
ENV_PEER_SERVICE = 'DD_TRACE_HTTPCLIENT_PEER_SERVICE'
|
|
13
14
|
|
|
@@ -32,8 +32,11 @@ module Datadog
|
|
|
32
32
|
o.default 1.0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
option :distributed_tracing
|
|
36
|
-
|
|
35
|
+
option :distributed_tracing do |o|
|
|
36
|
+
o.type :bool
|
|
37
|
+
o.env Ext::ENV_DISTRIBUTED_TRACING
|
|
38
|
+
o.default true
|
|
39
|
+
end
|
|
37
40
|
option :service_name do |o|
|
|
38
41
|
o.default do
|
|
39
42
|
Contrib::SpanAttributeSchema.fetch_service_name(
|