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
@@ -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
|
@@ -69,14 +69,15 @@ module Datadog
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
def self.
|
73
|
-
base.const_set(:Kernel,
|
72
|
+
def self.prepended(base)
|
73
|
+
base.const_set(:Kernel, InstrumentedKernel)
|
74
74
|
end
|
75
75
|
|
76
76
|
# Instruments the `Kernel.load` method, but only for the
|
77
77
|
# `Rails::Command::RunnerCommand` class.
|
78
|
-
module
|
79
|
-
def self.load(
|
78
|
+
module InstrumentedKernel
|
79
|
+
def self.load(*args)
|
80
|
+
file = args[0]
|
80
81
|
name = Ext::SPAN_RUNNER_FILE
|
81
82
|
resource = file
|
82
83
|
operation = Ext::TAG_OPERATION_FILE
|
@@ -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)
|
@@ -46,7 +46,7 @@ module Datadog
|
|
46
46
|
span.set_tag Ext::TAG_RAW_COMMAND, raw_command
|
47
47
|
|
48
48
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
49
|
-
rescue
|
49
|
+
rescue => e
|
50
50
|
Datadog.logger.error(e.message)
|
51
51
|
Datadog::Core::Telemetry::Logger.report(e)
|
52
52
|
end
|
@@ -62,10 +62,10 @@ module Datadog
|
|
62
62
|
# Quantizes a multi-command Redis pipeline execution
|
63
63
|
def get_pipeline_commands(commands, command_args)
|
64
64
|
list = if command_args
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
commands.map { |c| Contrib::Redis::Quantize.format_command_args(c) }
|
66
|
+
else
|
67
|
+
commands.map { |c| Contrib::Redis::Quantize.get_verb(c) }
|
68
|
+
end
|
69
69
|
|
70
70
|
list.empty? ? '(none)' : list.join("\n")
|
71
71
|
end
|
@@ -76,7 +76,7 @@ module Datadog
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def span_options
|
79
|
-
{
|
79
|
+
{service: datadog_configuration[:service_name], on_error: datadog_configuration[:on_error]}
|
80
80
|
end
|
81
81
|
|
82
82
|
def datadog_configuration
|
@@ -17,10 +17,11 @@ module Datadog
|
|
17
17
|
SPAN_REQUEST = 'rest_client.request'
|
18
18
|
TAG_COMPONENT = 'rest_client'
|
19
19
|
TAG_OPERATION_REQUEST = 'request'
|
20
|
-
PEER_SERVICE_SOURCES =
|
20
|
+
PEER_SERVICE_SOURCES = [
|
21
21
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
22
22
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
23
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
23
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
|
24
|
+
].freeze
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -22,7 +22,7 @@ module Datadog
|
|
22
22
|
def execute(&block)
|
23
23
|
uri = URI.parse(url)
|
24
24
|
|
25
|
-
return super
|
25
|
+
return super unless Tracing.enabled?
|
26
26
|
|
27
27
|
datadog_trace_request(uri) do |_span, trace|
|
28
28
|
if Tracing::Distributed::PropagationPolicy.enabled?(
|
@@ -106,11 +106,11 @@ module Datadog
|
|
106
106
|
# rubocop:disable Lint/RescueException
|
107
107
|
rescue Exception => e
|
108
108
|
# rubocop:enable Lint/RescueException
|
109
|
-
span
|
109
|
+
span&.set_error(e)
|
110
110
|
|
111
111
|
raise e
|
112
112
|
ensure
|
113
|
-
span
|
113
|
+
span&.finish
|
114
114
|
end
|
115
115
|
|
116
116
|
private
|
@@ -46,7 +46,7 @@ module Datadog
|
|
46
46
|
ensure
|
47
47
|
begin
|
48
48
|
response = yield
|
49
|
-
rescue
|
49
|
+
rescue
|
50
50
|
# The status code is unknown to Roda and decided by the upstream web runner.
|
51
51
|
# In this case, spans default to status code 500 rather than a blank status code.
|
52
52
|
default_error_status = '500'
|
@@ -25,7 +25,7 @@ module Datadog
|
|
25
25
|
# if the user already has conflicting log_tags
|
26
26
|
# we want them to clobber ours, because we should allow them to override if needed.
|
27
27
|
log.named_tags = correlation.to_h.merge(original_named_tags)
|
28
|
-
super
|
28
|
+
super
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -23,7 +23,7 @@ module Datadog
|
|
23
23
|
response = nil
|
24
24
|
|
25
25
|
Tracing.trace(Ext::SPAN_QUERY) do |span|
|
26
|
-
span.service =
|
26
|
+
span.service = Datadog.configuration_for(self, :service_name) \
|
27
27
|
|| Datadog.configuration.tracing[:sequel][:service_name] \
|
28
28
|
|| Contrib::SpanAttributeSchema.fetch_service_name(
|
29
29
|
'',
|
@@ -46,10 +46,10 @@ module Datadog
|
|
46
46
|
|
47
47
|
def parse_opts(sql, opts)
|
48
48
|
db_opts = if ::Sequel::VERSION < '3.41.0' && self.class.to_s !~ /Dataset$/
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
@opts
|
50
|
+
elsif instance_variable_defined?(:@pool) && @pool
|
51
|
+
@pool.db.opts
|
52
|
+
end
|
53
53
|
sql = sql.is_a?(::Sequel::SQL::Expression) ? literal(sql) : sql.to_s
|
54
54
|
|
55
55
|
Utils.parse_opts(sql, opts, db_opts)
|
@@ -40,7 +40,7 @@ module Datadog
|
|
40
40
|
response = nil
|
41
41
|
|
42
42
|
Tracing.trace(Ext::SPAN_QUERY) do |span|
|
43
|
-
span.service =
|
43
|
+
span.service = Datadog.configuration_for(db, :service_name) \
|
44
44
|
|| Datadog.configuration.tracing[:sequel][:service_name] \
|
45
45
|
|| Contrib::SpanAttributeSchema.fetch_service_name(
|
46
46
|
'',
|
@@ -34,7 +34,7 @@ module Datadog
|
|
34
34
|
|
35
35
|
def parse_opts(sql, opts, db_opts, dataset = nil)
|
36
36
|
# Prepared statements don't provide their sql query in the +sql+ parameter.
|
37
|
-
if !sql.is_a?(String) && (dataset
|
37
|
+
if !sql.is_a?(String) && (dataset&.respond_to?(:prepared_sql) &&
|
38
38
|
(resolved_sql = dataset.prepared_sql))
|
39
39
|
# The dataset contains the resolved SQL query and prepared statement name.
|
40
40
|
prepared_name = dataset.prepared_statement_name
|
@@ -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[
|
28
|
+
Datadog.logger.debug { "Error retrieving Sidekiq job class name (jid:#{job["jid"]}): #{e}" }
|
29
29
|
|
30
30
|
job['class'].to_s
|
31
31
|
end
|
@@ -28,63 +28,61 @@ module Datadog
|
|
28
28
|
service: configuration[:service_name],
|
29
29
|
type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND
|
30
30
|
) do |span|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
span.resource = nil
|
31
|
+
# this is kept nil until we set a correct one (either in the route or with a fallback in the ensure below)
|
32
|
+
# the nil signals that there's no good one yet and is also seen by profiler, when sampling the resource
|
33
|
+
span.resource = nil
|
35
34
|
|
36
|
-
|
35
|
+
Sinatra::Env.set_datadog_span(env, span)
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
response = @app.call(env)
|
38
|
+
ensure
|
39
|
+
Contrib::Rack::HeaderTagging.tag_request_headers(span, env, configuration)
|
41
40
|
|
42
|
-
|
43
|
-
|
41
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
42
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
|
44
43
|
|
45
|
-
|
44
|
+
request = ::Sinatra::Request.new(env)
|
46
45
|
|
47
|
-
|
48
|
-
|
46
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, request.path)
|
47
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, request.request_method)
|
49
48
|
|
50
|
-
|
49
|
+
datadog_route = Sinatra::Env.route_path(env)
|
51
50
|
|
52
|
-
|
51
|
+
span.set_tag(Ext::TAG_ROUTE_PATH, datadog_route) if datadog_route
|
53
52
|
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
if request.script_name && !request.script_name.empty?
|
54
|
+
span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
|
55
|
+
end
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
# If this app handled the request, then Contrib::Sinatra::Tracer OR Contrib::Sinatra::Base set the
|
58
|
+
# resource; if no resource was set, let's use a fallback
|
59
|
+
span.resource = env['REQUEST_METHOD'] if span.resource.nil?
|
61
60
|
|
62
|
-
|
61
|
+
rack_request_span = env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
# This propagates the Sinatra resource to the Rack span,
|
64
|
+
# since the latter is unaware of what the resource might be
|
65
|
+
# and would fallback to a generic resource name when unset
|
66
|
+
rack_request_span.resource ||= span.resource if rack_request_span
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
if response
|
69
|
+
if (status = response[0])
|
70
|
+
sinatra_response = ::Sinatra::Response.new([], status) # Build object to use status code helpers
|
72
71
|
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, sinatra_response.status)
|
73
|
+
span.set_error(env['sinatra.error']) if sinatra_response.server_error?
|
74
|
+
end
|
76
75
|
|
77
|
-
|
78
|
-
|
79
|
-
end
|
76
|
+
if (headers = response[1])
|
77
|
+
Contrib::Rack::HeaderTagging.tag_response_headers(span, headers, configuration)
|
80
78
|
end
|
79
|
+
end
|
81
80
|
|
82
|
-
|
83
|
-
|
81
|
+
# Set analytics sample rate
|
82
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
84
83
|
|
85
|
-
|
86
|
-
|
87
|
-
end
|
84
|
+
# Measure service stats
|
85
|
+
Contrib::Analytics.set_measured(span)
|
88
86
|
end
|
89
87
|
end
|
90
88
|
# rubocop:enable Metrics/MethodLength
|
@@ -54,7 +54,7 @@ module Datadog
|
|
54
54
|
span.set_tag(Ext::TAG_REQUEST_METHOD, event.method)
|
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
|
-
rescue
|
57
|
+
rescue => e
|
58
58
|
Datadog.logger.debug(e.message)
|
59
59
|
end
|
60
60
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
19
19
|
TAG_COMPONENT = 'trilogy'
|
20
20
|
TAG_OPERATION_QUERY = 'query'
|
21
21
|
TAG_SYSTEM = 'mysql'
|
22
|
-
PEER_SERVICE_SOURCES = (
|
22
|
+
PEER_SERVICE_SOURCES = ([Ext::TAG_DB_NAME] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|