datadog 2.12.0 → 2.22.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 +348 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- 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/ddsketch.c +106 -0
- data/ext/libdatadog_api/extconf.rb +5 -3
- data/ext/libdatadog_api/init.c +18 -0
- data/ext/libdatadog_api/library_config.c +172 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/process_discovery.c +118 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +15 -5
- 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/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +75 -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 +44 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +601 -74
- data/lib/datadog/appsec/assets/waf_rules/strict.json +48 -75
- data/lib/datadog/appsec/autoload.rb +2 -2
- data/lib/datadog/appsec/component.rb +46 -71
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +162 -30
- data/lib/datadog/appsec/context.rb +30 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +35 -18
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +62 -11
- 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 +103 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -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 +11 -12
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +10 -10
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -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 +53 -31
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -44
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +35 -11
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +65 -47
- 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/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +12 -12
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -22
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- 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 +91 -147
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +23 -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/collector.rb +23 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- 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 +43 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +176 -0
- data/lib/datadog/appsec/security_engine/result.rb +44 -9
- data/lib/datadog/appsec/security_engine/runner.rb +44 -21
- data/lib/datadog/appsec/security_event.rb +37 -0
- 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/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -15
- data/lib/datadog/auto_instrument_base.rb +2 -1
- 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 +8 -50
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +69 -37
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +4 -1
- data/lib/datadog/core/configuration/option.rb +117 -77
- data/lib/datadog/core/configuration/option_definition.rb +5 -14
- data/lib/datadog/core/configuration/options.rb +15 -13
- data/lib/datadog/core/configuration/settings.rb +117 -48
- data/lib/datadog/core/configuration/stable_config.rb +32 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +337 -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/ddsketch.rb +21 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- 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 -8
- data/lib/datadog/core/environment/git.rb +3 -2
- 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 +4 -4
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +29 -29
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/pin.rb +4 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +61 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +44 -35
- data/lib/datadog/core/remote/component.rb +12 -17
- 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 +25 -89
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/ext.rb +0 -1
- 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 +92 -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_endpoints_loaded.rb +30 -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 +18 -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 +75 -0
- data/lib/datadog/core/transport/response.rb +4 -1
- 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 +25 -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 +10 -0
- data/lib/datadog/di/boot.rb +43 -0
- data/lib/datadog/di/component.rb +21 -2
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/el/compiler.rb +164 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +25 -0
- data/lib/datadog/di/instrumenter.rb +132 -20
- data/lib/datadog/di/probe.rb +35 -15
- data/lib/datadog/di/probe_builder.rb +39 -1
- 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_manager.rb +3 -2
- data/lib/datadog/di/probe_notification_builder.rb +61 -67
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +5 -5
- data/lib/datadog/di/serializer.rb +160 -8
- 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 +15 -77
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -34
- 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 +196 -0
- data/lib/datadog/kit/appsec/events.rb +17 -4
- data/lib/datadog/kit/identity.rb +22 -12
- 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 +21 -6
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- 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 +15 -11
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- 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 +2 -15
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +8 -62
- 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/exec.rb +2 -2
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +13 -10
- 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/component.rb +21 -29
- data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
- data/lib/datadog/tracing/configuration/ext.rb +8 -4
- data/lib/datadog/tracing/configuration/settings.rb +50 -12
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- 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 +19 -4
- 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/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 +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +17 -8
- 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/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 +12 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +8 -2
- 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/component.rb +2 -2
- 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/configuration/settings.rb +1 -1
- 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 +6 -7
- 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 +7 -5
- data/lib/datadog/tracing/contrib/ext.rb +4 -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 +9 -5
- 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/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- 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 +84 -48
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +15 -9
- 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/distributed/propagation.rb +3 -0
- 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/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +11 -15
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -19
- 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 +11 -19
- 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/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/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +9 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +2 -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 +23 -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 +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +12 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -66
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +12 -11
- 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 +4 -3
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- 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 +8 -6
- 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/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/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- 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/span_attribute_schema.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/support.rb +28 -0
- 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/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +2 -2
- data/lib/datadog/tracing/distributed/baggage.rb +196 -0
- data/lib/datadog/tracing/distributed/datadog.rb +8 -7
- 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 +28 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- 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/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +13 -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/tagging.rb +4 -4
- data/lib/datadog/tracing/metadata.rb +2 -0
- 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/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- 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 +11 -2
- data/lib/datadog/tracing/span_event.rb +11 -11
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +76 -26
- data/lib/datadog/tracing/sync_writer.rb +5 -4
- data/lib/datadog/tracing/trace_digest.rb +29 -24
- data/lib/datadog/tracing/trace_operation.rb +121 -97
- data/lib/datadog/tracing/trace_segment.rb +8 -6
- data/lib/datadog/tracing/tracer.rb +90 -43
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +6 -5
- data/lib/datadog/tracing/transport/http/traces.rb +15 -43
- data/lib/datadog/tracing/transport/http.rb +13 -75
- 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/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +31 -14
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +16 -16
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing/writer.rb +4 -4
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +8 -2
- metadata +115 -24
- data/ext/libdatadog_api/macos_development.md +0 -26
- 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
|
@@ -20,34 +20,16 @@ module Datadog
|
|
|
20
20
|
[:agent, agent_settings.url].freeze
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
status, result =
|
|
23
|
+
status, result = self.class._native_validate_exporter(exporter_configuration)
|
|
24
24
|
|
|
25
25
|
raise(ArgumentError, "Failed to initialize transport: #{result}") if status == :error
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def export(flush)
|
|
29
|
-
status, result =
|
|
30
|
-
exporter_configuration
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# why "timespec"?
|
|
34
|
-
# libdatadog represents time using POSIX's struct timespec, see
|
|
35
|
-
# https://www.gnu.org/software/libc/manual/html_node/Time-Types.html
|
|
36
|
-
# aka it represents the seconds part separate from the nanoseconds part
|
|
37
|
-
start_timespec_seconds: flush.start.tv_sec,
|
|
38
|
-
start_timespec_nanoseconds: flush.start.tv_nsec,
|
|
39
|
-
finish_timespec_seconds: flush.finish.tv_sec,
|
|
40
|
-
finish_timespec_nanoseconds: flush.finish.tv_nsec,
|
|
41
|
-
|
|
42
|
-
pprof_file_name: flush.pprof_file_name,
|
|
43
|
-
pprof_data: flush.pprof_data,
|
|
44
|
-
code_provenance_file_name: flush.code_provenance_file_name,
|
|
45
|
-
code_provenance_data: flush.code_provenance_data,
|
|
46
|
-
|
|
47
|
-
tags_as_array: flush.tags_as_array,
|
|
48
|
-
internal_metadata_json: flush.internal_metadata_json,
|
|
49
|
-
|
|
50
|
-
info_json: flush.info_json
|
|
29
|
+
status, result = self.class._native_do_export(
|
|
30
|
+
exporter_configuration,
|
|
31
|
+
@upload_timeout_milliseconds,
|
|
32
|
+
flush
|
|
51
33
|
)
|
|
52
34
|
|
|
53
35
|
if status == :ok
|
|
@@ -55,7 +37,7 @@ module Datadog
|
|
|
55
37
|
Datadog.logger.debug("Successfully reported profiling data")
|
|
56
38
|
true
|
|
57
39
|
else
|
|
58
|
-
Datadog.logger.
|
|
40
|
+
Datadog.logger.warn(
|
|
59
41
|
"Failed to report profiling data (#{config_without_api_key}): " \
|
|
60
42
|
"server returned unexpected HTTP #{result} status code"
|
|
61
43
|
)
|
|
@@ -65,7 +47,7 @@ module Datadog
|
|
|
65
47
|
false
|
|
66
48
|
end
|
|
67
49
|
else
|
|
68
|
-
Datadog.logger.
|
|
50
|
+
Datadog.logger.warn("Failed to report profiling data (#{config_without_api_key}): #{result}")
|
|
69
51
|
Datadog::Core::Telemetry::Logger.error("Failed to report profiling data")
|
|
70
52
|
false
|
|
71
53
|
end
|
|
@@ -74,43 +56,7 @@ module Datadog
|
|
|
74
56
|
private
|
|
75
57
|
|
|
76
58
|
def agentless?(site, api_key)
|
|
77
|
-
site && api_key &&
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def validate_exporter(exporter_configuration)
|
|
81
|
-
self.class._native_validate_exporter(exporter_configuration)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def do_export(
|
|
85
|
-
exporter_configuration:,
|
|
86
|
-
upload_timeout_milliseconds:,
|
|
87
|
-
start_timespec_seconds:,
|
|
88
|
-
start_timespec_nanoseconds:,
|
|
89
|
-
finish_timespec_seconds:,
|
|
90
|
-
finish_timespec_nanoseconds:,
|
|
91
|
-
pprof_file_name:,
|
|
92
|
-
pprof_data:,
|
|
93
|
-
code_provenance_file_name:,
|
|
94
|
-
code_provenance_data:,
|
|
95
|
-
tags_as_array:,
|
|
96
|
-
internal_metadata_json:,
|
|
97
|
-
info_json:
|
|
98
|
-
)
|
|
99
|
-
self.class._native_do_export(
|
|
100
|
-
exporter_configuration,
|
|
101
|
-
upload_timeout_milliseconds,
|
|
102
|
-
start_timespec_seconds,
|
|
103
|
-
start_timespec_nanoseconds,
|
|
104
|
-
finish_timespec_seconds,
|
|
105
|
-
finish_timespec_nanoseconds,
|
|
106
|
-
pprof_file_name,
|
|
107
|
-
pprof_data,
|
|
108
|
-
code_provenance_file_name,
|
|
109
|
-
code_provenance_data,
|
|
110
|
-
tags_as_array,
|
|
111
|
-
internal_metadata_json,
|
|
112
|
-
info_json,
|
|
113
|
-
)
|
|
59
|
+
site && api_key && %w[1 true].include?(ENV[Profiling::Ext::ENV_AGENTLESS] || '') # rubocop:disable CustomCops/EnvUsageCop
|
|
114
60
|
end
|
|
115
61
|
|
|
116
62
|
def config_without_api_key
|
|
@@ -50,6 +50,8 @@ module Datadog
|
|
|
50
50
|
"Detected issue with profiler (#{failed_component} component), stopping profiling. " \
|
|
51
51
|
"See previous log messages for details."
|
|
52
52
|
)
|
|
53
|
+
Datadog::Core::Telemetry::Logger
|
|
54
|
+
.error("Detected issue with profiler (#{failed_component} component), stopping profiling")
|
|
53
55
|
|
|
54
56
|
# We explicitly not stop the crash tracker in this situation, under the assumption that, if a component failed,
|
|
55
57
|
# we're operating in a degraded state and crash tracking may still be helpful.
|
|
@@ -37,6 +37,7 @@ module Datadog
|
|
|
37
37
|
@exporter = exporter
|
|
38
38
|
@transport = transport
|
|
39
39
|
@profiler_failed = false
|
|
40
|
+
@stop_requested = false
|
|
40
41
|
|
|
41
42
|
# Workers::Async::Thread settings
|
|
42
43
|
self.fork_policy = fork_policy
|
|
@@ -67,6 +68,7 @@ module Datadog
|
|
|
67
68
|
"Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
68
69
|
)
|
|
69
70
|
on_failure_proc&.call
|
|
71
|
+
Datadog::Core::Telemetry::Logger.report(e, description: "Profiling::Scheduler thread error")
|
|
70
72
|
raise
|
|
71
73
|
ensure
|
|
72
74
|
Datadog.logger.debug("#flush was interrupted or failed before it could complete") if interrupted
|
|
@@ -88,7 +90,7 @@ module Datadog
|
|
|
88
90
|
end
|
|
89
91
|
|
|
90
92
|
def work_pending?
|
|
91
|
-
!profiler_failed && exporter.can_flush?
|
|
93
|
+
!profiler_failed && exporter.can_flush? && (run_loop? || !stop_requested?)
|
|
92
94
|
end
|
|
93
95
|
|
|
94
96
|
def reset_after_fork
|
|
@@ -132,14 +134,20 @@ module Datadog
|
|
|
132
134
|
begin
|
|
133
135
|
transport.export(flush)
|
|
134
136
|
rescue => e
|
|
135
|
-
Datadog.logger.
|
|
137
|
+
Datadog.logger.warn(
|
|
136
138
|
"Unable to report profile. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
137
139
|
)
|
|
138
140
|
Datadog::Core::Telemetry::Logger.report(e, description: "Unable to report profile")
|
|
139
141
|
end
|
|
140
142
|
|
|
143
|
+
@stop_requested = !run_loop?
|
|
144
|
+
|
|
141
145
|
true
|
|
142
146
|
end
|
|
147
|
+
|
|
148
|
+
def stop_requested?
|
|
149
|
+
@stop_requested
|
|
150
|
+
end
|
|
143
151
|
end
|
|
144
152
|
end
|
|
145
153
|
end
|
|
@@ -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
|
|
@@ -23,7 +23,7 @@ module Datadog
|
|
|
23
23
|
# This isn't something we expect to happen normally, but because it would break the assumptions of the
|
|
24
24
|
# C-level mutexes (that there is a single serializer thread), we add it here as an extra safeguard against it
|
|
25
25
|
# accidentally happening.
|
|
26
|
-
@
|
|
26
|
+
@no_concurrent_serialize_mutex = Mutex.new
|
|
27
27
|
|
|
28
28
|
self.class._native_initialize(
|
|
29
29
|
self_instance: self,
|
|
@@ -60,31 +60,31 @@ module Datadog
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def serialize
|
|
63
|
-
status, result = @
|
|
63
|
+
status, result = @no_concurrent_serialize_mutex.synchronize { self.class._native_serialize(self) }
|
|
64
64
|
|
|
65
65
|
if status == :ok
|
|
66
|
-
start, finish,
|
|
66
|
+
start, finish, encoded_profile, profile_stats = result
|
|
67
67
|
|
|
68
68
|
Datadog.logger.debug { "Encoded profile covering #{start.iso8601} to #{finish.iso8601}" }
|
|
69
69
|
|
|
70
|
-
[start, finish,
|
|
70
|
+
[start, finish, encoded_profile, profile_stats]
|
|
71
71
|
else
|
|
72
72
|
error_message = result
|
|
73
73
|
|
|
74
|
-
Datadog.logger.
|
|
75
|
-
Datadog::Core::Telemetry::Logger.error("Failed to serialize profiling data")
|
|
74
|
+
Datadog.logger.warn("Failed to serialize profiling data: #{error_message}")
|
|
75
|
+
Datadog::Core::Telemetry::Logger.error("Failed to serialize profiling data (#{error_message})")
|
|
76
76
|
|
|
77
77
|
nil
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def serialize!
|
|
82
|
-
status, result = @
|
|
82
|
+
status, result = @no_concurrent_serialize_mutex.synchronize { self.class._native_serialize(self) }
|
|
83
83
|
|
|
84
84
|
if status == :ok
|
|
85
|
-
_start, _finish,
|
|
85
|
+
_start, _finish, encoded_profile = result
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
encoded_profile
|
|
88
88
|
else
|
|
89
89
|
error_message = result
|
|
90
90
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "../core/tag_builder"
|
|
3
4
|
require_relative "../core/utils"
|
|
4
|
-
require_relative "../core/environment/git"
|
|
5
5
|
|
|
6
6
|
module Datadog
|
|
7
7
|
module Profiling
|
|
@@ -11,49 +11,15 @@ module Datadog
|
|
|
11
11
|
|
|
12
12
|
def self.call(
|
|
13
13
|
settings:,
|
|
14
|
-
# Unified service tagging
|
|
15
|
-
env: settings.env,
|
|
16
|
-
service: settings.service,
|
|
17
|
-
version: settings.version,
|
|
18
14
|
# Other metadata
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
pid: Process.pid.to_s,
|
|
22
|
-
# TODO: If profiling is extracted and its version diverges from the datadog gem, this is inaccurate.
|
|
23
|
-
# Update if this ever occurs.
|
|
24
|
-
profiler_version: Core::Environment::Identity.gem_datadog_version,
|
|
25
|
-
runtime_engine: Core::Environment::Identity.lang_engine,
|
|
26
|
-
runtime_id: Core::Environment::Identity.id,
|
|
27
|
-
runtime_platform: Core::Environment::Identity.lang_platform,
|
|
28
|
-
runtime_version: Core::Environment::Identity.lang_version,
|
|
29
|
-
git_repository_url: Core::Environment::Git.git_repository_url,
|
|
30
|
-
git_commit_sha: Core::Environment::Git.git_commit_sha,
|
|
31
|
-
# User-provided tags
|
|
32
|
-
user_tags: settings.tags
|
|
15
|
+
profile_seq:,
|
|
16
|
+
profiler_version: Core::Environment::Identity.gem_datadog_version
|
|
33
17
|
)
|
|
34
|
-
|
|
35
|
-
# When changing or adding these, make sure they are kept in sync with
|
|
36
|
-
# https://docs.google.com/spreadsheets/d/1LOGMf4c4Avbtn36uZ2SWvhIGKRPLM1BoWkUP4JYj7hA/ (Datadog internal link)
|
|
37
|
-
FORM_FIELD_TAG_HOST => host,
|
|
38
|
-
FORM_FIELD_TAG_LANGUAGE => language,
|
|
39
|
-
FORM_FIELD_TAG_PID => pid,
|
|
18
|
+
hash = Core::TagBuilder.tags(settings).merge(
|
|
40
19
|
FORM_FIELD_TAG_PROFILER_VERSION => profiler_version,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
FORM_FIELD_TAG_RUNTIME_PLATFORM => runtime_platform,
|
|
45
|
-
FORM_FIELD_TAG_RUNTIME_VERSION => runtime_version,
|
|
46
|
-
}
|
|
47
|
-
tags[FORM_FIELD_TAG_ENV] = env if env
|
|
48
|
-
tags[FORM_FIELD_TAG_SERVICE] = service if service
|
|
49
|
-
tags[FORM_FIELD_TAG_VERSION] = version if version
|
|
50
|
-
tags[TAG_GIT_REPOSITORY_URL] = git_repository_url if git_repository_url
|
|
51
|
-
tags[TAG_GIT_COMMIT_SHA] = git_commit_sha if git_commit_sha
|
|
52
|
-
|
|
53
|
-
# Make sure everything is an utf-8 string, to avoid encoding issues in native code/libddprof/further downstream
|
|
54
|
-
user_tags.merge(tags).map do |key, value|
|
|
55
|
-
[Datadog::Core::Utils.utf8_encode(key), Datadog::Core::Utils.utf8_encode(value)]
|
|
56
|
-
end.to_h
|
|
20
|
+
'profile_seq' => profile_seq.to_s,
|
|
21
|
+
)
|
|
22
|
+
Core::Utils.encode_tags(hash)
|
|
57
23
|
end
|
|
58
24
|
end
|
|
59
25
|
end
|
|
@@ -25,9 +25,9 @@ module Datadog
|
|
|
25
25
|
private
|
|
26
26
|
|
|
27
27
|
def set_rubyopt!
|
|
28
|
-
existing_rubyopt = ENV["RUBYOPT"]
|
|
28
|
+
existing_rubyopt = ENV["RUBYOPT"] # rubocop:disable CustomCops/EnvUsageCop
|
|
29
29
|
|
|
30
|
-
ENV["RUBYOPT"] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(" ")}" : rubyopts.join(" ")
|
|
30
|
+
ENV["RUBYOPT"] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(" ")}" : rubyopts.join(" ") # rubocop:disable CustomCops/EnvUsageCop
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
# If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
|
|
@@ -19,6 +19,7 @@ module Datadog
|
|
|
19
19
|
"Profiler extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
|
20
20
|
"Location: #{Array(e.backtrace).first}"
|
|
21
21
|
end
|
|
22
|
+
Datadog::Core::Telemetry::Logger.report(e, description: "Profiler extensions unavailable")
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
|
|
@@ -33,6 +34,7 @@ module Datadog
|
|
|
33
34
|
"Error during post-fork hooks. Cause: #{e.class.name} #{e.message} " \
|
|
34
35
|
"Location: #{Array(e.backtrace).first}"
|
|
35
36
|
end
|
|
37
|
+
Datadog::Core::Telemetry::Logger.report(e, description: "Error during post-fork hooks")
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
40
|
end
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -78,8 +78,11 @@ module Datadog
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
private_class_method def self.replace_noop_allocation_count
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
class << self
|
|
82
|
+
remove_method :allocation_count
|
|
83
|
+
def allocation_count
|
|
84
|
+
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
85
|
+
end
|
|
83
86
|
end
|
|
84
87
|
end
|
|
85
88
|
|
|
@@ -118,15 +121,13 @@ module Datadog
|
|
|
118
121
|
end
|
|
119
122
|
|
|
120
123
|
private_class_method def self.try_loading_native_library
|
|
121
|
-
|
|
122
|
-
require_relative 'profiling/load_native_extension'
|
|
124
|
+
require_relative 'profiling/load_native_extension'
|
|
123
125
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
end
|
|
126
|
+
success =
|
|
127
|
+
defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
|
|
128
|
+
[success, nil]
|
|
129
|
+
rescue StandardError, LoadError => e
|
|
130
|
+
[false, e]
|
|
130
131
|
end
|
|
131
132
|
|
|
132
133
|
# All requires for the profiler should be directly added here; and everything should be loaded eagerly.
|
|
@@ -146,6 +147,7 @@ module Datadog
|
|
|
146
147
|
require_relative 'profiling/collectors/thread_context'
|
|
147
148
|
require_relative 'profiling/stack_recorder'
|
|
148
149
|
require_relative 'profiling/exporter'
|
|
150
|
+
require_relative 'profiling/encoded_profile'
|
|
149
151
|
require_relative 'profiling/flush'
|
|
150
152
|
require_relative 'profiling/scheduler'
|
|
151
153
|
require_relative 'profiling/tasks/setup'
|
|
@@ -153,6 +155,7 @@ module Datadog
|
|
|
153
155
|
require_relative 'profiling/native_extension'
|
|
154
156
|
require_relative 'profiling/tag_builder'
|
|
155
157
|
require_relative 'profiling/http_transport'
|
|
158
|
+
require_relative 'profiling/sequence_tracker'
|
|
156
159
|
|
|
157
160
|
replace_noop_allocation_count
|
|
158
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
|
|
@@ -6,21 +6,13 @@ 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
|
|
12
13
|
# Tracing component
|
|
13
14
|
module Component
|
|
14
|
-
|
|
15
|
-
module InstanceMethods
|
|
16
|
-
# Hot-swaps with a new sampler.
|
|
17
|
-
# This operation acquires the Components lock to ensure
|
|
18
|
-
# there is no concurrent modification of the sampler.
|
|
19
|
-
def reconfigure_live_sampler
|
|
20
|
-
sampler = self.class.build_sampler(Datadog.configuration)
|
|
21
|
-
Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
|
|
22
|
-
end
|
|
23
|
-
end
|
|
15
|
+
module_function
|
|
24
16
|
|
|
25
17
|
def build_tracer(settings, agent_settings, logger:)
|
|
26
18
|
# If a custom tracer has been provided, use it instead.
|
|
@@ -74,18 +66,11 @@ module Datadog
|
|
|
74
66
|
return sampler
|
|
75
67
|
end
|
|
76
68
|
|
|
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
|
|
69
|
+
# APM Disablement means that we don't want to send traces that only contains APM data.
|
|
70
|
+
# Other products can then put the sampling priority to MANUAL_KEEP if they want to keep traces.
|
|
71
|
+
# (e.g.: AppSec will MANUAL_KEEP traces with AppSec events) and clients will be billed only for those traces.
|
|
72
|
+
# But to keep the service alive on the backend side, we need to send one trace per minute.
|
|
73
|
+
post_sampler = build_rate_limit_post_sampler(seconds: 60) unless settings.apm.tracing.enabled
|
|
89
74
|
|
|
90
75
|
# Sampling rules are provided
|
|
91
76
|
if (rules = settings.tracing.sampling.rules)
|
|
@@ -162,11 +147,6 @@ module Datadog
|
|
|
162
147
|
Tracing::Sampling::Span::Sampler.new(rules || [])
|
|
163
148
|
end
|
|
164
149
|
|
|
165
|
-
# Configure non-privileged components.
|
|
166
|
-
def configure_tracing(settings)
|
|
167
|
-
Datadog::Tracing::Contrib::Component.configure(settings)
|
|
168
|
-
end
|
|
169
|
-
|
|
170
150
|
# Sampler wrapper component, to allow for hot-swapping
|
|
171
151
|
# the sampler instance used by the tracer.
|
|
172
152
|
# Swapping samplers happens during Dynamic Configuration.
|
|
@@ -188,8 +168,7 @@ module Datadog
|
|
|
188
168
|
end
|
|
189
169
|
end
|
|
190
170
|
|
|
191
|
-
private
|
|
192
|
-
|
|
171
|
+
# @api private
|
|
193
172
|
def build_tracer_tags(settings)
|
|
194
173
|
settings.tags.dup.tap do |tags|
|
|
195
174
|
tags[Core::Environment::Ext::TAG_ENV] = settings.env unless settings.env.nil?
|
|
@@ -197,11 +176,23 @@ module Datadog
|
|
|
197
176
|
end
|
|
198
177
|
end
|
|
199
178
|
|
|
179
|
+
# Build a post-sampler that limits the rate of traces to one per `seconds`.
|
|
180
|
+
# E.g.: `build_rate_limit_post_sampler(seconds: 60)` will limit the rate to one trace per minute.
|
|
181
|
+
# @api private
|
|
182
|
+
def build_rate_limit_post_sampler(seconds:)
|
|
183
|
+
Tracing::Sampling::RuleSampler.new(
|
|
184
|
+
rate_limiter: Datadog::Core::TokenBucket.new(1.0 / seconds, 1.0),
|
|
185
|
+
default_sample_rate: 1.0
|
|
186
|
+
)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# @api private
|
|
200
190
|
def build_test_mode_trace_flush(settings)
|
|
201
191
|
# If context flush behavior is provided, use it instead.
|
|
202
192
|
settings.tracing.test_mode.trace_flush || build_trace_flush(settings)
|
|
203
193
|
end
|
|
204
194
|
|
|
195
|
+
# @api private
|
|
205
196
|
def build_test_mode_sampler
|
|
206
197
|
# Do not sample any spans for tests; all must be preserved.
|
|
207
198
|
# Set priority sampler to ensure the agent doesn't drop any traces.
|
|
@@ -211,6 +202,7 @@ module Datadog
|
|
|
211
202
|
)
|
|
212
203
|
end
|
|
213
204
|
|
|
205
|
+
# @api private
|
|
214
206
|
def build_test_mode_writer(settings, agent_settings)
|
|
215
207
|
writer_options = settings.tracing.test_mode.writer_options || {}
|
|
216
208
|
|
|
@@ -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
|
|
|
@@ -43,7 +41,7 @@ module Datadog
|
|
|
43
41
|
# Ensures sampler is rebuilt and new configuration is applied
|
|
44
42
|
def call(tracing_sampling_rate)
|
|
45
43
|
super
|
|
46
|
-
Datadog.send(:components).
|
|
44
|
+
Datadog.send(:components).reconfigure_sampler
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
protected
|
|
@@ -80,8 +78,8 @@ module Datadog
|
|
|
80
78
|
tracing_sampling_rules = tracing_sampling_rules.to_json
|
|
81
79
|
end
|
|
82
80
|
|
|
83
|
-
super
|
|
84
|
-
Datadog.send(:components).
|
|
81
|
+
super
|
|
82
|
+
Datadog.send(:components).reconfigure_sampler
|
|
85
83
|
end
|
|
86
84
|
|
|
87
85
|
protected
|
|
@@ -9,9 +9,10 @@ module Datadog
|
|
|
9
9
|
# e.g. Env vars, default values, enums, etc...
|
|
10
10
|
module Ext
|
|
11
11
|
ENV_ENABLED = 'DD_TRACE_ENABLED'
|
|
12
|
-
ENV_OTEL_TRACES_EXPORTER = 'OTEL_TRACES_EXPORTER'
|
|
13
12
|
ENV_HEADER_TAGS = 'DD_TRACE_HEADER_TAGS'
|
|
13
|
+
ENV_BAGGAGE_TAG_KEYS = 'DD_TRACE_BAGGAGE_TAG_KEYS'
|
|
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,14 +42,18 @@ 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
|
-
|
|
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
|
|
49
55
|
# `DD_TRACE_PROPAGATION_STYLE_EXTRACT`.
|
|
50
56
|
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'
|
|
51
|
-
ENV_OTEL_PROPAGATION_STYLE = 'OTEL_PROPAGATORS'
|
|
52
57
|
|
|
53
58
|
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'
|
|
54
59
|
|
|
@@ -74,7 +79,6 @@ module Datadog
|
|
|
74
79
|
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'
|
|
75
80
|
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'
|
|
76
81
|
ENV_RULES = 'DD_TRACE_SAMPLING_RULES'
|
|
77
|
-
ENV_OTEL_TRACES_SAMPLER = 'OTEL_TRACES_SAMPLER'
|
|
78
82
|
OTEL_TRACES_SAMPLER_ARG = 'OTEL_TRACES_SAMPLER_ARG'
|
|
79
83
|
|
|
80
84
|
# @public_api
|