datadog 2.31.0 → 2.33.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/ext/datadog_profiling_native_extension/clock_id.h +9 -1
- data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +73 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +1 -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 +16 -5
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +6 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +8 -4
- data/ext/datadog_profiling_native_extension/http_transport.c +10 -5
- data/ext/datadog_profiling_native_extension/stack_recorder.c +3 -9
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -0
- data/ext/libdatadog_api/crashtracker.c +2 -0
- data/ext/libdatadog_api/di.c +48 -0
- data/ext/libdatadog_api/extconf.rb +7 -4
- data/ext/libdatadog_extconf_helpers.rb +38 -1
- data/lib/datadog/ai_guard/autoload.rb +10 -0
- data/lib/datadog/ai_guard/component.rb +1 -1
- data/lib/datadog/ai_guard/configuration.rb +105 -2
- data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
- data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
- data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +83 -0
- data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
- data/lib/datadog/ai_guard/evaluation.rb +2 -0
- data/lib/datadog/ai_guard/ext.rb +2 -0
- data/lib/datadog/ai_guard.rb +8 -0
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +414 -1
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
- data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
- data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +111 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry.rb +13 -1
- 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/url_encoded.rb +2 -2
- data/lib/datadog/appsec.rb +1 -0
- data/lib/datadog/core/configuration/components.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +13 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +4 -0
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/contrib/rails/utils.rb +1 -1
- 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/socket.rb +13 -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 +2 -2
- data/lib/datadog/core/runtime/metrics.rb +1 -1
- data/lib/datadog/core/telemetry/emitter.rb +1 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +2 -2
- data/lib/datadog/core/transport/http.rb +2 -0
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core.rb +1 -1
- 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/code_tracker.rb +179 -1
- data/lib/datadog/di/component.rb +1 -1
- data/lib/datadog/di/configuration.rb +235 -2
- data/lib/datadog/di/instrumenter.rb +46 -26
- 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 +1 -1
- data/lib/datadog/di/probe_notifier_worker.rb +2 -2
- data/lib/datadog/di/remote.rb +6 -6
- data/lib/datadog/di/serializer.rb +1 -1
- data/lib/datadog/di/transport/input.rb +3 -3
- 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 +3 -3
- 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/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/metrics.rb +13 -4
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +1 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +35 -9
- 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 +3 -6
- 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 +1 -1
- data/lib/datadog/profiling/profiler.rb +13 -1
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/stack_recorder.rb +0 -4
- 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/single_step_instrument.rb +1 -1
- data/lib/datadog/symbol_database/configuration.rb +65 -0
- data/lib/datadog/symbol_database/extractor.rb +906 -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 +102 -0
- data/lib/datadog/symbol_database/scope_batcher.rb +280 -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 +169 -0
- data/lib/datadog/symbol_database.rb +49 -0
- data/lib/datadog/tracing/buffer.rb +3 -3
- data/lib/datadog/tracing/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +5 -3
- 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/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 +2 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +2 -2
- 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/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/rack/ext.rb +27 -0
- 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/rack/trace_proxy_middleware.rb +117 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -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/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 +11 -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/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +2 -2
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +3 -3
- data/lib/datadog/tracing/trace_operation.rb +4 -4
- data/lib/datadog/tracing/tracer.rb +6 -8
- data/lib/datadog/tracing/transport/io/client.rb +1 -1
- data/lib/datadog/tracing/workers.rb +2 -1
- data/lib/datadog/version.rb +1 -1
- metadata +33 -12
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
- 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
|
@@ -77,7 +77,7 @@ module Datadog
|
|
|
77
77
|
|
|
78
78
|
Thread.current[KEY_RUN] = true
|
|
79
79
|
rescue => e
|
|
80
|
-
Datadog.logger.error("#{e.class}: #{e}")
|
|
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.class}: #{e}")
|
|
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.class}: #{e}")
|
|
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.class}: #{e}")
|
|
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.class}: #{e}")
|
|
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
|
|
@@ -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
|
|
|
@@ -41,7 +41,7 @@ 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
|
-
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
|
|
|
@@ -73,7 +73,7 @@ module Datadog
|
|
|
73
73
|
# set the resource with the quantized query
|
|
74
74
|
span.resource = serialized_query
|
|
75
75
|
rescue => e
|
|
76
|
-
Datadog.logger.debug("error when handling MongoDB 'started' event: #{e}")
|
|
76
|
+
Datadog.logger.debug("error when handling MongoDB 'started' event: #{e.class}: #{e.message}")
|
|
77
77
|
end
|
|
78
78
|
# rubocop:enable Metrics/AbcSize
|
|
79
79
|
|
|
@@ -85,7 +85,7 @@ module Datadog
|
|
|
85
85
|
# the framework itself, so we set only the error and the message
|
|
86
86
|
span.set_error(event)
|
|
87
87
|
rescue => e
|
|
88
|
-
Datadog.logger.debug("error when handling MongoDB 'failed' event: #{e}")
|
|
88
|
+
Datadog.logger.debug("error when handling MongoDB 'failed' event: #{e.class}: #{e.message}")
|
|
89
89
|
ensure
|
|
90
90
|
# whatever happens, the Span must be removed from the local storage and
|
|
91
91
|
# it must be finished to prevent any leak
|
|
@@ -101,7 +101,7 @@ module Datadog
|
|
|
101
101
|
rows = event.reply.fetch('n', nil)
|
|
102
102
|
span.set_tag(Ext::TAG_ROWS, rows) unless rows.nil?
|
|
103
103
|
rescue => e
|
|
104
|
-
Datadog.logger.debug("error when handling MongoDB 'succeeded' event: #{e}")
|
|
104
|
+
Datadog.logger.debug("error when handling MongoDB 'succeeded' event: #{e.class}: #{e.message}")
|
|
105
105
|
ensure
|
|
106
106
|
# whatever happens, the Span must be removed from the local storage and
|
|
107
107
|
# it must be finished to prevent any leak
|
|
@@ -84,7 +84,7 @@ module Datadog
|
|
|
84
84
|
span.resource = "#{method} #{quantized_url}"
|
|
85
85
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
86
86
|
rescue => e
|
|
87
|
-
Datadog.logger.error("#{e.class}: #{e}")
|
|
87
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
88
88
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
89
89
|
# TODO: Refactor the code to streamline the execution without ensure
|
|
90
90
|
ensure
|
|
@@ -28,7 +28,7 @@ module Datadog
|
|
|
28
28
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
|
29
29
|
span.set_tag(Ext::TAG_QUERY_ASYNC, false)
|
|
30
30
|
rescue => e
|
|
31
|
-
Datadog.logger.debug("error preparing span for presto: #{e}")
|
|
31
|
+
Datadog.logger.debug("error preparing span for presto: #{e.class}: #{e.message}")
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
super(query)
|
|
@@ -46,7 +46,7 @@ module Datadog
|
|
|
46
46
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
|
47
47
|
span.set_tag(Ext::TAG_QUERY_ASYNC, !blk.nil?)
|
|
48
48
|
rescue => e
|
|
49
|
-
Datadog.logger.debug("error preparing span for presto: #{e}")
|
|
49
|
+
Datadog.logger.debug("error preparing span for presto: #{e.class}: #{e.message}")
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
super(query, &blk)
|
|
@@ -65,7 +65,7 @@ module Datadog
|
|
|
65
65
|
# ^ not an SQL type span, since there's no SQL query
|
|
66
66
|
span.set_tag(Ext::TAG_QUERY_ID, query_id)
|
|
67
67
|
rescue => e
|
|
68
|
-
Datadog.logger.debug("error preparing span for presto: #{e}")
|
|
68
|
+
Datadog.logger.debug("error preparing span for presto: #{e.class}: #{e.message}")
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
super(query_id)
|
|
@@ -54,6 +54,12 @@ module Datadog
|
|
|
54
54
|
o.type :string, nilable: true
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
option :inferred_proxy_enabled do |o|
|
|
58
|
+
o.type :bool
|
|
59
|
+
o.env Ext::ENV_INFERRED_PROXY_ENABLED
|
|
60
|
+
o.default false
|
|
61
|
+
end
|
|
62
|
+
|
|
57
63
|
option :web_service_name, default: Ext::DEFAULT_PEER_WEBSERVER_SERVICE_NAME, type: :string
|
|
58
64
|
end
|
|
59
65
|
end
|
|
@@ -9,6 +9,7 @@ module Datadog
|
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_RACK_ENABLED'
|
|
11
11
|
ENV_DISTRIBUTED_TRACING = 'DD_TRACE_RACK_DISTRIBUTED_TRACING'
|
|
12
|
+
ENV_INFERRED_PROXY_ENABLED = 'DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED'
|
|
12
13
|
# @!visibility private
|
|
13
14
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACK_ANALYTICS_ENABLED'
|
|
14
15
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE'
|
|
@@ -24,6 +25,32 @@ module Datadog
|
|
|
24
25
|
TAG_OPERATION_HTTP_SERVER_QUEUE = 'queue'
|
|
25
26
|
WEBSERVER_APP = 'webserver'
|
|
26
27
|
DEFAULT_PEER_WEBSERVER_SERVICE_NAME = 'web-server'
|
|
28
|
+
|
|
29
|
+
# @!visibility private
|
|
30
|
+
HEADER_X_DD_PROXY = 'HTTP_X_DD_PROXY'
|
|
31
|
+
HEADER_X_DD_PROXY_REQUEST_TIME_MS = 'HTTP_X_DD_PROXY_REQUEST_TIME_MS'
|
|
32
|
+
HEADER_X_DD_PROXY_PATH = 'HTTP_X_DD_PROXY_PATH'
|
|
33
|
+
HEADER_X_DD_PROXY_RESOURCE_PATH = 'HTTP_X_DD_PROXY_RESOURCE_PATH'
|
|
34
|
+
HEADER_X_DD_PROXY_HTTPMETHOD = 'HTTP_X_DD_PROXY_HTTPMETHOD'
|
|
35
|
+
HEADER_X_DD_PROXY_DOMAIN_NAME = 'HTTP_X_DD_PROXY_DOMAIN_NAME'
|
|
36
|
+
HEADER_X_DD_PROXY_STAGE = 'HTTP_X_DD_PROXY_STAGE'
|
|
37
|
+
HEADER_X_DD_PROXY_ACCOUNT_ID = 'HTTP_X_DD_PROXY_ACCOUNT_ID'
|
|
38
|
+
HEADER_X_DD_PROXY_API_ID = 'HTTP_X_DD_PROXY_API_ID'
|
|
39
|
+
HEADER_X_DD_PROXY_REGION = 'HTTP_X_DD_PROXY_REGION'
|
|
40
|
+
HEADER_X_DD_PROXY_USER = 'HTTP_X_DD_PROXY_USER'
|
|
41
|
+
|
|
42
|
+
PROXY_AWS_APIGATEWAY = 'aws-apigateway'
|
|
43
|
+
PROXY_AWS_HTTPAPI = 'aws-httpapi'
|
|
44
|
+
|
|
45
|
+
SPAN_AWS_APIGATEWAY = 'aws.apigateway'
|
|
46
|
+
SPAN_AWS_HTTPAPI = 'aws.httpapi'
|
|
47
|
+
|
|
48
|
+
PROXY_SPAN_NAMES = {
|
|
49
|
+
PROXY_AWS_APIGATEWAY => SPAN_AWS_APIGATEWAY,
|
|
50
|
+
PROXY_AWS_HTTPAPI => SPAN_AWS_HTTPAPI,
|
|
51
|
+
}.freeze
|
|
52
|
+
|
|
53
|
+
TAG_INFERRED_SPAN = '_dd.inferred_span'
|
|
27
54
|
end
|
|
28
55
|
end
|
|
29
56
|
end
|
|
@@ -41,7 +41,7 @@ module Datadog
|
|
|
41
41
|
# context of middleware patching outside a Rails server process (eg. a
|
|
42
42
|
# process that doesn't serve HTTP requests but has Rails environment
|
|
43
43
|
# loaded such as a Resque master process)
|
|
44
|
-
Datadog.logger.debug("Error patching middleware stack: #{e}")
|
|
44
|
+
Datadog.logger.debug("Error patching middleware stack: #{e.class}: #{e.message}")
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def retain_middleware_name(middleware)
|
|
@@ -39,7 +39,7 @@ module Datadog
|
|
|
39
39
|
rescue => e
|
|
40
40
|
# in case of an Exception we don't create a
|
|
41
41
|
# `request.queuing` span
|
|
42
|
-
Datadog.logger.debug("[rack] unable to parse request queue headers: #{e}")
|
|
42
|
+
Datadog.logger.debug("[rack] unable to parse request queue headers: #{e.class}: #{e.message}")
|
|
43
43
|
nil
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -13,7 +13,11 @@ module Datadog
|
|
|
13
13
|
module TraceProxyMiddleware
|
|
14
14
|
module_function
|
|
15
15
|
|
|
16
|
-
def call(env, configuration)
|
|
16
|
+
def call(env, configuration, &block)
|
|
17
|
+
if configuration[:inferred_proxy_enabled] &&
|
|
18
|
+
(proxy_type = env[Ext::HEADER_X_DD_PROXY]) && !proxy_type.empty?
|
|
19
|
+
return call_with_inferred_proxy(env, proxy_type, &block)
|
|
20
|
+
end
|
|
17
21
|
return yield unless configuration[:request_queuing]
|
|
18
22
|
|
|
19
23
|
# parse the request queue time
|
|
@@ -51,6 +55,118 @@ module Datadog
|
|
|
51
55
|
queue_span&.finish
|
|
52
56
|
request_span&.finish
|
|
53
57
|
end
|
|
58
|
+
|
|
59
|
+
# Creates a virtual parent span representing the upstream proxy
|
|
60
|
+
# that wraps the actual request processing.
|
|
61
|
+
#
|
|
62
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
63
|
+
def call_with_inferred_proxy(env, proxy_type)
|
|
64
|
+
span_name = Ext::PROXY_SPAN_NAMES[proxy_type]
|
|
65
|
+
return yield unless span_name
|
|
66
|
+
|
|
67
|
+
request_time_ms = env[Ext::HEADER_X_DD_PROXY_REQUEST_TIME_MS].to_f
|
|
68
|
+
return yield unless request_time_ms.positive?
|
|
69
|
+
|
|
70
|
+
path = env[Ext::HEADER_X_DD_PROXY_PATH]
|
|
71
|
+
stage = env[Ext::HEADER_X_DD_PROXY_STAGE]
|
|
72
|
+
domain = env[Ext::HEADER_X_DD_PROXY_DOMAIN_NAME]
|
|
73
|
+
http_method = env[Ext::HEADER_X_DD_PROXY_HTTPMETHOD]
|
|
74
|
+
resource_path = env[Ext::HEADER_X_DD_PROXY_RESOURCE_PATH]
|
|
75
|
+
|
|
76
|
+
# NOTE: resource_path is the parameterized route (e.g. /users/{id}) vs literal path
|
|
77
|
+
resource = "#{http_method} #{resource_path || path}" if http_method
|
|
78
|
+
|
|
79
|
+
inferred_span = Tracing.trace(
|
|
80
|
+
span_name,
|
|
81
|
+
service: domain,
|
|
82
|
+
type: Tracing::Metadata::Ext::AppTypes::TYPE_WEB,
|
|
83
|
+
start_time: Time.at(request_time_ms / 1_000),
|
|
84
|
+
)
|
|
85
|
+
inferred_span.resource = resource if resource
|
|
86
|
+
inferred_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, proxy_type)
|
|
87
|
+
inferred_span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_SERVER)
|
|
88
|
+
inferred_span.set_tag('stage', stage) if stage
|
|
89
|
+
inferred_span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, http_method) if http_method
|
|
90
|
+
inferred_span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, "https://#{domain}#{path}") if domain && path
|
|
91
|
+
inferred_span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE, resource_path) if resource_path
|
|
92
|
+
inferred_span.set_metric(Ext::TAG_INFERRED_SPAN, 1)
|
|
93
|
+
|
|
94
|
+
set_optional_tags(inferred_span, env: env, proxy_type: proxy_type)
|
|
95
|
+
|
|
96
|
+
yield
|
|
97
|
+
# NOTE: The underlying {Rack::TraceMiddleware} rescues {Exception}
|
|
98
|
+
# to tag the request span with error details.
|
|
99
|
+
# We must propagate errors to the inferred proxy parent span.
|
|
100
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
101
|
+
inferred_span&.set_error(e)
|
|
102
|
+
raise
|
|
103
|
+
ensure
|
|
104
|
+
if inferred_span
|
|
105
|
+
propagate_request_span_tags(inferred_span, env: env)
|
|
106
|
+
|
|
107
|
+
if (trace = Tracing.active_trace) && resource
|
|
108
|
+
trace.resource = resource
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
inferred_span.finish
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
115
|
+
|
|
116
|
+
# Sets cloud provider metadata and constructs the resource ARN.
|
|
117
|
+
#
|
|
118
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
119
|
+
def set_optional_tags(span, env:, proxy_type:)
|
|
120
|
+
api_id = env[Ext::HEADER_X_DD_PROXY_API_ID]
|
|
121
|
+
region = env[Ext::HEADER_X_DD_PROXY_REGION]
|
|
122
|
+
|
|
123
|
+
# API Gateway v1 sends region as a single-quoted string
|
|
124
|
+
region = region.delete("'") if region
|
|
125
|
+
|
|
126
|
+
span.set_tag('apiid', api_id) if api_id
|
|
127
|
+
span.set_tag('region', region) if region
|
|
128
|
+
|
|
129
|
+
if (account_id = env[Ext::HEADER_X_DD_PROXY_ACCOUNT_ID])
|
|
130
|
+
span.set_tag('account_id', account_id)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
if (user = env[Ext::HEADER_X_DD_PROXY_USER])
|
|
134
|
+
span.set_tag('aws_user', user)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
if api_id && region
|
|
138
|
+
# NOTE: Update this when adding non-AWS proxy types.
|
|
139
|
+
restapi_prefix = (proxy_type == Ext::PROXY_AWS_APIGATEWAY) ? 'restapis' : 'apis'
|
|
140
|
+
span.set_tag('dd_resource_key', "arn:aws:apigateway:#{region}::/#{restapi_prefix}/#{api_id}")
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
144
|
+
|
|
145
|
+
# Propagates response-level and security tags from the request span to
|
|
146
|
+
# the inferred parent.
|
|
147
|
+
def propagate_request_span_tags(span, env:)
|
|
148
|
+
rack_span = env[Ext::RACK_ENV_REQUEST_SPAN]
|
|
149
|
+
return unless rack_span
|
|
150
|
+
|
|
151
|
+
if (status_code = rack_span.get_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE))
|
|
152
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, status_code)
|
|
153
|
+
span.status = rack_span.status
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
if (user_agent = rack_span.get_tag(Tracing::Metadata::Ext::HTTP::TAG_USER_AGENT))
|
|
157
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_USER_AGENT, user_agent)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# NOTE: Tracing shouldn't know about AppSec tags.
|
|
161
|
+
if (appsec_enabled = rack_span.get_metric('_dd.appsec.enabled'))
|
|
162
|
+
span.set_metric('_dd.appsec.enabled', appsec_enabled)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# NOTE: Tracing shouldn't know about AppSec tags.
|
|
166
|
+
if (appsec_json = rack_span.get_tag('_dd.appsec.json'))
|
|
167
|
+
span.set_tag('_dd.appsec.json', appsec_json)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
54
170
|
end
|
|
55
171
|
end
|
|
56
172
|
end
|
|
@@ -18,7 +18,7 @@ module Datadog
|
|
|
18
18
|
app_config.log_tags << proc { Tracing.log_correlation if Datadog.configuration.tracing.log_injection }
|
|
19
19
|
rescue => e
|
|
20
20
|
Datadog.logger.warn(
|
|
21
|
-
"Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class}: #{e}"
|
|
21
|
+
"Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class}: #{e.message}"
|
|
22
22
|
)
|
|
23
23
|
false
|
|
24
24
|
end
|
|
@@ -86,7 +86,7 @@ module Datadog
|
|
|
86
86
|
# Reads one more byte than the limit to allow us to check if the source exceeds the limit.
|
|
87
87
|
source = File.read(file, MAX_TAG_VALUE_SIZE + 1)
|
|
88
88
|
rescue => e
|
|
89
|
-
Datadog.logger.debug { "Failed to read file '#{file}' for Rails runner: #{e.class}: #{e}" }
|
|
89
|
+
Datadog.logger.debug { "Failed to read file '#{file}' for Rails runner: #{e.class}: #{e.message}" }
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
Tracing.trace(
|
|
@@ -66,7 +66,7 @@ module Datadog
|
|
|
66
66
|
span.set_tag(Ext::TAG_TASK_ARG_NAMES, arg_names)
|
|
67
67
|
span.set_tag(Ext::TAG_INVOKE_ARGS, quantize_args(args)) unless args.nil?
|
|
68
68
|
rescue => e
|
|
69
|
-
Datadog.logger.debug { "Error while tracing Rake invoke: #{e.class}: #{e}" }
|
|
69
|
+
Datadog.logger.debug { "Error while tracing Rake invoke: #{e.class}: #{e.message}" }
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def annotate_execute!(span, args)
|
|
@@ -75,7 +75,7 @@ module Datadog
|
|
|
75
75
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_EXECUTE)
|
|
76
76
|
span.set_tag(Ext::TAG_EXECUTE_ARGS, quantize_args(args.to_hash)) unless args.nil?
|
|
77
77
|
rescue => e
|
|
78
|
-
Datadog.logger.debug { "Error while tracing Rake execute: #{e.class}: #{e}" }
|
|
78
|
+
Datadog.logger.debug { "Error while tracing Rake execute: #{e.class}: #{e.message}" }
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def quantize_args(args)
|
|
@@ -34,7 +34,7 @@ module Datadog
|
|
|
34
34
|
str = Core::Utils.utf8_encode(arg, binary: true, placeholder: PLACEHOLDER)
|
|
35
35
|
Core::Utils.truncate(str, VALUE_MAX_LEN, TOO_LONG_MARK)
|
|
36
36
|
rescue => e
|
|
37
|
-
Datadog.logger.debug("non formattable Redis arg #{str}: #{e}")
|
|
37
|
+
Datadog.logger.debug("non formattable Redis arg #{str}: #{e.class}: #{e.message}")
|
|
38
38
|
PLACEHOLDER
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -47,7 +47,7 @@ module Datadog
|
|
|
47
47
|
|
|
48
48
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
49
49
|
rescue => e
|
|
50
|
-
Datadog.logger.error("#{e.class}: #{e}")
|
|
50
|
+
Datadog.logger.error("#{e.class}: #{e.message}")
|
|
51
51
|
Datadog::Core::Telemetry::Logger.report(e)
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -25,7 +25,7 @@ module Datadog
|
|
|
25
25
|
job['class'].to_s
|
|
26
26
|
end
|
|
27
27
|
rescue => e
|
|
28
|
-
Datadog.logger.debug { "Error retrieving Sidekiq job class name (jid:#{job["jid"]}): #{e}" }
|
|
28
|
+
Datadog.logger.debug { "Error retrieving Sidekiq job class name (jid:#{job["jid"]}): #{e.class}: #{e.message}" }
|
|
29
29
|
|
|
30
30
|
job['class'].to_s
|
|
31
31
|
end
|
|
@@ -55,7 +55,7 @@ module Datadog
|
|
|
55
55
|
span.set_tag(Ext::TAG_REQUEST_PATH, event.path)
|
|
56
56
|
span.set_tag(Ext::TAG_REQUEST_NUM_RETRIES, event.num_retries.to_s)
|
|
57
57
|
rescue => e
|
|
58
|
-
Datadog.logger.debug { "#{e.class}: #{e}" }
|
|
58
|
+
Datadog.logger.debug { "#{e.class}: #{e.message}" }
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def configuration
|
|
@@ -81,3 +81,11 @@ require_relative 'contrib/sneakers/integration'
|
|
|
81
81
|
require_relative 'contrib/stripe/integration'
|
|
82
82
|
require_relative 'contrib/sucker_punch/integration'
|
|
83
83
|
require_relative 'contrib/trilogy/integration'
|
|
84
|
+
|
|
85
|
+
# This list is used to determine if an integration is a built-in integration,
|
|
86
|
+
# and prevent sending telemetry for custom integrations.
|
|
87
|
+
# To do this, we get the list of registered integrations at this point and freeze it.
|
|
88
|
+
# Later, when custom integrations are registered, they will not be included in this list.
|
|
89
|
+
# .uniq to handle aliases, as we can register the same integration multiple times with different names.
|
|
90
|
+
Datadog::Tracing::Contrib::BUILT_IN_INTEGRATIONS =
|
|
91
|
+
Datadog::Tracing::Contrib::REGISTRY.map { |entry| entry.klass }.uniq.freeze
|
|
@@ -24,7 +24,9 @@ module Datadog
|
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
rescue => e
|
|
27
|
-
logger.warn(
|
|
27
|
+
logger.warn(
|
|
28
|
+
"Failed to collect tracing environment information: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
29
|
+
)
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
|