datadog 2.19.0 → 2.20.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 +27 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/component.rb +3 -13
- data/lib/datadog/appsec/context.rb +23 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +3 -18
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +16 -0
- data/lib/datadog/appsec/metrics/collector.rb +7 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/security_engine/engine.rb +14 -32
- data/lib/datadog/appsec/security_engine/result.rb +16 -0
- data/lib/datadog/appsec/security_engine/runner.rb +18 -4
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec.rb +0 -7
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/option.rb +29 -20
- data/lib/datadog/core/configuration/option_definition.rb +2 -2
- data/lib/datadog/core/configuration/options.rb +13 -7
- data/lib/datadog/di/boot.rb +7 -0
- data/lib/datadog/di/component.rb +7 -0
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di.rb +0 -1
- data/lib/datadog/kit/appsec/events/v2.rb +5 -4
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/profiling.rb +6 -8
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
- data/lib/datadog/tracing/configuration/ext.rb +3 -2
- data/lib/datadog/tracing/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- 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_job/integration.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 +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.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 +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +6 -6
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +5 -4
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- 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/redis/trace_middleware.rb +4 -4
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +5 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +73 -8
- data/lib/datadog/tracing/distributed/datadog.rb +4 -5
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +4 -4
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_event.rb +10 -10
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +9 -11
- data/lib/datadog/tracing/trace_digest.rb +21 -23
- data/lib/datadog/tracing/trace_operation.rb +84 -88
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +36 -38
- data/lib/datadog/tracing/transport/http/client.rb +1 -1
- data/lib/datadog/tracing/transport/http/traces.rb +2 -2
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +5 -5
- data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- metadata +15 -6
@@ -72,7 +72,7 @@ module Datadog
|
|
72
72
|
|
73
73
|
# set the resource with the quantized query
|
74
74
|
span.resource = serialized_query
|
75
|
-
rescue
|
75
|
+
rescue => e
|
76
76
|
Datadog.logger.debug("error when handling MongoDB 'started' event: #{e}")
|
77
77
|
end
|
78
78
|
# rubocop:enable Metrics/AbcSize
|
@@ -84,12 +84,12 @@ module Datadog
|
|
84
84
|
# the failure is not a real exception because it's handled by
|
85
85
|
# the framework itself, so we set only the error and the message
|
86
86
|
span.set_error(event)
|
87
|
-
rescue
|
87
|
+
rescue => e
|
88
88
|
Datadog.logger.debug("error when handling MongoDB 'failed' event: #{e}")
|
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
|
92
|
-
span
|
92
|
+
span&.finish
|
93
93
|
clear_span(event)
|
94
94
|
end
|
95
95
|
|
@@ -100,12 +100,12 @@ module Datadog
|
|
100
100
|
# add fields that are available only after executing the query
|
101
101
|
rows = event.reply.fetch('n', nil)
|
102
102
|
span.set_tag(Ext::TAG_ROWS, rows) unless rows.nil?
|
103
|
-
rescue
|
103
|
+
rescue => e
|
104
104
|
Datadog.logger.debug("error when handling MongoDB 'succeeded' event: #{e}")
|
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
|
108
|
-
span
|
108
|
+
span&.finish
|
109
109
|
clear_span(event)
|
110
110
|
end
|
111
111
|
|
@@ -118,7 +118,7 @@ module Datadog
|
|
118
118
|
# Incorrect Hash#to_s serialization. The Mongo command should only be encoded as JSON.
|
119
119
|
# This code path should be removed, and is only kept to avoid a breaking change.
|
120
120
|
Datadog::Core.log_deprecation(key: :mongo_json_command) do
|
121
|
-
'MongoDB integration: `json_command: false` causes invalid command serialization. '\
|
121
|
+
'MongoDB integration: `json_command: false` causes invalid command serialization. ' \
|
122
122
|
'Use `json_command: true` or `DD_TRACE_MONGO_JSON_COMMAND=1` instead.'
|
123
123
|
end
|
124
124
|
|
@@ -20,7 +20,7 @@ module Datadog
|
|
20
20
|
TAG_COMPONENT = 'mysql2'
|
21
21
|
TAG_OPERATION_QUERY = 'query'
|
22
22
|
TAG_SYSTEM = 'mysql'
|
23
|
-
PEER_SERVICE_SOURCES = (
|
23
|
+
PEER_SERVICE_SOURCES = ([Ext::TAG_DB_NAME] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -56,7 +56,7 @@ module Datadog
|
|
56
56
|
|
57
57
|
Datadog.logger.warn(
|
58
58
|
"Invalid resource pattern: #{value}. " \
|
59
|
-
"Supported values are: #{Ext::VALID_RESOURCE_PATTERNS.join(
|
59
|
+
"Supported values are: #{Ext::VALID_RESOURCE_PATTERNS.join(" | ")}. " \
|
60
60
|
"Using default value: #{Ext::DEFAULT_RESOURCE_PATTERN}."
|
61
61
|
)
|
62
62
|
|
@@ -36,10 +36,11 @@ module Datadog
|
|
36
36
|
TAG_PORT = 'http.url_details.port'
|
37
37
|
TAG_SCHEME = 'http.url_details.scheme'
|
38
38
|
TAG_RESPONSE_CONTENT_LENGTH = 'http.response.content_length'
|
39
|
-
PEER_SERVICE_SOURCES =
|
39
|
+
PEER_SERVICE_SOURCES = [
|
40
40
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
41
41
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
42
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
42
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
43
|
+
].freeze
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
@@ -34,79 +34,77 @@ module Datadog
|
|
34
34
|
response = nil
|
35
35
|
# rubocop:disable Metrics/BlockLength
|
36
36
|
Tracing.trace('opensearch.query', service: datadog_configuration[:service_name]) do |span|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
37
|
+
# Set generic tags
|
38
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
39
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
|
40
|
+
span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
|
41
|
+
|
42
|
+
# Set argument tags
|
43
|
+
span.set_tag(OpenSearch::Ext::TAG_METHOD, method)
|
44
|
+
span.set_tag(OpenSearch::Ext::TAG_PATH, path)
|
45
|
+
|
46
|
+
tag_params(params, span)
|
47
|
+
tag_body(body, span)
|
48
|
+
|
49
|
+
# Parse url
|
50
|
+
original_url = transport.get_connection.full_url(path, {})
|
51
|
+
url = URI.parse(original_url)
|
52
|
+
host = url.host
|
53
|
+
port = url.port
|
54
|
+
scheme = url.scheme
|
55
|
+
# Set url.user to nil to remove sensitive information (i.e. user's username and password)
|
56
|
+
url.user = nil
|
57
|
+
|
58
|
+
if datadog_configuration[:peer_service]
|
59
|
+
span.set_tag(
|
60
|
+
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
|
61
|
+
datadog_configuration[:peer_service]
|
62
|
+
)
|
63
|
+
end
|
65
64
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
65
|
+
# Tag original global service name if not used
|
66
|
+
if span.service != Datadog.configuration.service
|
67
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
|
68
|
+
end
|
70
69
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
70
|
+
# Set url tags
|
71
|
+
span.set_tag(OpenSearch::Ext::TAG_URL, url)
|
72
|
+
span.set_tag(OpenSearch::Ext::TAG_HOST, host)
|
73
|
+
span.set_tag(OpenSearch::Ext::TAG_PORT, port)
|
74
|
+
span.set_tag(OpenSearch::Ext::TAG_SCHEME, scheme)
|
75
|
+
|
76
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, host) if host
|
77
|
+
|
78
|
+
# Define span resource
|
79
|
+
quantized_url = if datadog_configuration[:resource_pattern] == Ext::RELATIVE_RESOURCE_PATTERN
|
80
|
+
OpenSearch::Quantize.format_url(url.path)
|
81
|
+
else # Default to Ext::ABSOLUTE_RESOURCE_PATTERN
|
82
|
+
OpenSearch::Quantize.format_url(url)
|
83
|
+
end
|
84
|
+
span.resource = "#{method} #{quantized_url}"
|
85
|
+
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
86
|
+
rescue => e
|
87
|
+
Datadog.logger.error(e.message)
|
88
|
+
Datadog::Core::Telemetry::Logger.report(e)
|
89
|
+
# TODO: Refactor the code to streamline the execution without ensure
|
90
|
+
ensure
|
91
|
+
begin
|
92
|
+
response = super
|
93
|
+
rescue => e
|
94
|
+
status_code = ::OpenSearch::Transport::Transport::ERRORS.key(e.class)
|
95
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, status_code) if status_code
|
96
|
+
raise
|
97
|
+
end
|
98
|
+
# Set post-response tags
|
99
|
+
if response
|
100
|
+
if response.respond_to?(:status)
|
101
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.status)
|
98
102
|
end
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
if response.respond_to?(:headers) && (response.headers || {})['content-length']
|
105
|
-
span.set_tag(
|
106
|
-
OpenSearch::Ext::TAG_RESPONSE_CONTENT_LENGTH,
|
107
|
-
response.headers['content-length'].to_i
|
108
|
-
)
|
109
|
-
end
|
103
|
+
if response.respond_to?(:headers) && (response.headers || {})['content-length']
|
104
|
+
span.set_tag(
|
105
|
+
OpenSearch::Ext::TAG_RESPONSE_CONTENT_LENGTH,
|
106
|
+
response.headers['content-length'].to_i
|
107
|
+
)
|
110
108
|
end
|
111
109
|
end
|
112
110
|
end
|
@@ -28,7 +28,7 @@ module Datadog
|
|
28
28
|
# Use Elasticsearch implementation
|
29
29
|
def format_body(body, options = {})
|
30
30
|
format_body!(body, options)
|
31
|
-
rescue
|
31
|
+
rescue
|
32
32
|
options[:placeholder] || DEFAULT_PLACEHOLDER
|
33
33
|
end
|
34
34
|
|
@@ -51,10 +51,10 @@ module Datadog
|
|
51
51
|
# Show
|
52
52
|
# If either is :all, value becomes :all
|
53
53
|
options[:show] = if original[:show] == :all || additional[:show] == :all
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
:all
|
55
|
+
else
|
56
|
+
(original[:show] || []).dup.concat(additional[:show] || []).uniq
|
57
|
+
end
|
58
58
|
|
59
59
|
# Exclude
|
60
60
|
options[:exclude] = (original[:exclude] || []).dup.concat(additional[:exclude] || []).uniq
|
@@ -27,7 +27,7 @@ module Datadog
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def patch_name
|
30
|
-
self.class != Class && self.class != Module ? self.class.name : name
|
30
|
+
(self.class != Class && self.class != Module) ? self.class.name : name
|
31
31
|
end
|
32
32
|
|
33
33
|
def patched?
|
@@ -38,15 +38,13 @@ module Datadog
|
|
38
38
|
return unless defined?(super)
|
39
39
|
|
40
40
|
patch_only_once.run do
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
@patch_successful = true
|
46
|
-
end
|
47
|
-
rescue StandardError => e
|
48
|
-
on_patch_error(e)
|
41
|
+
super.tap do
|
42
|
+
# Emit a metric
|
43
|
+
Datadog.health_metrics.instrumentation_patched(1, tags: default_tags)
|
44
|
+
@patch_successful = true
|
49
45
|
end
|
46
|
+
rescue => e
|
47
|
+
on_patch_error(e)
|
50
48
|
end
|
51
49
|
end
|
52
50
|
|
@@ -29,7 +29,7 @@ module Datadog
|
|
29
29
|
TAG_OPERATION_QUERY = 'query'
|
30
30
|
TAG_OPERATION_KILL = 'kill'
|
31
31
|
TAG_SYSTEM = 'presto'
|
32
|
-
PEER_SERVICE_SOURCES = (
|
32
|
+
PEER_SERVICE_SOURCES = ([Ext::TAG_SCHEMA_NAME] +
|
33
33
|
Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
|
34
34
|
end
|
35
35
|
end
|
@@ -27,7 +27,7 @@ module Datadog
|
|
27
27
|
span.resource = query
|
28
28
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
29
29
|
span.set_tag(Ext::TAG_QUERY_ASYNC, false)
|
30
|
-
rescue
|
30
|
+
rescue => e
|
31
31
|
Datadog.logger.debug("error preparing span for presto: #{e}")
|
32
32
|
end
|
33
33
|
|
@@ -45,7 +45,7 @@ module Datadog
|
|
45
45
|
span.resource = query
|
46
46
|
span.type = Tracing::Metadata::Ext::SQL::TYPE
|
47
47
|
span.set_tag(Ext::TAG_QUERY_ASYNC, !blk.nil?)
|
48
|
-
rescue
|
48
|
+
rescue => e
|
49
49
|
Datadog.logger.debug("error preparing span for presto: #{e}")
|
50
50
|
end
|
51
51
|
|
@@ -64,7 +64,7 @@ module Datadog
|
|
64
64
|
span.type = Tracing::Metadata::Ext::AppTypes::TYPE_DB
|
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
|
-
rescue
|
67
|
+
rescue => e
|
68
68
|
Datadog.logger.debug("error preparing span for presto: #{e}")
|
69
69
|
end
|
70
70
|
|
@@ -48,7 +48,7 @@ module Datadog
|
|
48
48
|
Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_traceparent, trace_op.to_digest)
|
49
49
|
else
|
50
50
|
Datadog.logger.warn(
|
51
|
-
'Sql comment propagation with `full` mode is aborted, because tracing is disabled. '\
|
51
|
+
'Sql comment propagation with `full` mode is aborted, because tracing is disabled. ' \
|
52
52
|
'Please set `Datadog.configuration.tracing.enabled = true` to continue.'
|
53
53
|
)
|
54
54
|
end
|
@@ -26,8 +26,8 @@ module Datadog
|
|
26
26
|
|
27
27
|
def span_options
|
28
28
|
super.merge(
|
29
|
-
tags: {
|
30
|
-
|
29
|
+
tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_BATCH,
|
30
|
+
Tracing::Metadata::Ext::TAG_KIND => Tracing::Metadata::Ext::SpanKind::TAG_CONSUMER}
|
31
31
|
)
|
32
32
|
end
|
33
33
|
end
|
@@ -26,8 +26,8 @@ module Datadog
|
|
26
26
|
|
27
27
|
def span_options
|
28
28
|
super.merge(
|
29
|
-
tags: {
|
30
|
-
|
29
|
+
tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_MESSAGE,
|
30
|
+
Tracing::Metadata::Ext::TAG_KIND => Tracing::Metadata::Ext::SpanKind::TAG_CONSUMER}
|
31
31
|
)
|
32
32
|
end
|
33
33
|
end
|
@@ -12,17 +12,17 @@ module Datadog
|
|
12
12
|
|
13
13
|
# Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
|
14
14
|
tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
Datadog.configuration.tracing.header_tags.request_tags(headers)
|
16
|
+
else
|
17
|
+
whitelist = configuration[:headers][:request] || []
|
18
|
+
whitelist.each_with_object({}) do |header, result|
|
19
|
+
header_value = headers.get(header)
|
20
|
+
unless header_value.nil?
|
21
|
+
header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
|
22
|
+
result[header_tag] = header_value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
26
|
|
27
27
|
span.set_tags(tags)
|
28
28
|
end
|
@@ -32,27 +32,27 @@ module Datadog
|
|
32
32
|
|
33
33
|
# Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
|
34
34
|
tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
35
|
+
Datadog.configuration.tracing.header_tags.response_tags(headers)
|
36
|
+
else
|
37
|
+
whitelist = configuration[:headers][:response] || []
|
38
|
+
whitelist.each_with_object({}) do |header, result|
|
39
|
+
header_value = headers[header]
|
40
|
+
|
41
|
+
next if header_value.nil?
|
42
|
+
|
43
|
+
header_tag = Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)
|
44
|
+
|
45
|
+
# Maintain the value format between Rack 2 and 3
|
46
|
+
#
|
47
|
+
# Rack 2.x => { 'foo' => 'bar,baz' }
|
48
|
+
# Rack 3.x => { 'foo' => ['bar', 'baz'] }
|
49
|
+
result[header_tag] = if header_value.is_a? Array
|
50
|
+
header_value.join(',')
|
51
|
+
else
|
52
|
+
header_value
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
56
|
|
57
57
|
span.set_tags(tags)
|
58
58
|
end
|
@@ -47,7 +47,7 @@ module Datadog
|
|
47
47
|
end
|
48
48
|
|
49
49
|
TraceProxyMiddleware.call(env, configuration) do
|
50
|
-
trace_options = {
|
50
|
+
trace_options = {type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND}
|
51
51
|
trace_options[:service] = configuration[:service_name] if configuration[:service_name]
|
52
52
|
|
53
53
|
# start a new request span and attach it to the current Rack environment;
|
@@ -80,7 +80,7 @@ module Datadog
|
|
80
80
|
# catch exceptions that may be raised in the middleware chain
|
81
81
|
# Note: if a middleware catches an Exception without re raising,
|
82
82
|
# the Exception cannot be recorded here.
|
83
|
-
request_span
|
83
|
+
request_span&.set_error(e)
|
84
84
|
raise e
|
85
85
|
ensure
|
86
86
|
env[Ext::RACK_ENV_REQUEST_SPAN] = previous_request_span if previous_request_span
|
@@ -123,7 +123,7 @@ module Datadog
|
|
123
123
|
# 4. Fallback with verb + status, eq `GET 200`
|
124
124
|
request_span.resource ||=
|
125
125
|
if configuration[:middleware_names] && env['RESPONSE_MIDDLEWARE']
|
126
|
-
"#{env[
|
126
|
+
"#{env["RESPONSE_MIDDLEWARE"]}##{original_request_method}"
|
127
127
|
elsif trace.resource_override?
|
128
128
|
trace.resource
|
129
129
|
else
|
@@ -240,16 +240,18 @@ module Datadog
|
|
240
240
|
Datadog.configuration.tracing[:rack]
|
241
241
|
end
|
242
242
|
|
243
|
+
# rubocop:disable Metrics/AbcSize
|
244
|
+
# rubocop:disable Metrics/MethodLength
|
243
245
|
def parse_url(env, original_env)
|
244
246
|
request_obj = ::Rack::Request.new(env)
|
245
247
|
|
246
248
|
# scheme, host, and port
|
247
249
|
base_url = if request_obj.respond_to?(:base_url)
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
250
|
+
request_obj.base_url
|
251
|
+
else
|
252
|
+
# Compatibility for older Rack versions
|
253
|
+
request_obj.url.chomp(request_obj.fullpath)
|
254
|
+
end
|
253
255
|
|
254
256
|
# https://github.com/rack/rack/blob/main/SPEC.rdoc
|
255
257
|
#
|
@@ -269,18 +271,20 @@ module Datadog
|
|
269
271
|
# prepended to PATH_INFO to reflect the correct user visible path.
|
270
272
|
request_uri = env['REQUEST_URI'].to_s
|
271
273
|
fullpath = if request_uri.empty?
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
274
|
+
query_string = original_env['QUERY_STRING'].to_s
|
275
|
+
path = original_env['SCRIPT_NAME'].to_s + original_env['PATH_INFO'].to_s
|
276
|
+
|
277
|
+
query_string.empty? ? path : "#{path}?#{query_string}"
|
278
|
+
else
|
279
|
+
# normally REQUEST_URI starts at the path, but it
|
280
|
+
# might contain the full URL in some cases (e.g WEBrick)
|
281
|
+
request_uri.delete_prefix(base_url)
|
282
|
+
end
|
281
283
|
|
282
284
|
base_url + fullpath
|
283
285
|
end
|
286
|
+
# rubocop:enable Metrics/AbcSize
|
287
|
+
# rubocop:enable Metrics/MethodLength
|
284
288
|
|
285
289
|
def parse_user_agent_header(headers)
|
286
290
|
headers.get(Tracing::Metadata::Ext::HTTP::HEADER_USER_AGENT)
|