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
@@ -26,7 +26,8 @@ module Datadog
|
|
26
26
|
:last_flush_finish_at,
|
27
27
|
:created_at,
|
28
28
|
:internal_metadata,
|
29
|
-
:info_json
|
29
|
+
:info_json,
|
30
|
+
:sequence_tracker
|
30
31
|
|
31
32
|
public
|
32
33
|
|
@@ -37,7 +38,8 @@ module Datadog
|
|
37
38
|
code_provenance_collector:,
|
38
39
|
internal_metadata:,
|
39
40
|
minimum_duration_seconds: PROFILE_DURATION_THRESHOLD_SECONDS,
|
40
|
-
time_provider: Time
|
41
|
+
time_provider: Time,
|
42
|
+
sequence_tracker: Datadog::Profiling::SequenceTracker
|
41
43
|
)
|
42
44
|
@pprof_recorder = pprof_recorder
|
43
45
|
@worker = worker
|
@@ -50,6 +52,7 @@ module Datadog
|
|
50
52
|
# NOTE: At the time of this comment collected info does not change over time so we'll hardcode
|
51
53
|
# it on startup to prevent serializing the same info on every flush.
|
52
54
|
@info_json = JSON.generate(info_collector.info).freeze
|
55
|
+
@sequence_tracker = sequence_tracker
|
53
56
|
end
|
54
57
|
|
55
58
|
def flush
|
@@ -73,7 +76,10 @@ module Datadog
|
|
73
76
|
encoded_profile: encoded_profile,
|
74
77
|
code_provenance_file_name: Datadog::Profiling::Ext::Transport::HTTP::CODE_PROVENANCE_FILENAME,
|
75
78
|
code_provenance_data: uncompressed_code_provenance,
|
76
|
-
tags_as_array: Datadog::Profiling::TagBuilder.call(
|
79
|
+
tags_as_array: Datadog::Profiling::TagBuilder.call(
|
80
|
+
settings: Datadog.configuration,
|
81
|
+
profile_seq: sequence_tracker.get_next,
|
82
|
+
).to_a,
|
77
83
|
internal_metadata: internal_metadata.merge(
|
78
84
|
{
|
79
85
|
worker_stats: worker_stats,
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../core/utils/forking'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Profiling
|
7
|
+
# Used to generate the `profile_seq` tag, which effectively counts how many profiles we've attempted to report
|
8
|
+
# from a given runtime-id.
|
9
|
+
#
|
10
|
+
# Note that the above implies a few things:
|
11
|
+
# 1. The sequence number only gets incremented when we decide to report a profile and create a `Flush` for it
|
12
|
+
# 2. The `SequenceTracker` must live across profiler reconfigurations and resets, since no matter how many
|
13
|
+
# profiler instances get created due to reconfiguration, the runtime-id is still the same, so the sequence number
|
14
|
+
# should be kept and not restarted from 0
|
15
|
+
# 3. The `SequenceTracker` must be reset after a fork, since the runtime-id will change, and we want to start
|
16
|
+
# counting from 0 again
|
17
|
+
#
|
18
|
+
# This is why this module is implemented as a singleton that we reuse, not as an instance that we recreate.
|
19
|
+
#
|
20
|
+
# Note that this module is not thread-safe, so it's up to the callers to make sure
|
21
|
+
# it's only used by a single thread at a time (which is what the `Profiling::Exporter`)
|
22
|
+
# is doing.
|
23
|
+
module SequenceTracker
|
24
|
+
class << self
|
25
|
+
include Core::Utils::Forking
|
26
|
+
|
27
|
+
def get_next
|
28
|
+
reset! unless defined?(@sequence_number)
|
29
|
+
after_fork! { reset! }
|
30
|
+
|
31
|
+
next_seq = @sequence_number
|
32
|
+
@sequence_number += 1
|
33
|
+
next_seq
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def reset!
|
39
|
+
@sequence_number = 0
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -12,10 +12,12 @@ module Datadog
|
|
12
12
|
def self.call(
|
13
13
|
settings:,
|
14
14
|
# Other metadata
|
15
|
+
profile_seq:,
|
15
16
|
profiler_version: Core::Environment::Identity.gem_datadog_version
|
16
17
|
)
|
17
18
|
hash = Core::TagBuilder.tags(settings).merge(
|
18
19
|
FORM_FIELD_TAG_PROFILER_VERSION => profiler_version,
|
20
|
+
'profile_seq' => profile_seq.to_s,
|
19
21
|
)
|
20
22
|
Core::Utils.encode_tags(hash)
|
21
23
|
end
|
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.
|
@@ -157,6 +155,7 @@ module Datadog
|
|
157
155
|
require_relative 'profiling/native_extension'
|
158
156
|
require_relative 'profiling/tag_builder'
|
159
157
|
require_relative 'profiling/http_transport'
|
158
|
+
require_relative 'profiling/sequence_tracker'
|
160
159
|
|
161
160
|
replace_noop_allocation_count
|
162
161
|
|
@@ -5,8 +5,17 @@
|
|
5
5
|
#
|
6
6
|
# This file's path is private. Do not reference this file.
|
7
7
|
#
|
8
|
+
|
9
|
+
module Datadog
|
10
|
+
# This module handles conditional loading of single step auto-instrumentation,
|
11
|
+
# which enables Datadog tracing and profiling features when available.
|
12
|
+
module SingleStepInstrument
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
8
16
|
begin
|
9
17
|
require_relative 'auto_instrument'
|
18
|
+
Datadog::SingleStepInstrument::LOADED = true
|
10
19
|
rescue StandardError, LoadError => e
|
11
20
|
warn "Single step instrumentation failed: #{e.class}:#{e.message}\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
12
21
|
end
|
@@ -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
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
11
11
|
ENV_ENABLED = 'DD_TRACE_ENABLED'
|
12
12
|
ENV_OTEL_TRACES_EXPORTER = 'OTEL_TRACES_EXPORTER'
|
13
13
|
ENV_HEADER_TAGS = 'DD_TRACE_HEADER_TAGS'
|
14
|
+
ENV_BAGGAGE_TAG_KEYS = 'DD_TRACE_BAGGAGE_TAG_KEYS'
|
14
15
|
ENV_TRACE_ID_128_BIT_GENERATION_ENABLED = 'DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED'
|
15
16
|
ENV_NATIVE_SPAN_EVENTS = 'DD_TRACE_NATIVE_SPAN_EVENTS'
|
16
17
|
|
@@ -47,8 +48,8 @@ module Datadog
|
|
47
48
|
PROPAGATION_STYLE_BAGGAGE = 'baggage'
|
48
49
|
|
49
50
|
PROPAGATION_STYLE_SUPPORTED = [PROPAGATION_STYLE_DATADOG, PROPAGATION_STYLE_B3_MULTI_HEADER,
|
50
|
-
|
51
|
-
|
51
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_TRACE_CONTEXT,
|
52
|
+
PROPAGATION_STYLE_BAGGAGE].freeze
|
52
53
|
|
53
54
|
# Sets both extract and inject propagation style tho the provided value.
|
54
55
|
# Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
|
@@ -170,6 +170,23 @@ module Datadog
|
|
170
170
|
o.setter { |header_tags, _| Configuration::HTTP::HeaderTags.new(header_tags) }
|
171
171
|
end
|
172
172
|
|
173
|
+
# Comma-separated list of baggage keys that should be converted to span tags.
|
174
|
+
#
|
175
|
+
# Baggage keys matching the exact, case-sensitive names in this list will be converted
|
176
|
+
# to span tags with the prefix "baggage.".
|
177
|
+
#
|
178
|
+
# Special values:
|
179
|
+
# * Empty string ("") disables baggage tag conversion
|
180
|
+
# * Wildcard ("*") converts all baggage keys to span tags
|
181
|
+
#
|
182
|
+
# @default `DD_TRACE_BAGGAGE_TAG_KEYS` environment variable, otherwise `"user.id,session.id,account.id"`
|
183
|
+
# @return [Array<String>, Symbol, nil] processed baggage tag keys configuration
|
184
|
+
option :baggage_tag_keys do |o|
|
185
|
+
o.env Configuration::Ext::ENV_BAGGAGE_TAG_KEYS
|
186
|
+
o.type :array
|
187
|
+
o.default ['user.id', 'session.id', 'account.id']
|
188
|
+
end
|
189
|
+
|
173
190
|
# Enable 128 bit trace id generation.
|
174
191
|
#
|
175
192
|
# @default `DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED` environment variable, otherwise `true`
|
@@ -53,7 +53,7 @@ module Datadog
|
|
53
53
|
|
54
54
|
# Creates a copy of the context, when forked.
|
55
55
|
def fork_clone
|
56
|
-
forked_trace = @active_trace
|
56
|
+
forked_trace = @active_trace&.fork_clone
|
57
57
|
self.class.new(trace: forked_trace)
|
58
58
|
end
|
59
59
|
|
@@ -61,7 +61,7 @@ module Datadog
|
|
61
61
|
|
62
62
|
def set_active_trace!(trace)
|
63
63
|
# Don't retain finished traces
|
64
|
-
@active_trace = trace && !trace.finished? ? trace : nil
|
64
|
+
@active_trace = (trace && !trace.finished?) ? trace : nil
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -42,7 +42,7 @@ module Datadog
|
|
42
42
|
|
43
43
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
44
44
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_CONTROLLER)
|
45
|
-
rescue
|
45
|
+
rescue => e
|
46
46
|
Datadog.logger.error(e.message)
|
47
47
|
Datadog::Core::Telemetry::Logger.report(e)
|
48
48
|
end
|
@@ -87,7 +87,7 @@ module Datadog
|
|
87
87
|
ensure
|
88
88
|
span.finish
|
89
89
|
end
|
90
|
-
rescue
|
90
|
+
rescue => e
|
91
91
|
Datadog.logger.error(e.message)
|
92
92
|
Datadog::Core::Telemetry::Logger.report(e)
|
93
93
|
end
|
@@ -115,7 +115,7 @@ module Datadog
|
|
115
115
|
begin
|
116
116
|
# process and catch request exceptions
|
117
117
|
Instrumentation.start_processing(payload)
|
118
|
-
result = super
|
118
|
+
result = super
|
119
119
|
status = datadog_response_status
|
120
120
|
payload[:status] = status unless status.nil?
|
121
121
|
result
|
@@ -146,7 +146,7 @@ module Datadog
|
|
146
146
|
when Array
|
147
147
|
# Likely a Rack response array: first element is the status.
|
148
148
|
status = response.first
|
149
|
-
status.class <= Integer ? status : nil
|
149
|
+
(status.class <= Integer) ? status : nil
|
150
150
|
end
|
151
151
|
end
|
152
152
|
end
|
@@ -29,10 +29,10 @@ module Datadog
|
|
29
29
|
|
30
30
|
def set_common_tags(span, payload)
|
31
31
|
adapter_name = if payload[:adapter].is_a?(Class)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
payload[:adapter].name
|
33
|
+
else
|
34
|
+
payload[:adapter].class.name
|
35
|
+
end
|
36
36
|
span.set_tag(Ext::TAG_ADAPTER, adapter_name)
|
37
37
|
|
38
38
|
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
@@ -44,10 +44,10 @@ module Datadog
|
|
44
44
|
span.set_tag(Ext::TAG_JOB_EXECUTIONS, job.executions) if job.respond_to?(:executions)
|
45
45
|
|
46
46
|
job_scheduled_at = if job.respond_to?(:scheduled_at)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
job.scheduled_at
|
48
|
+
elsif job.respond_to?(:enqueued_at)
|
49
|
+
job.enqueued_at
|
50
|
+
end
|
51
51
|
span.set_tag(Ext::TAG_JOB_SCHEDULED_AT, Time.at(job_scheduled_at)) if job_scheduled_at
|
52
52
|
end
|
53
53
|
end
|
@@ -18,9 +18,9 @@ module Datadog
|
|
18
18
|
|
19
19
|
def supported?
|
20
20
|
Gem.loaded_specs['active_model_serializers'] \
|
21
|
-
&& (
|
21
|
+
&& (
|
22
22
|
Gem.loaded_specs['active_model_serializers'].version >= Gem::Version.new('0.9') \
|
23
|
-
&& Gem.loaded_specs['active_model_serializers'].version < Gem::Version.new('0.10')
|
23
|
+
&& Gem.loaded_specs['active_model_serializers'].version < Gem::Version.new('0.10')
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
@@ -36,7 +36,7 @@ module Datadog
|
|
36
36
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_SERIALIZE)
|
37
37
|
|
38
38
|
set_common_tags(span, payload)
|
39
|
-
rescue
|
39
|
+
rescue => e
|
40
40
|
Datadog.logger.debug(e.message)
|
41
41
|
end
|
42
42
|
end
|
@@ -18,8 +18,7 @@ module Datadog
|
|
18
18
|
register_as :active_model_serializers
|
19
19
|
|
20
20
|
def self.version
|
21
|
-
Gem.loaded_specs['active_model_serializers']
|
22
|
-
&& Gem.loaded_specs['active_model_serializers'].version
|
21
|
+
Gem.loaded_specs['active_model_serializers']&.version
|
23
22
|
end
|
24
23
|
|
25
24
|
def self.loaded?
|
@@ -75,7 +75,7 @@ module Datadog
|
|
75
75
|
# hence provide a succinct summary for the error logging.
|
76
76
|
#
|
77
77
|
Datadog.logger.error(
|
78
|
-
'Failed to resolve ActiveRecord database configuration. '\
|
78
|
+
'Failed to resolve ActiveRecord database configuration. ' \
|
79
79
|
"Cause: #{e.class.name} Source: #{Array(e.backtrace).first}"
|
80
80
|
)
|
81
81
|
Core::Telemetry::Logger.report(e, description: 'Failed to resolve ActiveRecord database configuration')
|
@@ -48,7 +48,7 @@ module Datadog
|
|
48
48
|
|
49
49
|
span.set_tag(Ext::TAG_INSTANTIATION_CLASS_NAME, payload.fetch(:class_name))
|
50
50
|
span.set_tag(Ext::TAG_INSTANTIATION_RECORD_COUNT, payload.fetch(:record_count))
|
51
|
-
rescue
|
51
|
+
rescue => e
|
52
52
|
Datadog.logger.error(e.message)
|
53
53
|
Datadog::Core::Telemetry::Logger.report(e)
|
54
54
|
end
|
@@ -35,10 +35,10 @@ module Datadog
|
|
35
35
|
settings = Datadog.configuration.tracing[:active_record, config]
|
36
36
|
adapter_name = Contrib::Utils::Database.normalize_vendor(config[:adapter])
|
37
37
|
service_name = if settings.service_name != Contrib::Utils::Database::VENDOR_DEFAULT
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
settings.service_name
|
39
|
+
else
|
40
|
+
adapter_name
|
41
|
+
end
|
42
42
|
|
43
43
|
span.name = "#{adapter_name}.query"
|
44
44
|
span.service = service_name
|
@@ -68,7 +68,7 @@ module Datadog
|
|
68
68
|
span.set_tag(Ext::TAG_DB_CACHED, cached) if cached
|
69
69
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, config[:host]) if config[:host]
|
70
70
|
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, config[:port]) if config[:port]
|
71
|
-
rescue
|
71
|
+
rescue => e
|
72
72
|
Datadog.logger.error(e.message)
|
73
73
|
Datadog::Core::Telemetry::Logger.report(e)
|
74
74
|
end
|
@@ -39,17 +39,17 @@ module Datadog
|
|
39
39
|
return default_connection_config if connection.nil? && connection_id.nil?
|
40
40
|
|
41
41
|
conn = if !connection.nil?
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
42
|
+
# Since Rails 6.0, the connection object
|
43
|
+
# is directly available.
|
44
|
+
connection
|
45
|
+
else
|
46
|
+
# For Rails < 6.0, only the `connection_id`
|
47
|
+
# is available. We have to find the connection
|
48
|
+
# object from it.
|
49
|
+
connection_from_id(connection_id)
|
50
|
+
end
|
51
51
|
|
52
|
-
if conn
|
52
|
+
if conn&.instance_variable_defined?(:@config)
|
53
53
|
conn.instance_variable_get(:@config)
|
54
54
|
else
|
55
55
|
EMPTY_CONFIG
|
@@ -102,14 +102,14 @@ module Datadog
|
|
102
102
|
return @default_connection_config if instance_variable_defined?(:@default_connection_config)
|
103
103
|
|
104
104
|
current_connection_name = if ::ActiveRecord::Base.respond_to?(:connection_specification_name)
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
105
|
+
::ActiveRecord::Base.connection_specification_name
|
106
|
+
else
|
107
|
+
::ActiveRecord::Base
|
108
|
+
end
|
109
109
|
|
110
110
|
connection_pool = ::ActiveRecord::Base.connection_handler.retrieve_connection_pool(current_connection_name)
|
111
111
|
connection_pool.nil? ? EMPTY_CONFIG : (@default_connection_config = db_config(connection_pool))
|
112
|
-
rescue
|
112
|
+
rescue
|
113
113
|
EMPTY_CONFIG
|
114
114
|
end
|
115
115
|
|