datadog 2.18.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 +73 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +51 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.c +58 -49
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +5 -6
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +37 -26
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +0 -1
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +1 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/api_security/route_extractor.rb +7 -1
- 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 +17 -1
- 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/core/configuration/settings.rb +20 -0
- data/lib/datadog/core/telemetry/component.rb +8 -4
- data/lib/datadog/core/telemetry/event/app_started.rb +21 -3
- data/lib/datadog/di/boot.rb +7 -0
- data/lib/datadog/di/component.rb +7 -0
- data/lib/datadog/di/instrumenter.rb +11 -18
- 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/probe_notification_builder.rb +21 -16
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di/serializer.rb +6 -2
- data/lib/datadog/di.rb +0 -7
- data/lib/datadog/kit/appsec/events/v2.rb +196 -0
- 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/collectors/cpu_and_wall_time_worker.rb +2 -0
- data/lib/datadog/profiling/collectors/info.rb +41 -0
- data/lib/datadog/profiling/component.rb +1 -0
- data/lib/datadog/profiling/exporter.rb +9 -3
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/tag_builder.rb +2 -0
- data/lib/datadog/profiling.rb +7 -8
- data/lib/datadog/single_step_instrument.rb +9 -0
- 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 +13 -7
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- 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/instrumentation.rb +16 -6
- 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/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
- 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 +8 -2
- 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 +31 -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
- data/lib/datadog.rb +7 -0
- metadata +17 -6
@@ -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)
|
@@ -34,8 +34,8 @@ module Datadog
|
|
34
34
|
# return the request_start only if it's lesser than
|
35
35
|
# current time, to avoid significant clock skew
|
36
36
|
request_start = Time.at(time_value)
|
37
|
-
request_start.utc > now ? nil : request_start
|
38
|
-
rescue
|
37
|
+
(request_start.utc > now) ? nil : request_start
|
38
|
+
rescue => e
|
39
39
|
# in case of an Exception we don't create a
|
40
40
|
# `request.queuing` span
|
41
41
|
Datadog.logger.debug("[rack] unable to parse request queue headers: #{e}")
|
@@ -16,7 +16,7 @@ module Datadog
|
|
16
16
|
|
17
17
|
app_config.log_tags ||= [] # Can be nil, we initialized it if so
|
18
18
|
app_config.log_tags << proc { Tracing.log_correlation if Datadog.configuration.tracing.log_injection }
|
19
|
-
rescue
|
19
|
+
rescue => e
|
20
20
|
Datadog.logger.warn(
|
21
21
|
"Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class.name} #{e.message}"
|
22
22
|
)
|
@@ -34,7 +34,7 @@ module Datadog
|
|
34
34
|
# Some exception gets handled by Rails middleware before it can be set on Rack middleware
|
35
35
|
# The rack span is the root span of the request and should make sure it has the full exception
|
36
36
|
# set on it.
|
37
|
-
env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
37
|
+
env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]&.set_error(e)
|
38
38
|
end
|
39
39
|
raise e
|
40
40
|
end
|
@@ -86,7 +86,10 @@ module Datadog
|
|
86
86
|
|
87
87
|
# Instruments the `bin/rails runner` command.
|
88
88
|
def patch_rails_runner
|
89
|
-
|
89
|
+
# The `RunnerCommand` class is only available in Rails 5.1 and later.
|
90
|
+
if defined?(::Rails::Command::RunnerCommand) && Integration.version >= Gem::Version.new('5.1')
|
91
|
+
::Rails::Command::RunnerCommand.prepend(Runner)
|
92
|
+
end
|
90
93
|
end
|
91
94
|
end
|
92
95
|
end
|
@@ -10,34 +10,48 @@ module Datadog
|
|
10
10
|
# * `-`: for code provided through the STDIN.
|
11
11
|
# * File path: for code provided through a local file.
|
12
12
|
# * `inline code`: for code provided directly as a command line argument.
|
13
|
+
#
|
14
|
+
# The difficulty in instrumenting the Rails Runner is that
|
15
|
+
# the Rails application (and as a consequence the Datadog tracing library)
|
16
|
+
# is loaded very late in the runner execution.
|
17
|
+
# The Rails application is loaded inside the same method the method
|
18
|
+
# that directly executes the code the user wants the runner to execute:
|
19
|
+
#
|
20
|
+
# ```ruby
|
21
|
+
# def perform(code_or_file = nil, *command_argv)
|
22
|
+
# boot_application! # Loads the Rails and Datadog
|
23
|
+
#
|
24
|
+
# if code_or_file == "-"
|
25
|
+
# eval($stdin.read, TOPLEVEL_BINDING, "stdin") # Calls the user code for this Runner
|
26
|
+
# # ...
|
27
|
+
# ```
|
28
|
+
#
|
29
|
+
# This means that there's no time to instrument the calling method, `perform`, which
|
30
|
+
# would be ideal. Instead, we resort to instrumenting `eval` and `load`, but
|
31
|
+
# only for calls from the `Rails::Command::RunnerCommand` class.
|
32
|
+
#
|
13
33
|
# @see https://guides.rubyonrails.org/v6.1/command_line.html#bin-rails-runner
|
14
34
|
module Runner
|
15
35
|
# Limit the maximum size of the source code captured in the source tag.
|
16
36
|
MAX_TAG_VALUE_SIZE = 4096
|
17
37
|
private_constant :MAX_TAG_VALUE_SIZE
|
18
38
|
|
19
|
-
|
20
|
-
|
39
|
+
# Instruments the `Kernel.eval` method, but only for the
|
40
|
+
# `Rails::Command::RunnerCommand` class.
|
41
|
+
def eval(*args)
|
42
|
+
source = args[0]
|
43
|
+
|
44
|
+
if args[2] == 'stdin'
|
21
45
|
name = Ext::SPAN_RUNNER_STDIN
|
22
|
-
resource = nil
|
23
46
|
operation = Ext::TAG_OPERATION_STDIN
|
24
|
-
# The source is not yet available for STDIN, but it will be captured in `eval`.
|
25
|
-
elsif File.exist?(code_or_file)
|
26
|
-
name = Ext::SPAN_RUNNER_FILE
|
27
|
-
resource = code_or_file
|
28
|
-
operation = Ext::TAG_OPERATION_FILE
|
29
|
-
source = File.read(code_or_file)
|
30
47
|
else
|
31
48
|
name = Ext::SPAN_RUNNER_INLINE
|
32
|
-
resource = nil
|
33
49
|
operation = Ext::TAG_OPERATION_INLINE
|
34
|
-
source = code_or_file
|
35
50
|
end
|
36
51
|
|
37
52
|
Tracing.trace(
|
38
53
|
name,
|
39
54
|
service: Datadog.configuration.tracing[:rails][:service_name],
|
40
|
-
resource: resource,
|
41
55
|
tags: {
|
42
56
|
Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
|
43
57
|
Tracing::Metadata::Ext::TAG_OPERATION => operation,
|
@@ -55,39 +69,47 @@ module Datadog
|
|
55
69
|
end
|
56
70
|
end
|
57
71
|
|
58
|
-
|
59
|
-
|
60
|
-
span = Datadog::Tracing.active_span
|
61
|
-
if span&.name == Ext::SPAN_RUNNER_STDIN
|
62
|
-
source = args[0]
|
63
|
-
span.set_tag(
|
64
|
-
Ext::TAG_RUNNER_SOURCE,
|
65
|
-
Core::Utils.truncate(source, MAX_TAG_VALUE_SIZE)
|
66
|
-
)
|
67
|
-
end
|
68
|
-
|
69
|
-
super
|
72
|
+
def self.prepended(base)
|
73
|
+
base.const_set(:Kernel, InstrumentedKernel)
|
70
74
|
end
|
71
75
|
|
72
|
-
|
73
|
-
|
76
|
+
# Instruments the `Kernel.load` method, but only for the
|
77
|
+
# `Rails::Command::RunnerCommand` class.
|
78
|
+
module InstrumentedKernel
|
79
|
+
def self.load(*args)
|
80
|
+
file = args[0]
|
81
|
+
name = Ext::SPAN_RUNNER_FILE
|
82
|
+
resource = file
|
83
|
+
operation = Ext::TAG_OPERATION_FILE
|
84
|
+
|
85
|
+
begin
|
86
|
+
# Reads one more byte than the limit to allow us to check if the source exceeds the limit.
|
87
|
+
source = File.read(file, MAX_TAG_VALUE_SIZE + 1)
|
88
|
+
rescue => e
|
89
|
+
Datadog.logger.debug("Failed to read file '#{file}' for Rails runner: #{e.message}")
|
90
|
+
end
|
74
91
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
92
|
+
Tracing.trace(
|
93
|
+
name,
|
94
|
+
service: Datadog.configuration.tracing[:rails][:service_name],
|
95
|
+
resource: resource,
|
96
|
+
tags: {
|
97
|
+
Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
|
98
|
+
Tracing::Metadata::Ext::TAG_OPERATION => operation,
|
99
|
+
}
|
100
|
+
) do |span|
|
101
|
+
if source
|
102
|
+
span.set_tag(
|
103
|
+
Ext::TAG_RUNNER_SOURCE,
|
104
|
+
Core::Utils.truncate(source, MAX_TAG_VALUE_SIZE)
|
105
|
+
)
|
106
|
+
end
|
107
|
+
Contrib::Analytics.set_rate!(span, Datadog.configuration.tracing[:rails])
|
108
|
+
|
109
|
+
super
|
110
|
+
end
|
86
111
|
end
|
87
|
-
ret
|
88
112
|
end
|
89
|
-
|
90
|
-
ruby2_keywords :find_by_namespace if respond_to?(:ruby2_keywords, true)
|
91
113
|
end
|
92
114
|
end
|
93
115
|
end
|
@@ -65,7 +65,7 @@ module Datadog
|
|
65
65
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_INVOKE)
|
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
|
-
rescue
|
68
|
+
rescue => e
|
69
69
|
Datadog.logger.debug("Error while tracing Rake invoke: #{e.class.name} #{e.message}")
|
70
70
|
end
|
71
71
|
|
@@ -74,7 +74,7 @@ module Datadog
|
|
74
74
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
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
|
-
rescue
|
77
|
+
rescue => e
|
78
78
|
Datadog.logger.debug("Error while tracing Rake execute: #{e.class.name} #{e.message}")
|
79
79
|
end
|
80
80
|
|
@@ -84,12 +84,12 @@ module Datadog
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def enabled?
|
87
|
-
Datadog.configuration.tracing.enabled &&
|
87
|
+
Datadog.configuration.tracing.enabled &&
|
88
88
|
configuration[:enabled] == true
|
89
89
|
end
|
90
90
|
|
91
91
|
def span_options
|
92
|
-
{
|
92
|
+
{service: configuration[:service_name]}
|
93
93
|
end
|
94
94
|
|
95
95
|
def configuration
|
@@ -19,13 +19,13 @@ module Datadog
|
|
19
19
|
protected
|
20
20
|
|
21
21
|
def parse_matcher(matcher)
|
22
|
-
matcher = {
|
22
|
+
matcher = {url: matcher} if matcher.is_a?(String)
|
23
23
|
|
24
24
|
normalize(connection_resolver.resolve(matcher))
|
25
25
|
end
|
26
26
|
|
27
27
|
def normalize(hash)
|
28
|
-
return {
|
28
|
+
return {url: hash[:url]} if hash[:scheme] == UNIX_SCHEME
|
29
29
|
|
30
30
|
# Connexion strings are always converted to host, port, db and scheme
|
31
31
|
# but the host, port, db and scheme will generate the :url only after
|
@@ -24,10 +24,11 @@ module Datadog
|
|
24
24
|
TAG_OPERATION_COMMAND = 'command'
|
25
25
|
TAG_SYSTEM = 'redis'
|
26
26
|
TAG_DATABASE_INDEX = 'db.redis.database_index'
|
27
|
-
PEER_SERVICE_SOURCES =
|
27
|
+
PEER_SERVICE_SOURCES = [
|
28
28
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
29
29
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
30
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
30
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
31
|
+
].freeze
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
@@ -31,11 +31,11 @@ module Datadog
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.redis_version
|
34
|
-
Gem.loaded_specs['redis']
|
34
|
+
Gem.loaded_specs['redis']&.version
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.redis_client_version
|
38
|
-
Gem.loaded_specs['redis-client']
|
38
|
+
Gem.loaded_specs['redis-client']&.version
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.loaded?
|
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
# For `redis-rb` 3.x
|
31
31
|
return client if respond_to?(:client)
|
32
32
|
|
33
|
-
Datadog.logger.warn 'Fail to apply configuration on redis client instance with '
|
33
|
+
Datadog.logger.warn 'Fail to apply configuration on redis client instance with ' \
|
34
34
|
'`Datadog.configure_onto(redis)`.'
|
35
35
|
|
36
36
|
# Null object instead of raising error
|
@@ -49,8 +49,8 @@ module Datadog
|
|
49
49
|
module InstanceMethods
|
50
50
|
def datadog_pin=(_pin)
|
51
51
|
Datadog.logger.warn \
|
52
|
-
'`Datadog.configure_onto(redis)` is not supported on Redis 5+. To instrument '\
|
53
|
-
"a redis instance with custom configuration, please initialize it with:\n"\
|
52
|
+
'`Datadog.configure_onto(redis)` is not supported on Redis 5+. To instrument ' \
|
53
|
+
"a redis instance with custom configuration, please initialize it with:\n" \
|
54
54
|
" `Redis.new(..., custom: { datadog: { service_name: 'my-service' } })`.\n\n" \
|
55
55
|
'See: https://github.com/DataDog/dd-trace-rb/blob/master/docs/GettingStarted.md#redis'
|
56
56
|
end
|
@@ -61,7 +61,7 @@ module Datadog
|
|
61
61
|
|
62
62
|
def default_tags
|
63
63
|
[].tap do |tags|
|
64
|
-
tags << "target_redis_version:#{Integration.redis_version}"
|
64
|
+
tags << "target_redis_version:#{Integration.redis_version}" if Integration.redis_version
|
65
65
|
tags << "target_redis_client_version:#{Integration.redis_client_version}" if Integration.redis_client_version
|
66
66
|
end
|
67
67
|
end
|
@@ -43,7 +43,7 @@ module Datadog
|
|
43
43
|
return 'AUTH ?' if auth_command?(command_args)
|
44
44
|
|
45
45
|
verb, *args = command_args.map { |x| format_arg(x) }
|
46
|
-
Core::Utils.truncate("#{verb.upcase} #{args.join(
|
46
|
+
Core::Utils.truncate("#{verb.upcase} #{args.join(" ")}", CMD_MAX_LEN, TOO_LONG_MARK)
|
47
47
|
end
|
48
48
|
|
49
49
|
def get_verb(command_args)
|