datadog 2.12.1 → 2.19.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 +243 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
- data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +10 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
- data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
- data/ext/libdatadog_api/crashtracker.c +11 -12
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/extconf.rb +2 -2
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +164 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +112 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +71 -0
- data/lib/datadog/appsec/api_security/sampler.rb +59 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +257 -85
- data/lib/datadog/appsec/assets/waf_rules/strict.json +10 -78
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +46 -61
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +153 -30
- data/lib/datadog/appsec/context.rb +7 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +42 -30
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
- data/lib/datadog/appsec/remote.rb +31 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +194 -0
- data/lib/datadog/appsec/security_engine/runner.rb +13 -14
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -8
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -46
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +48 -31
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +4 -0
- data/lib/datadog/core/configuration/option.rb +81 -45
- data/lib/datadog/core/configuration/option_definition.rb +4 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +109 -44
- data/lib/datadog/core/configuration/stable_config.rb +22 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +20 -21
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
- data/lib/datadog/core/process_discovery.rb +36 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +40 -32
- data/lib/datadog/core/remote/component.rb +6 -9
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +14 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +22 -57
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/tag_builder.rb +56 -0
- data/lib/datadog/core/telemetry/component.rb +81 -52
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -472
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +5 -4
- data/lib/datadog/core/telemetry/logging.rb +11 -5
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +90 -24
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +19 -17
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http.rb +39 -2
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/utils.rb +7 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/component.rb +0 -2
- data/lib/datadog/di/instrumenter.rb +48 -5
- data/lib/datadog/di/probe_notification_builder.rb +38 -43
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +2 -0
- data/lib/datadog/di/serializer.rb +10 -2
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +18 -35
- data/lib/datadog/di/transport/http.rb +14 -62
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -33
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events/v2.rb +195 -0
- data/lib/datadog/kit/appsec/events.rb +12 -0
- data/lib/datadog/kit/identity.rb +5 -1
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +44 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +8 -9
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext.rb +0 -14
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +7 -61
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +7 -41
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +7 -2
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -12
- data/lib/datadog/tracing/configuration/ext.rb +7 -1
- data/lib/datadog/tracing/configuration/settings.rb +18 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +11 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +61 -40
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +10 -1
- data/lib/datadog/tracing/span_event.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +68 -16
- data/lib/datadog/tracing/sync_writer.rb +2 -3
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +55 -27
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +51 -7
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -41
- data/lib/datadog/tracing/transport/http.rb +11 -44
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +26 -9
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
- data/lib/datadog/tracing/writer.rb +2 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +8 -2
- metadata +88 -23
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -6,6 +6,7 @@ require_relative 'sync_writer'
|
|
6
6
|
require_relative 'sampling/span/rule_parser'
|
7
7
|
require_relative 'sampling/span/sampler'
|
8
8
|
require_relative 'diagnostics/environment_logger'
|
9
|
+
require_relative 'contrib/component'
|
9
10
|
|
10
11
|
module Datadog
|
11
12
|
module Tracing
|
@@ -74,18 +75,11 @@ module Datadog
|
|
74
75
|
return sampler
|
75
76
|
end
|
76
77
|
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
|
82
|
-
if settings.appsec.standalone.enabled
|
83
|
-
post_sampler = Tracing::Sampling::RuleSampler.new(
|
84
|
-
[Tracing::Sampling::SimpleRule.new(sample_rate: 1.0)],
|
85
|
-
rate_limiter: Datadog::Core::TokenBucket.new(1.0 / 60, 1.0),
|
86
|
-
default_sample_rate: 1.0 / 60
|
87
|
-
)
|
88
|
-
end
|
78
|
+
# APM Disablement means that we don't want to send traces that only contains APM data.
|
79
|
+
# Other products can then put the sampling priority to MANUAL_KEEP if they want to keep traces.
|
80
|
+
# (e.g.: AppSec will MANUAL_KEEP traces with AppSec events) and clients will be billed only for those traces.
|
81
|
+
# But to keep the service alive on the backend side, we need to send one trace per minute.
|
82
|
+
post_sampler = build_rate_limit_post_sampler(seconds: 60) unless settings.apm.tracing.enabled
|
89
83
|
|
90
84
|
# Sampling rules are provided
|
91
85
|
if (rules = settings.tracing.sampling.rules)
|
@@ -197,6 +191,15 @@ module Datadog
|
|
197
191
|
end
|
198
192
|
end
|
199
193
|
|
194
|
+
# Build a post-sampler that limits the rate of traces to one per `seconds`.
|
195
|
+
# E.g.: `build_rate_limit_post_sampler(seconds: 60)` will limit the rate to one trace per minute.
|
196
|
+
def build_rate_limit_post_sampler(seconds:)
|
197
|
+
Tracing::Sampling::RuleSampler.new(
|
198
|
+
rate_limiter: Datadog::Core::TokenBucket.new(1.0 / seconds, 1.0),
|
199
|
+
default_sample_rate: 1.0
|
200
|
+
)
|
201
|
+
end
|
202
|
+
|
200
203
|
def build_test_mode_trace_flush(settings)
|
201
204
|
# If context flush behavior is provided, use it instead.
|
202
205
|
settings.tracing.test_mode.trace_flush || build_trace_flush(settings)
|
@@ -12,6 +12,7 @@ module Datadog
|
|
12
12
|
ENV_OTEL_TRACES_EXPORTER = 'OTEL_TRACES_EXPORTER'
|
13
13
|
ENV_HEADER_TAGS = 'DD_TRACE_HEADER_TAGS'
|
14
14
|
ENV_TRACE_ID_128_BIT_GENERATION_ENABLED = 'DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED'
|
15
|
+
ENV_NATIVE_SPAN_EVENTS = 'DD_TRACE_NATIVE_SPAN_EVENTS'
|
15
16
|
|
16
17
|
# @public_api
|
17
18
|
module SpanAttributeSchema
|
@@ -41,8 +42,13 @@ module Datadog
|
|
41
42
|
# W3C Trace Context
|
42
43
|
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'
|
43
44
|
|
45
|
+
# W3C Baggage
|
46
|
+
# @see https://www.w3.org/TR/baggage/
|
47
|
+
PROPAGATION_STYLE_BAGGAGE = 'baggage'
|
48
|
+
|
44
49
|
PROPAGATION_STYLE_SUPPORTED = [PROPAGATION_STYLE_DATADOG, PROPAGATION_STYLE_B3_MULTI_HEADER,
|
45
|
-
PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_TRACE_CONTEXT
|
50
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_TRACE_CONTEXT,
|
51
|
+
PROPAGATION_STYLE_BAGGAGE].freeze
|
46
52
|
|
47
53
|
# Sets both extract and inject propagation style tho the provided value.
|
48
54
|
# Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
|
@@ -42,7 +42,7 @@ module Datadog
|
|
42
42
|
#
|
43
43
|
# The tracer will try to find distributed headers in the order they are present in the list provided to this option.
|
44
44
|
# The first format to have valid data present will be used.
|
45
|
-
#
|
45
|
+
# Baggage style is a special case, as it will always be extracted in addition if present.
|
46
46
|
# @default `DD_TRACE_PROPAGATION_STYLE_EXTRACT` environment variable (comma-separated list),
|
47
47
|
# otherwise `['datadog','b3multi','b3']`.
|
48
48
|
# @return [Array<String>]
|
@@ -53,6 +53,7 @@ module Datadog
|
|
53
53
|
[
|
54
54
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG,
|
55
55
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT,
|
56
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE,
|
56
57
|
]
|
57
58
|
)
|
58
59
|
o.after_set do |styles|
|
@@ -74,6 +75,7 @@ module Datadog
|
|
74
75
|
o.default [
|
75
76
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG,
|
76
77
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT,
|
78
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE,
|
77
79
|
]
|
78
80
|
o.after_set do |styles|
|
79
81
|
# Make values case-insensitive
|
@@ -186,7 +188,7 @@ module Datadog
|
|
186
188
|
# It is not supported by our backend yet. Do not enable it.
|
187
189
|
option :trace_id_128_bit_logging_enabled do |o|
|
188
190
|
o.env Tracing::Configuration::Ext::Correlation::ENV_TRACE_ID_128_BIT_LOGGING_ENABLED
|
189
|
-
o.default
|
191
|
+
o.default true
|
190
192
|
o.type :bool
|
191
193
|
end
|
192
194
|
|
@@ -249,6 +251,20 @@ module Datadog
|
|
249
251
|
o.type :bool
|
250
252
|
end
|
251
253
|
|
254
|
+
# Forces the tracer to always send span events with the native span events format
|
255
|
+
# regardless of the agent support. This is useful in agent-less setups.
|
256
|
+
#
|
257
|
+
# When set to `nil`, the default, the agent will be queried for
|
258
|
+
# native span events support.
|
259
|
+
#
|
260
|
+
# @default `DD_TRACE_NATIVE_SPAN_EVENTS` environment variable, otherwise `false`
|
261
|
+
# @return [Boolean,nil]
|
262
|
+
option :native_span_events do |o|
|
263
|
+
o.env Tracing::Configuration::Ext::ENV_NATIVE_SPAN_EVENTS
|
264
|
+
o.default nil
|
265
|
+
o.type :bool, nilable: true
|
266
|
+
end
|
267
|
+
|
252
268
|
# A custom sampler instance.
|
253
269
|
# The object must respect the {Datadog::Tracing::Sampling::Sampler} interface.
|
254
270
|
# @default `nil`
|
@@ -49,7 +49,7 @@ module Datadog
|
|
49
49
|
# To support multiple tracers simultaneously, each {Datadog::Tracing::FiberLocalContext}
|
50
50
|
# instance has its own fiber-local variable.
|
51
51
|
def initialize
|
52
|
-
@key = "datadog_context_#{FiberLocalContext.next_instance_id}"
|
52
|
+
@key = :"datadog_context_#{FiberLocalContext.next_instance_id}"
|
53
53
|
|
54
54
|
self.local = Context.new
|
55
55
|
end
|
@@ -68,6 +68,12 @@ module Datadog
|
|
68
68
|
|
69
69
|
span.set_tag(Ext::TAG_ROUTE_ACTION, payload.fetch(:action))
|
70
70
|
span.set_tag(Ext::TAG_ROUTE_CONTROLLER, payload.fetch(:controller))
|
71
|
+
if (runtime = payload[:view_runtime])
|
72
|
+
span.set_tag(Ext::TAG_VIEW_RUNTIME, runtime)
|
73
|
+
end
|
74
|
+
if (runtime = payload[:db_runtime])
|
75
|
+
span.set_tag(Ext::TAG_DB_RUNTIME, runtime)
|
76
|
+
end
|
71
77
|
|
72
78
|
exception = payload[:exception_object]
|
73
79
|
if exception.nil?
|
@@ -118,6 +124,15 @@ module Datadog
|
|
118
124
|
payload[:exception] = [e.class.name, e.message]
|
119
125
|
payload[:exception_object] = e
|
120
126
|
raise e
|
127
|
+
ensure
|
128
|
+
# Database and view runtime are available for controllers
|
129
|
+
# deriving from ActionController::Base.
|
130
|
+
# They are not defined on controllers deriving from
|
131
|
+
# ActionController::Metal, unless
|
132
|
+
# ActionController::Instrumentation is explicitly included
|
133
|
+
# into the controller class.
|
134
|
+
payload[:db_runtime] = db_runtime if respond_to?(:db_runtime)
|
135
|
+
payload[:view_runtime] = view_runtime if respond_to?(:view_runtime)
|
121
136
|
end
|
122
137
|
# rubocop:enable Lint/RescueException
|
123
138
|
ensure
|
@@ -9,9 +9,12 @@ module Datadog
|
|
9
9
|
module ActionDispatch
|
10
10
|
# Instrumentation for ActionDispatch components
|
11
11
|
module Instrumentation
|
12
|
+
SCRIPT_NAME_KEY = 'SCRIPT_NAME'
|
13
|
+
FORMAT_SUFFIX = '(.:format)'
|
14
|
+
|
12
15
|
module_function
|
13
16
|
|
14
|
-
def set_http_route_tags(route_spec,
|
17
|
+
def set_http_route_tags(route_spec, route_path)
|
15
18
|
return unless Tracing.enabled?
|
16
19
|
|
17
20
|
return unless route_spec
|
@@ -19,10 +22,10 @@ module Datadog
|
|
19
22
|
request_trace = Tracing.active_trace
|
20
23
|
return unless request_trace
|
21
24
|
|
22
|
-
request_trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE, route_spec
|
25
|
+
request_trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE, route_spec)
|
23
26
|
|
24
|
-
if
|
25
|
-
request_trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE_PATH,
|
27
|
+
if route_path && !route_path.empty?
|
28
|
+
request_trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE_PATH, route_path)
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
@@ -40,16 +43,17 @@ module Datadog
|
|
40
43
|
# Instrumentation for ActionDispatch::Journey::Router for Rails versions older than 7.1
|
41
44
|
module Router
|
42
45
|
def find_routes(req)
|
46
|
+
# result is an array of [match, parameters, route] tuples
|
43
47
|
result = super
|
48
|
+
result.each do |_, _, route|
|
49
|
+
next unless Instrumentation.dispatcher_route?(route)
|
44
50
|
|
45
|
-
|
46
|
-
|
51
|
+
http_route = route.path.spec.to_s
|
52
|
+
http_route.delete_suffix!(FORMAT_SUFFIX)
|
47
53
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
break
|
52
|
-
end
|
54
|
+
Instrumentation.set_http_route_tags(http_route, req.env[SCRIPT_NAME_KEY])
|
55
|
+
|
56
|
+
break
|
53
57
|
end
|
54
58
|
|
55
59
|
result
|
@@ -62,7 +66,10 @@ module Datadog
|
|
62
66
|
def find_routes(req)
|
63
67
|
super do |match, parameters, route|
|
64
68
|
if Instrumentation.dispatcher_route?(route)
|
65
|
-
|
69
|
+
http_route = route.path.spec.to_s
|
70
|
+
http_route.delete_suffix!(FORMAT_SUFFIX)
|
71
|
+
|
72
|
+
Instrumentation.set_http_route_tags(http_route, req.env[SCRIPT_NAME_KEY])
|
66
73
|
end
|
67
74
|
|
68
75
|
yield [match, parameters, route]
|
@@ -45,9 +45,15 @@ module Datadog
|
|
45
45
|
'cache_write_multi.active_support' => { resource: Ext::RESOURCE_CACHE_MSET, multi_key: true }
|
46
46
|
}.freeze
|
47
47
|
|
48
|
-
def trace?(event,
|
48
|
+
def trace?(event, payload)
|
49
49
|
return false if !Tracing.enabled? || !configuration.enabled
|
50
50
|
|
51
|
+
if (cache_store = configuration[:cache_store])
|
52
|
+
store = cache_backend(payload[:store])
|
53
|
+
|
54
|
+
return false unless cache_store.include?(store)
|
55
|
+
end
|
56
|
+
|
51
57
|
# DEV-3.0: Backwards compatibility code for the 2.x gem series.
|
52
58
|
# DEV-3.0: See documentation at {Datadog::Tracing::Contrib::ActiveSupport::Cache::Instrumentation}
|
53
59
|
# DEV-3.0: for the complete information about this backwards compatibility code.
|
@@ -62,7 +68,10 @@ module Datadog
|
|
62
68
|
end
|
63
69
|
|
64
70
|
def on_start(span, event, _id, payload)
|
65
|
-
key
|
71
|
+
# Since Rails 8, `dd_original_keys` contains the denormalized key provided by the user.
|
72
|
+
# In previous versions, the denormalized key is stored in the official `key` attribute.
|
73
|
+
# We fall back to `key`, even in Rails 8, as a defensive measure.
|
74
|
+
key = payload[:dd_original_keys] || payload[:key]
|
66
75
|
store = payload[:store]
|
67
76
|
|
68
77
|
mapping = MAPPING.fetch(event)
|
@@ -184,6 +184,39 @@ module Datadog
|
|
184
184
|
super(operation, key, polyfill_options)
|
185
185
|
end
|
186
186
|
end
|
187
|
+
|
188
|
+
# Save the original, user-supplied cache key, before it gets normalized.
|
189
|
+
#
|
190
|
+
# Normalized keys can include internal implementation detail,
|
191
|
+
# for example FileStore keys include temp directory names, which
|
192
|
+
# changes on every run, making it impossible to group by the cache key afterward.
|
193
|
+
# Also, the user is never exposed to the normalized key, and only sets/gets using the
|
194
|
+
# original key.
|
195
|
+
module PreserveOriginalKey
|
196
|
+
# Stores the original keys in the options hash, as an array of keys.
|
197
|
+
# It's important to keep all the keys for multi-key operations.
|
198
|
+
# For single-key operations, the key is stored as an array of a single element.
|
199
|
+
def normalize_key(key, options)
|
200
|
+
orig_keys = options[:dd_original_keys] || []
|
201
|
+
orig_keys << key
|
202
|
+
options[:dd_original_keys] = orig_keys
|
203
|
+
|
204
|
+
super
|
205
|
+
end
|
206
|
+
|
207
|
+
# Ensure we don't pollute the default Store instance `options` in {PreserveOriginalKey#normalize_key}.
|
208
|
+
# In most cases, `merged_options` returns a new hash,
|
209
|
+
# but we check for cases where it reuses the instance hash.
|
210
|
+
def merged_options(call_options)
|
211
|
+
ret = super
|
212
|
+
|
213
|
+
if ret.equal?(options)
|
214
|
+
ret.dup
|
215
|
+
else
|
216
|
+
ret
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
187
220
|
end
|
188
221
|
end
|
189
222
|
end
|
@@ -22,6 +22,10 @@ module Datadog
|
|
22
22
|
def patch
|
23
23
|
Events.subscribe!
|
24
24
|
|
25
|
+
if Integration.version >= Gem::Version.new('8.0.0')
|
26
|
+
::ActiveSupport::Cache::Store.prepend(Cache::Instrumentation::PreserveOriginalKey)
|
27
|
+
end
|
28
|
+
|
25
29
|
# Backfill the `:store` key in the ActiveSupport event payload for older Rails.
|
26
30
|
if Integration.version < Gem::Version.new('6.1.0')
|
27
31
|
::ActiveSupport::Cache::Store.prepend(Cache::Instrumentation::Store)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../support'
|
3
4
|
require_relative 'patcher'
|
4
5
|
|
5
6
|
module Datadog
|
@@ -34,10 +35,7 @@ module Datadog
|
|
34
35
|
# @see https://github.com/rails/rails/blob/d0dcb8fa6073a0c4d42600c15e82e3bb386b27d3/activesupport/lib/active_support/cache/redis_cache_store.rb#L4
|
35
36
|
def patch_redis_cache_store?(meth)
|
36
37
|
Gem.loaded_specs['redis'] &&
|
37
|
-
|
38
|
-
defined?(::ActiveSupport::Cache::RedisCacheStore) &&
|
39
|
-
# ... to check that we need to call `autoload?` and check if it returns `nil`, meaning it's loaded.
|
40
|
-
::ActiveSupport::Cache.autoload?(:RedisCacheStore).nil? &&
|
38
|
+
Support.fully_loaded?(::ActiveSupport::Cache, :RedisCacheStore) &&
|
41
39
|
::ActiveSupport::Cache::RedisCacheStore.instance_methods(false).include?(meth)
|
42
40
|
end
|
43
41
|
|
@@ -49,6 +49,19 @@ module Datadog
|
|
49
49
|
o.default true
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
# Specifies which cache stores to trace.
|
54
|
+
# Accepts a list, with the same format as `config.cache_store`
|
55
|
+
# (e.g. `memory_store`, `file_store`, or symbols like `:file_store`).
|
56
|
+
# Defaults to `nil`, which traces all cache stores.
|
57
|
+
# @see https://github.com/rails/rails/blob/b7520a13adda46c0cc5f3fb4a4c1726633af2bba/guides/source/caching_with_rails.md?plain=1#L576-L582
|
58
|
+
option :cache_store do |o|
|
59
|
+
o.type :array, nilable: true
|
60
|
+
o.default nil
|
61
|
+
o.after_set do |stores|
|
62
|
+
stores&.map!(&:to_s) # Convert symbols to strings to match the Rails configuration format
|
63
|
+
end
|
64
|
+
end
|
52
65
|
end
|
53
66
|
end
|
54
67
|
end
|
@@ -35,6 +35,16 @@ module Datadog
|
|
35
35
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
|
36
36
|
span.name = Ext::SPAN_COMMAND
|
37
37
|
span.resource = context.safely(:resource)
|
38
|
+
|
39
|
+
# Set error on the span if the Response Status Code is in error range
|
40
|
+
if Tracing::Metadata::Ext::HTTP::ERROR_RANGE.cover?(context.safely(:status_code))
|
41
|
+
# At this point we do not have any additional diagnostics
|
42
|
+
# besides the HTTP status code which is recorded in the span tags
|
43
|
+
# later in this method.
|
44
|
+
# Just set the span as errored.
|
45
|
+
span.set_error(nil)
|
46
|
+
end
|
47
|
+
|
38
48
|
aws_service = span.resource.split('.')[0]
|
39
49
|
span.set_tag(Ext::TAG_AWS_SERVICE, aws_service)
|
40
50
|
params = context.safely(:params)
|
@@ -110,11 +110,10 @@ module Datadog
|
|
110
110
|
|
111
111
|
datadog_tag_request
|
112
112
|
|
113
|
-
if
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
if datadog_configuration[:distributed_tracing]
|
113
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
114
|
+
global_config: datadog_configuration,
|
115
|
+
trace: datadog_trace
|
116
|
+
)
|
118
117
|
@datadog_original_headers ||= {}
|
119
118
|
Contrib::HTTP.inject(datadog_trace, @datadog_original_headers)
|
120
119
|
self.headers = @datadog_original_headers
|
@@ -30,10 +30,12 @@ module Datadog
|
|
30
30
|
trace = Tracing.active_trace
|
31
31
|
datum[:datadog_span] = span
|
32
32
|
annotate!(span, datum)
|
33
|
-
if
|
34
|
-
|
33
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
34
|
+
global_config: @options,
|
35
|
+
trace: trace
|
36
|
+
)
|
37
|
+
propagate!(trace, span, datum)
|
35
38
|
end
|
36
|
-
propagate!(trace, span, datum) if distributed_tracing?
|
37
39
|
|
38
40
|
span
|
39
41
|
end
|
@@ -48,6 +48,7 @@ module Datadog
|
|
48
48
|
|
49
49
|
module Messaging
|
50
50
|
TAG_SYSTEM = 'messaging.system'
|
51
|
+
TAG_DESTINATION = 'messaging.destination'
|
51
52
|
PEER_SERVICE_SOURCES = Array[Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
52
53
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
53
54
|
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
|
@@ -29,10 +29,12 @@ module Datadog
|
|
29
29
|
|
30
30
|
Tracing.trace(Ext::SPAN_REQUEST, on_error: request_options[:on_error]) do |span, trace|
|
31
31
|
annotate!(span, env, request_options)
|
32
|
-
if
|
33
|
-
|
32
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
33
|
+
global_config: request_options,
|
34
|
+
trace: trace
|
35
|
+
)
|
36
|
+
propagate!(trace, span, env)
|
34
37
|
end
|
35
|
-
propagate!(trace, span, env) if request_options[:distributed_tracing] && Tracing.enabled?
|
36
38
|
app.call(env).on_complete { |resp| handle_response(span, resp, request_options) }
|
37
39
|
end
|
38
40
|
end
|
@@ -81,7 +81,13 @@ module Datadog
|
|
81
81
|
# Set analytics sample rate
|
82
82
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
83
83
|
|
84
|
-
|
84
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
85
|
+
pin_config: Datadog.configuration_for(self),
|
86
|
+
global_config: datadog_configuration,
|
87
|
+
trace: trace
|
88
|
+
)
|
89
|
+
GRPC.inject(trace, metadata)
|
90
|
+
end
|
85
91
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
86
92
|
rescue StandardError => e
|
87
93
|
Datadog.logger.debug("GRPC client trace failed: #{e}")
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative 'fetcher'
|
4
4
|
require_relative '../../../distributed/b3_multi'
|
5
5
|
require_relative '../../../distributed/b3_single'
|
6
|
+
require_relative '../../../distributed/propagation_policy'
|
6
7
|
require_relative '../../../distributed/datadog'
|
7
8
|
require_relative '../../../distributed/none'
|
8
9
|
require_relative '../../../distributed/propagation'
|
@@ -31,6 +32,8 @@ module Datadog
|
|
31
32
|
Tracing::Distributed::Datadog.new(fetcher: Fetcher),
|
32
33
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
|
33
34
|
Tracing::Distributed::TraceContext.new(fetcher: Fetcher),
|
35
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
36
|
+
Tracing::Distributed::Baggage.new(fetcher: Fetcher),
|
34
37
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
|
35
38
|
},
|
36
39
|
propagation_style_inject: propagation_style_inject,
|
@@ -27,21 +27,6 @@ module Datadog
|
|
27
27
|
!!(request[Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION] ||
|
28
28
|
request[Datadog::Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST])
|
29
29
|
end
|
30
|
-
|
31
|
-
def should_skip_distributed_tracing?(client_config)
|
32
|
-
if Datadog.configuration.appsec.standalone.enabled
|
33
|
-
# Skip distributed tracing so that we don't bill distributed traces in case of absence of
|
34
|
-
# upstream ASM event (_dd.p.appsec:1) and no local security event (which sets _dd.p.appsec:1 locally).
|
35
|
-
# If there is an ASM event, we still have to check if distributed tracing is enabled or not
|
36
|
-
return true unless Tracing.active_trace
|
37
|
-
|
38
|
-
return true if Tracing.active_trace.get_tag(Datadog::AppSec::Ext::TAG_DISTRIBUTED_APPSEC_EVENT) != '1'
|
39
|
-
end
|
40
|
-
|
41
|
-
return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
|
42
|
-
|
43
|
-
!Datadog.configuration.tracing[:http][:distributed_tracing]
|
44
|
-
end
|
45
30
|
end
|
46
31
|
end
|
47
32
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative 'fetcher'
|
4
4
|
require_relative '../../../distributed/propagation'
|
5
|
+
require_relative '../../../distributed/propagation_policy'
|
5
6
|
require_relative '../../../distributed/b3_multi'
|
6
7
|
require_relative '../../../distributed/b3_single'
|
7
8
|
require_relative '../../../distributed/datadog'
|
@@ -30,7 +31,9 @@ module Datadog
|
|
30
31
|
Tracing::Distributed::Datadog.new(fetcher: Fetcher),
|
31
32
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
|
32
33
|
Tracing::Distributed::TraceContext.new(fetcher: Fetcher),
|
33
|
-
Tracing::Configuration::Ext::Distributed::
|
34
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
35
|
+
Tracing::Distributed::Baggage.new(fetcher: Fetcher),
|
36
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
|
34
37
|
},
|
35
38
|
propagation_style_inject: propagation_style_inject,
|
36
39
|
propagation_style_extract: propagation_style_extract,
|
@@ -30,16 +30,16 @@ module Datadog
|
|
30
30
|
|
31
31
|
return super(req, body, &block) if Contrib::HTTP.should_skip_tracing?(req)
|
32
32
|
|
33
|
-
Tracing.trace(Ext::SPAN_REQUEST
|
33
|
+
Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
|
34
34
|
span.service = service_name(host, request_options, client_config)
|
35
35
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
|
36
36
|
span.resource = req.method
|
37
37
|
|
38
|
-
if
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
39
|
+
pin_config: client_config,
|
40
|
+
global_config: Datadog.configuration.tracing[:http],
|
41
|
+
trace: trace
|
42
|
+
)
|
43
43
|
Contrib::HTTP.inject(trace, req)
|
44
44
|
end
|
45
45
|
|
@@ -112,10 +112,6 @@ module Datadog
|
|
112
112
|
Datadog::Core::Telemetry::Logger.report(e)
|
113
113
|
end
|
114
114
|
|
115
|
-
def annotate_span_with_error!(span, error)
|
116
|
-
span.set_error(error)
|
117
|
-
end
|
118
|
-
|
119
115
|
def set_analytics_sample_rate(span, request_options)
|
120
116
|
return unless analytics_enabled?(request_options)
|
121
117
|
|
@@ -25,16 +25,16 @@ module Datadog
|
|
25
25
|
request_options = datadog_configuration(host)
|
26
26
|
client_config = Datadog.configuration_for(self)
|
27
27
|
|
28
|
-
Tracing.trace(Ext::SPAN_REQUEST
|
28
|
+
Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
|
29
29
|
begin
|
30
30
|
span.service = service_name(host, request_options, client_config)
|
31
31
|
span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
|
32
32
|
|
33
|
-
if
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
34
|
+
pin_config: client_config,
|
35
|
+
global_config: Datadog.configuration.tracing[:httpclient],
|
36
|
+
trace: trace
|
37
|
+
)
|
38
38
|
Contrib::HTTP.inject(trace, req.header)
|
39
39
|
end
|
40
40
|
|
@@ -111,10 +111,6 @@ module Datadog
|
|
111
111
|
Datadog::Core::Telemetry::Logger.report(e)
|
112
112
|
end
|
113
113
|
|
114
|
-
def annotate_span_with_error!(span, error)
|
115
|
-
span.set_error(error)
|
116
|
-
end
|
117
|
-
|
118
114
|
def datadog_configuration(host = :default)
|
119
115
|
Datadog.configuration.tracing[:httpclient, host]
|
120
116
|
end
|
@@ -123,12 +119,6 @@ module Datadog
|
|
123
119
|
Contrib::Analytics.enabled?(request_options[:analytics_enabled])
|
124
120
|
end
|
125
121
|
|
126
|
-
def should_skip_distributed_tracing?(client_config)
|
127
|
-
return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
|
128
|
-
|
129
|
-
!Datadog.configuration.tracing[:httpclient][:distributed_tracing]
|
130
|
-
end
|
131
|
-
|
132
122
|
def set_analytics_sample_rate(span, request_options)
|
133
123
|
return unless analytics_enabled?(request_options)
|
134
124
|
|