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
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module DI
|
5
|
+
module ProbeFileLoader
|
6
|
+
# Railtie class initializes dynamic instrumentation contrib code
|
7
|
+
# in Rails environments.
|
8
|
+
class Railtie < Rails::Railtie
|
9
|
+
initializer 'datadog.dynamic_instrumentation.load_probe_file' do |app| # steep:ignore
|
10
|
+
ProbeFileLoader.load_now
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module DI
|
7
|
+
module ProbeFileLoader
|
8
|
+
module_function def load_now_or_later
|
9
|
+
if Datadog::Core::Contrib::Rails::Utils.railtie_supported?
|
10
|
+
Datadog.logger.debug('di: loading probe_file_loader/railtie')
|
11
|
+
require_relative 'probe_file_loader/railtie'
|
12
|
+
else
|
13
|
+
load_now
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# This method can be called more than once, to attempt to load
|
18
|
+
# DI components that depend on third-party libraries after additional
|
19
|
+
# dependencies are loaded (or potentially loaded).
|
20
|
+
module_function def load_now
|
21
|
+
should_propagate = false
|
22
|
+
|
23
|
+
probe_file_path = ENV['DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE']
|
24
|
+
if probe_file_path.nil? || probe_file_path.empty?
|
25
|
+
return
|
26
|
+
end
|
27
|
+
|
28
|
+
# We want to initialize the component tree here if it was not already
|
29
|
+
# initialized.
|
30
|
+
component = Datadog::DI.component
|
31
|
+
return unless component
|
32
|
+
|
33
|
+
begin
|
34
|
+
probe_specs = File.open(probe_file_path) do |f|
|
35
|
+
# The probe file should contain an array, JSON.parse does not work
|
36
|
+
JSON.load(f) # standard:disable Security/JSONLoad
|
37
|
+
end
|
38
|
+
|
39
|
+
probe_specs.each do |probe_spec|
|
40
|
+
probe = component.parse_probe_spec_and_notify(probe_spec)
|
41
|
+
component.logger.debug { "di: received #{probe.type} probe at #{probe.location} (#{probe.id}) via probe file: #{probe_file_path}" }
|
42
|
+
|
43
|
+
begin
|
44
|
+
component.probe_manager.add_probe(probe)
|
45
|
+
rescue DI::Error::DITargetNotInRegistry => exc
|
46
|
+
component.telemetry&.report(exc, description: "Line probe is targeting a loaded file that is not in code tracker")
|
47
|
+
|
48
|
+
payload = component.probe_notification_builder.build_errored(probe, exc)
|
49
|
+
component.probe_notifier_worker.add_status(payload)
|
50
|
+
rescue => exc
|
51
|
+
raise if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
52
|
+
|
53
|
+
component.logger.debug { "di: unhandled exception adding #{probe.type} probe at #{probe.location} (#{probe.id}) in DI probe file loader: #{exc.class}: #{exc}" }
|
54
|
+
component.telemetry&.report(exc, description: "Unhandled exception adding probe in DI probe file loader")
|
55
|
+
|
56
|
+
# TODO test this path
|
57
|
+
payload = component.probe_notification_builder.build_errored(probe, exc)
|
58
|
+
component.probe_notifier_worker.add_status(payload)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
rescue => exc
|
62
|
+
if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
63
|
+
should_propagate = true
|
64
|
+
raise
|
65
|
+
end
|
66
|
+
|
67
|
+
component.logger.debug { "di: unhandled exception handling a probe in DI probe file loader: #{exc.class}: #{exc}" }
|
68
|
+
component.telemetry&.report(exc, description: "Unhandled exception handling probe in DI probe file loader")
|
69
|
+
end
|
70
|
+
rescue
|
71
|
+
# We should generally never get here, but if component tree
|
72
|
+
# initialization fails for some unexpected reason, don't nuke
|
73
|
+
# the customer application.
|
74
|
+
#
|
75
|
+
# For the same reason, we do not check
|
76
|
+
# component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
77
|
+
# here again, but rely on the local variable storing that value.
|
78
|
+
raise if should_propagate
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/datadog/di/remote.rb
CHANGED
@@ -43,6 +43,8 @@ module Datadog
|
|
43
43
|
if component
|
44
44
|
|
45
45
|
probe_manager = component.probe_manager
|
46
|
+
probe_notification_builder = component.probe_notification_builder
|
47
|
+
probe_notifier_worker = component.probe_notifier_worker
|
46
48
|
|
47
49
|
current_probe_ids = {}
|
48
50
|
repository.contents.each do |content|
|
@@ -50,11 +52,7 @@ module Datadog
|
|
50
52
|
when PRODUCT
|
51
53
|
begin
|
52
54
|
probe_spec = parse_content(content)
|
53
|
-
probe =
|
54
|
-
probe_notification_builder = component.probe_notification_builder
|
55
|
-
payload = probe_notification_builder.build_received(probe)
|
56
|
-
probe_notifier_worker = component.probe_notifier_worker
|
57
|
-
probe_notifier_worker.add_status(payload)
|
55
|
+
probe = component.parse_probe_spec_and_notify(probe_spec)
|
58
56
|
component.logger.debug { "di: received #{probe.type} probe at #{probe.location} (#{probe.id}) via RC" }
|
59
57
|
|
60
58
|
begin
|
data/lib/datadog/di.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative '../../identity'
|
4
|
+
require_relative '../../../appsec/trace_keeper'
|
4
5
|
|
5
6
|
module Datadog
|
6
7
|
module Kit
|
@@ -60,7 +61,7 @@ module Datadog
|
|
60
61
|
span.set_tag('appsec.events.users.login.success.track', 'true')
|
61
62
|
span.set_tag('_dd.appsec.events.users.login.success.sdk', 'true')
|
62
63
|
|
63
|
-
|
64
|
+
::Datadog::AppSec::TraceKeeper.keep!(trace)
|
64
65
|
|
65
66
|
record_event_telemetry_metric(LOGIN_SUCCESS_EVENT)
|
66
67
|
::Datadog::AppSec::Instrumentation.gateway.push('appsec.events.user_lifecycle', LOGIN_SUCCESS_EVENT)
|
@@ -116,7 +117,7 @@ module Datadog
|
|
116
117
|
span.set_tag('appsec.events.users.login.failure.usr.login', login)
|
117
118
|
span.set_tag('appsec.events.users.login.failure.usr.exists', user_exists.to_s)
|
118
119
|
|
119
|
-
|
120
|
+
::Datadog::AppSec::TraceKeeper.keep!(trace)
|
120
121
|
|
121
122
|
record_event_telemetry_metric(LOGIN_FAILURE_EVENT)
|
122
123
|
::Datadog::AppSec::Instrumentation.gateway.push('appsec.events.user_lifecycle', LOGIN_FAILURE_EVENT)
|
@@ -148,9 +149,9 @@ module Datadog
|
|
148
149
|
|
149
150
|
case user_or_id
|
150
151
|
when nil
|
151
|
-
{
|
152
|
+
{login: login}
|
152
153
|
when String
|
153
|
-
{
|
154
|
+
{login: login, id: user_or_id}
|
154
155
|
when Hash
|
155
156
|
raise ArgumentError, 'missing required user key `:id`' unless user_or_id.key?(:id)
|
156
157
|
raise TypeError, 'user key `:id` must be a String' unless user_or_id[:id].is_a?(String)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative '../identity'
|
4
|
+
require_relative '../../appsec/trace_keeper'
|
4
5
|
|
5
6
|
module Datadog
|
6
7
|
module Kit
|
@@ -10,7 +11,7 @@ module Datadog
|
|
10
11
|
LOGIN_SUCCESS_EVENT = 'users.login.success'
|
11
12
|
LOGIN_FAILURE_EVENT = 'users.login.failure'
|
12
13
|
SIGNUP_EVENT = 'users.signup'
|
13
|
-
USER_LOGIN_KEYS = ['usr.login', :
|
14
|
+
USER_LOGIN_KEYS = ['usr.login', :"usr.login"].freeze
|
14
15
|
|
15
16
|
class << self
|
16
17
|
# Attach login success event information to the trace
|
@@ -31,12 +32,12 @@ module Datadog
|
|
31
32
|
set_trace_and_span_context('track_login_success', trace, span) do |active_trace, active_span|
|
32
33
|
user_options = user.dup
|
33
34
|
user_id = user_options.delete(:id)
|
34
|
-
user_login = user_options[:login] || others[:
|
35
|
+
user_login = user_options[:login] || others[:"usr.login"] || others['usr.login'] || user_id
|
35
36
|
|
36
37
|
raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil?
|
37
38
|
|
38
39
|
others = others.reject { |key, _| USER_LOGIN_KEYS.include?(key) }
|
39
|
-
others[:
|
40
|
+
others[:"usr.login"] = user_login
|
40
41
|
track(LOGIN_SUCCESS_EVENT, active_trace, active_span, **others)
|
41
42
|
|
42
43
|
user_options[:login] = user_login
|
@@ -60,7 +61,7 @@ module Datadog
|
|
60
61
|
# event information to attach to the trace.
|
61
62
|
def track_login_failure(trace = nil, span = nil, user_exists:, user_id: nil, **others)
|
62
63
|
set_trace_and_span_context('track_login_failure', trace, span) do |active_trace, active_span|
|
63
|
-
others[:
|
64
|
+
others[:"usr.login"] = user_id if user_id && !others.key?(:"usr.login") && !others.key?('usr.login')
|
64
65
|
track(LOGIN_FAILURE_EVENT, active_trace, active_span, **others)
|
65
66
|
|
66
67
|
active_span.set_tag('appsec.events.users.login.failure.usr.id', user_id) if user_id
|
@@ -86,12 +87,12 @@ module Datadog
|
|
86
87
|
set_trace_and_span_context('track_signup', trace, span) do |active_trace, active_span|
|
87
88
|
user_options = user.dup
|
88
89
|
user_id = user_options.delete(:id)
|
89
|
-
user_login = user_options[:login] || others[:
|
90
|
+
user_login = user_options[:login] || others[:"usr.login"] || others['usr.login'] || user_id
|
90
91
|
|
91
92
|
raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil?
|
92
93
|
|
93
94
|
others = others.reject { |key, _| USER_LOGIN_KEYS.include?(key) }
|
94
|
-
others[:
|
95
|
+
others[:"usr.login"] = user_login
|
95
96
|
track(SIGNUP_EVENT, active_trace, active_span, **others)
|
96
97
|
|
97
98
|
user_options[:login] = user_login
|
@@ -126,7 +127,7 @@ module Datadog
|
|
126
127
|
span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
|
127
128
|
end
|
128
129
|
|
129
|
-
|
130
|
+
::Datadog::AppSec::TraceKeeper.keep!(trace)
|
130
131
|
else
|
131
132
|
set_trace_and_span_context('track', trace, span) do |active_trace, active_span|
|
132
133
|
active_span.set_tag("appsec.events.#{event}.track", 'true')
|
@@ -138,7 +139,7 @@ module Datadog
|
|
138
139
|
active_span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
|
139
140
|
end
|
140
141
|
|
141
|
-
|
142
|
+
::Datadog::AppSec::TraceKeeper.keep!(active_trace)
|
142
143
|
end
|
143
144
|
end
|
144
145
|
|
@@ -154,11 +155,11 @@ module Datadog
|
|
154
155
|
end
|
155
156
|
|
156
157
|
trace ||= Datadog::Tracing.active_trace
|
157
|
-
span ||=
|
158
|
+
span ||= trace&.active_span || Datadog::Tracing.active_span
|
158
159
|
|
159
160
|
unless trace && span
|
160
161
|
Datadog.logger.debug(
|
161
|
-
"Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}"\
|
162
|
+
"Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}" \
|
162
163
|
' to track this events'
|
163
164
|
)
|
164
165
|
return
|
data/lib/datadog/kit/identity.rb
CHANGED
@@ -43,12 +43,12 @@ module Datadog
|
|
43
43
|
|
44
44
|
# enforce types
|
45
45
|
|
46
|
-
raise TypeError, ':id must be a String'
|
47
|
-
raise TypeError, ':email must be a String'
|
48
|
-
raise TypeError, ':name must be a String'
|
46
|
+
raise TypeError, ':id must be a String' unless id.is_a?(String)
|
47
|
+
raise TypeError, ':email must be a String' unless email.nil? || email.is_a?(String)
|
48
|
+
raise TypeError, ':name must be a String' unless name.nil? || name.is_a?(String)
|
49
49
|
raise TypeError, ':session_id must be a String' unless session_id.nil? || session_id.is_a?(String)
|
50
|
-
raise TypeError, ':role must be a String'
|
51
|
-
raise TypeError, ':scope must be a String'
|
50
|
+
raise TypeError, ':role must be a String' unless role.nil? || role.is_a?(String)
|
51
|
+
raise TypeError, ':scope must be a String' unless scope.nil? || scope.is_a?(String)
|
52
52
|
|
53
53
|
others.each do |k, v|
|
54
54
|
raise TypeError, "#{k.inspect} must be a String" unless v.nil? || v.is_a?(String)
|
@@ -57,11 +57,11 @@ module Datadog
|
|
57
57
|
set_trace_and_span_context('set_user', trace, span) do |_active_trace, active_span|
|
58
58
|
# set tags once data is known consistent
|
59
59
|
active_span.set_tag('usr.id', id)
|
60
|
-
active_span.set_tag('usr.email', email)
|
61
|
-
active_span.set_tag('usr.name', name)
|
60
|
+
active_span.set_tag('usr.email', email) unless email.nil?
|
61
|
+
active_span.set_tag('usr.name', name) unless name.nil?
|
62
62
|
active_span.set_tag('usr.session_id', session_id) unless session_id.nil?
|
63
|
-
active_span.set_tag('usr.role', role)
|
64
|
-
active_span.set_tag('usr.scope', scope)
|
63
|
+
active_span.set_tag('usr.role', role) unless role.nil?
|
64
|
+
active_span.set_tag('usr.scope', scope) unless scope.nil?
|
65
65
|
|
66
66
|
others.each do |k, v|
|
67
67
|
active_span.set_tag("usr.#{k}", v) unless v.nil?
|
@@ -81,6 +81,9 @@ module Datadog
|
|
81
81
|
|
82
82
|
private
|
83
83
|
|
84
|
+
# rubocop:disable Metrics/AbcSize
|
85
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
86
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
84
87
|
def set_trace_and_span_context(method, trace = nil, span = nil)
|
85
88
|
if (appsec_context = Datadog::AppSec.active_context)
|
86
89
|
trace = appsec_context.trace
|
@@ -88,11 +91,11 @@ module Datadog
|
|
88
91
|
end
|
89
92
|
|
90
93
|
trace ||= Datadog::Tracing.active_trace
|
91
|
-
span ||= trace
|
94
|
+
span ||= trace&.active_span || Datadog::Tracing.active_span
|
92
95
|
|
93
96
|
unless trace && span
|
94
97
|
Datadog.logger.debug(
|
95
|
-
"Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}"\
|
98
|
+
"Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}" \
|
96
99
|
' to track this events'
|
97
100
|
)
|
98
101
|
return
|
@@ -102,6 +105,9 @@ module Datadog
|
|
102
105
|
|
103
106
|
yield(trace, span)
|
104
107
|
end
|
108
|
+
# rubocop:enable Metrics/AbcSize
|
109
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
110
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
105
111
|
end
|
106
112
|
end
|
107
113
|
end
|
@@ -69,7 +69,7 @@ module Datadog
|
|
69
69
|
def set_value(key, value, metadata: nil, context: ::OpenTelemetry::Context.current)
|
70
70
|
# Delegate to the context to set the value because an active trace is not guaranteed
|
71
71
|
# set_values handles this logic
|
72
|
-
context.set_values({
|
72
|
+
context.set_values({::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY) => {key => value}})
|
73
73
|
end
|
74
74
|
|
75
75
|
# Returns a new context with value at key removed
|
@@ -81,7 +81,7 @@ module Datadog
|
|
81
81
|
def remove_value(key, context: ::OpenTelemetry::Context.current)
|
82
82
|
# Delegate to the context to remove the value because an active trace is not guaranteed
|
83
83
|
# set_values handles this logic
|
84
|
-
context.set_values({
|
84
|
+
context.set_values({Context::BAGGAGE_REMOVE_KEY => key})
|
85
85
|
end
|
86
86
|
::OpenTelemetry::Baggage.singleton_class.prepend(self)
|
87
87
|
end
|
@@ -50,7 +50,8 @@ module Datadog
|
|
50
50
|
@trace.otel_value(key)
|
51
51
|
end
|
52
52
|
|
53
|
-
alias
|
53
|
+
# `alias` performed to match {::OpenTelemetry::Context} aliasing upstream
|
54
|
+
alias [] value # rubocop:disable Style/Alias
|
54
55
|
|
55
56
|
# Returns a new Context where entries contains the newly added key and value
|
56
57
|
#
|
@@ -80,8 +81,8 @@ module Datadog
|
|
80
81
|
)
|
81
82
|
end
|
82
83
|
|
83
|
-
existing_values = @trace
|
84
|
-
existing_baggage = @trace
|
84
|
+
existing_values = @trace&.otel_values || {}
|
85
|
+
existing_baggage = @trace&.baggage || {}
|
85
86
|
|
86
87
|
# Retrieve the baggage removal sentinel and remove it from the values hash
|
87
88
|
existing_baggage.delete(values[BAGGAGE_REMOVE_KEY]) if values.key?(BAGGAGE_REMOVE_KEY)
|
@@ -89,10 +90,10 @@ module Datadog
|
|
89
90
|
# If the values hash contains a BAGGAGE_KEY, merge its contents with existing baggage
|
90
91
|
# Otherwise, keep the existing baggage unchanged
|
91
92
|
new_baggage = if values.key?(::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY))
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
existing_baggage.merge(values[::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY)])
|
94
|
+
else
|
95
|
+
existing_baggage
|
96
|
+
end
|
96
97
|
|
97
98
|
::OpenTelemetry::Context.new(existing_values.merge(values), trace: trace, baggage: new_baggage)
|
98
99
|
end
|
@@ -125,7 +126,7 @@ module Datadog
|
|
125
126
|
previous_trace = Tracing.active_trace
|
126
127
|
continue_trace!(context)
|
127
128
|
|
128
|
-
stack.push(previous_trace
|
129
|
+
stack.push(previous_trace&.otel_context || ::OpenTelemetry::Context::ROOT)
|
129
130
|
stack.size
|
130
131
|
end
|
131
132
|
|
@@ -168,7 +169,7 @@ module Datadog
|
|
168
169
|
|
169
170
|
def continue_trace!(context, &block)
|
170
171
|
call_context = Tracing.send(:tracer).send(:call_context)
|
171
|
-
if context
|
172
|
+
if context&.trace
|
172
173
|
call_context.activate!(context.ensure_trace, &block)
|
173
174
|
else
|
174
175
|
call_context.activate!(nil)
|
@@ -54,10 +54,10 @@ module Datadog
|
|
54
54
|
tracestate = Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_tracestate, digest)
|
55
55
|
else
|
56
56
|
trace_flags = if Tracing::Sampling::PrioritySampler.sampled?(digest.trace_sampling_priority)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
::OpenTelemetry::Trace::TraceFlags::SAMPLED
|
58
|
+
else
|
59
|
+
::OpenTelemetry::Trace::TraceFlags::DEFAULT
|
60
|
+
end
|
61
61
|
tracestate = ::OpenTelemetry::Trace::Tracestate::DEFAULT
|
62
62
|
end
|
63
63
|
|
@@ -120,7 +120,7 @@ module Datadog
|
|
120
120
|
# Some special attributes can override Datadog Span fields
|
121
121
|
def span_arguments(span, attributes)
|
122
122
|
if attributes.key?('analytics.event') && (analytics_event = attributes['analytics.event']).respond_to?(:casecmp)
|
123
|
-
attributes[Tracing::Metadata::Ext::Analytics::TAG_SAMPLE_RATE] = analytics_event.casecmp('true') == 0 ? 1 : 0
|
123
|
+
attributes[Tracing::Metadata::Ext::Analytics::TAG_SAMPLE_RATE] = (analytics_event.casecmp('true') == 0) ? 1 : 0
|
124
124
|
end
|
125
125
|
|
126
126
|
if attributes.key?('http.response.status_code')
|
@@ -129,15 +129,15 @@ module Datadog
|
|
129
129
|
|
130
130
|
attributes[Tracing::Metadata::Ext::TAG_KIND] = span.kind || 'internal'
|
131
131
|
|
132
|
-
kwargs = {
|
132
|
+
kwargs = {start_time: ns_to_time(span.start_timestamp)}
|
133
133
|
|
134
134
|
name = if attributes.key?('operation.name')
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
135
|
+
attributes['operation.name']
|
136
|
+
elsif (rich_name = Datadog::OpenTelemetry::Trace::Span.enrich_name(span.kind, attributes))
|
137
|
+
rich_name.downcase
|
138
|
+
else
|
139
|
+
span.kind
|
140
|
+
end
|
141
141
|
|
142
142
|
kwargs[:resource] = attributes.key?('resource.name') ? attributes['resource.name'] : span.name
|
143
143
|
kwargs[:service] = attributes['service.name'] if attributes.key?('service.name')
|
@@ -38,8 +38,8 @@ module Datadog
|
|
38
38
|
res
|
39
39
|
end
|
40
40
|
|
41
|
-
# `alias` performed to match {OpenTelemetry::SDK::Trace::Span} aliasing upstream
|
42
|
-
alias []= set_attribute
|
41
|
+
# `alias` performed to match {::OpenTelemetry::SDK::Trace::Span} aliasing upstream
|
42
|
+
alias []= set_attribute # rubocop:disable Style/Alias
|
43
43
|
|
44
44
|
# Attributes are equivalent to span tags and metrics.
|
45
45
|
def add_attributes(attributes)
|
@@ -72,24 +72,24 @@ module Datadog
|
|
72
72
|
return 'http.client.request' if kind == :client
|
73
73
|
end
|
74
74
|
|
75
|
-
return "#{attrs[
|
75
|
+
return "#{attrs["db.system"]}.query" if attrs.key?('db.system') && kind == :client
|
76
76
|
|
77
77
|
if (attrs.key?('messaging.system') || attrs.key?('messaging.operation')) &&
|
78
78
|
[:consumer, :producer, :server, :client].include?(kind)
|
79
79
|
|
80
|
-
return "#{attrs[
|
80
|
+
return "#{attrs["messaging.system"]}.#{attrs["messaging.operation"]}"
|
81
81
|
end
|
82
82
|
|
83
83
|
if attrs.key?('rpc.system')
|
84
84
|
if attrs['rpc.system'] == 'aws-api' && kind == :client
|
85
85
|
service = attrs['rpc.service']
|
86
|
-
return "aws.#{service ||
|
86
|
+
return "aws.#{service || "client"}.request"
|
87
87
|
end
|
88
88
|
|
89
89
|
if kind == :client
|
90
|
-
return "#{attrs[
|
90
|
+
return "#{attrs["rpc.system"]}.client.request"
|
91
91
|
elsif kind == :server
|
92
|
-
return "#{attrs[
|
92
|
+
return "#{attrs["rpc.system"]}.server.request"
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
@@ -99,7 +99,7 @@ module Datadog
|
|
99
99
|
return "#{provider}.#{name}.invoke"
|
100
100
|
end
|
101
101
|
|
102
|
-
return "#{attrs[
|
102
|
+
return "#{attrs["faas.trigger"]}.invoke" if attrs.key?('faas.trigger') && kind == :server
|
103
103
|
|
104
104
|
return 'graphql.server.request' if attrs.key?('graphql.operation.type')
|
105
105
|
|
@@ -119,6 +119,7 @@ module Datadog
|
|
119
119
|
|
120
120
|
private
|
121
121
|
|
122
|
+
# rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
122
123
|
def datadog_set_attribute(key)
|
123
124
|
# Return if attributes are currently disabled by OpenTelemetry.
|
124
125
|
return unless defined?(@attributes) && @attributes
|
@@ -149,9 +150,11 @@ module Datadog
|
|
149
150
|
end
|
150
151
|
end
|
151
152
|
end
|
153
|
+
# rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
152
154
|
|
153
155
|
# Some special attributes can override Datadog Span fields beyond tags and metrics.
|
154
156
|
# @return [Boolean] true if the key is a Datadog Span override attribute, false otherwise
|
157
|
+
# rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
155
158
|
def override_datadog_values(span, key, value)
|
156
159
|
span.name = value if key == 'operation.name'
|
157
160
|
span.resource = value if key == 'resource.name'
|
@@ -161,15 +164,16 @@ module Datadog
|
|
161
164
|
if key == 'analytics.event' && value.respond_to?(:casecmp)
|
162
165
|
Datadog::Tracing::Analytics.set_sample_rate(
|
163
166
|
span,
|
164
|
-
value.casecmp('true') == 0 ? 1 : 0
|
167
|
+
(value.casecmp('true') == 0) ? 1 : 0
|
165
168
|
)
|
166
169
|
end
|
167
170
|
|
168
171
|
span.set_tag('http.status_code', value) if key == 'http.response.status_code'
|
169
172
|
end
|
173
|
+
# rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
170
174
|
|
171
175
|
DATADOG_SPAN_ATTRIBUTE_OVERRIDES = ['analytics.event', 'operation.name', 'resource.name', 'service.name',
|
172
|
-
|
176
|
+
'span.type', 'http.response.status_code'].freeze
|
173
177
|
|
174
178
|
::OpenTelemetry::SDK::Trace::Span.prepend(self)
|
175
179
|
end
|
@@ -15,10 +15,10 @@ module Datadog
|
|
15
15
|
# @return [TraceOperation]
|
16
16
|
def start_trace_copy(trace, parent_span: nil)
|
17
17
|
digest = if parent_span
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
digest_with_parent_span(trace, parent_span)
|
19
|
+
else
|
20
|
+
trace.to_digest
|
21
|
+
end
|
22
22
|
|
23
23
|
# Create a new TraceOperation, attached to the current Datadog Tracer.
|
24
24
|
Datadog::Tracing.continue_trace!(digest)
|
data/lib/datadog/profiling.rb
CHANGED
@@ -121,15 +121,13 @@ module Datadog
|
|
121
121
|
end
|
122
122
|
|
123
123
|
private_class_method def self.try_loading_native_library
|
124
|
-
|
125
|
-
require_relative 'profiling/load_native_extension'
|
124
|
+
require_relative 'profiling/load_native_extension'
|
126
125
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
end
|
126
|
+
success =
|
127
|
+
defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
|
128
|
+
[success, nil]
|
129
|
+
rescue StandardError, LoadError => e
|
130
|
+
[false, e]
|
133
131
|
end
|
134
132
|
|
135
133
|
# All requires for the profiler should be directly added here; and everything should be loaded eagerly.
|
@@ -16,7 +16,7 @@ module Datadog
|
|
16
16
|
def set_measured(span_op, value = true)
|
17
17
|
return if span_op.nil?
|
18
18
|
|
19
|
-
value = value == true || value == 1 ? 1 : 0
|
19
|
+
value = (value == true || value == 1) ? 1 : 0
|
20
20
|
span_op.set_metric(Metadata::Ext::Analytics::TAG_MEASURED, value)
|
21
21
|
end
|
22
22
|
end
|
@@ -54,7 +54,7 @@ module Datadog
|
|
54
54
|
@buffer_accepted_lengths += trace.length
|
55
55
|
|
56
56
|
@buffer_spans += trace.length
|
57
|
-
rescue
|
57
|
+
rescue => e
|
58
58
|
Datadog.logger.debug(
|
59
59
|
"Failed to measure queue accept. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
60
60
|
)
|
@@ -64,7 +64,7 @@ module Datadog
|
|
64
64
|
@buffer_dropped += 1
|
65
65
|
|
66
66
|
@buffer_spans -= trace.length
|
67
|
-
rescue
|
67
|
+
rescue => e
|
68
68
|
Datadog.logger.debug(
|
69
69
|
"Failed to measure queue drop. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
70
70
|
)
|
@@ -89,7 +89,7 @@ module Datadog
|
|
89
89
|
@buffer_accepted_lengths = 0
|
90
90
|
@buffer_dropped = 0
|
91
91
|
@buffer_spans = 0
|
92
|
-
rescue
|
92
|
+
rescue => e
|
93
93
|
Datadog.logger.debug(
|
94
94
|
"Failed to measure queue. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
95
95
|
)
|
@@ -121,9 +121,9 @@ module Datadog
|
|
121
121
|
# TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
|
122
122
|
# TODO Making such a change is potentially breaking for users manually configuring the tracer.
|
123
123
|
TraceBuffer = if Core::Environment::Ext::RUBY_ENGINE == 'ruby'
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
124
|
+
CRubyTraceBuffer
|
125
|
+
else
|
126
|
+
ThreadSafeTraceBuffer
|
127
|
+
end
|
128
128
|
end
|
129
129
|
end
|
@@ -24,13 +24,11 @@ module Datadog
|
|
24
24
|
def call(tracing_header_tags)
|
25
25
|
# Modify the remote configuration value that it matches the
|
26
26
|
# environment variable it configures.
|
27
|
-
|
28
|
-
|
29
|
-
"#{hash['header']}:#{hash['tag_name']}"
|
30
|
-
end
|
27
|
+
tracing_header_tags&.map! do |hash|
|
28
|
+
"#{hash["header"]}:#{hash["tag_name"]}"
|
31
29
|
end
|
32
30
|
|
33
|
-
super
|
31
|
+
super
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
@@ -80,7 +78,7 @@ module Datadog
|
|
80
78
|
tracing_sampling_rules = tracing_sampling_rules.to_json
|
81
79
|
end
|
82
80
|
|
83
|
-
super
|
81
|
+
super
|
84
82
|
Datadog.send(:components).reconfigure_live_sampler
|
85
83
|
end
|
86
84
|
|