datadog 2.17.0 → 2.37.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 +686 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
- data/ext/datadog_profiling_native_extension/clock_id.h +9 -1
- data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +66 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +3 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +344 -126
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +4 -4
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +3 -2
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +18 -4
- data/ext/datadog_profiling_native_extension/collectors_stack.c +314 -91
- data/ext/datadog_profiling_native_extension/collectors_stack.h +26 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +680 -352
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +18 -5
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +65 -1
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +40 -1
- data/ext/datadog_profiling_native_extension/encoded_profile.c +2 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +48 -34
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +4 -43
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +15 -47
- data/ext/datadog_profiling_native_extension/heap_recorder.c +455 -430
- data/ext/datadog_profiling_native_extension/heap_recorder.h +16 -7
- data/ext/datadog_profiling_native_extension/http_transport.c +66 -68
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +18 -15
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -10
- data/ext/datadog_profiling_native_extension/macos_sampler_thread.h +55 -0
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +0 -13
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +73 -69
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -4
- data/ext/datadog_profiling_native_extension/profiling.c +65 -19
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +64 -59
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +20 -16
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +32 -10
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +2 -1
- data/ext/datadog_profiling_native_extension/stack_recorder.c +253 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +3 -1
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +2 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +9 -4
- data/ext/libdatadog_api/crashtracker.c +16 -15
- data/ext/libdatadog_api/crashtracker_report_exception.c +126 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +65 -1
- data/ext/libdatadog_api/datadog_ruby_common.h +40 -1
- data/ext/libdatadog_api/ddsketch.c +102 -0
- data/ext/libdatadog_api/di.c +203 -0
- data/ext/libdatadog_api/extconf.rb +21 -25
- data/ext/libdatadog_api/feature_flags.c +554 -0
- data/ext/libdatadog_api/feature_flags.h +5 -0
- data/ext/libdatadog_api/helpers.h +27 -0
- data/ext/libdatadog_api/init.c +13 -1
- data/ext/libdatadog_api/library_config.c +88 -37
- data/ext/libdatadog_api/library_config.h +6 -0
- data/ext/libdatadog_api/process_discovery.c +25 -24
- data/ext/libdatadog_extconf_helpers.rb +107 -14
- data/lib/datadog/ai_guard/api_client.rb +84 -0
- data/lib/datadog/ai_guard/autoload.rb +10 -0
- data/lib/datadog/ai_guard/component.rb +44 -0
- data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
- data/lib/datadog/ai_guard/configuration.rb +115 -0
- data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
- data/lib/datadog/ai_guard/contrib/integration.rb +37 -0
- data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
- data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +97 -0
- data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +80 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/integration.rb +41 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb +30 -0
- data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
- data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
- data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +36 -0
- data/lib/datadog/ai_guard/evaluation/request.rb +86 -0
- data/lib/datadog/ai_guard/evaluation/result.rb +45 -0
- data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
- data/lib/datadog/ai_guard/evaluation.rb +108 -0
- data/lib/datadog/ai_guard/ext.rb +29 -0
- data/lib/datadog/ai_guard.rb +181 -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 +66 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +36 -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/route_extractor.rb +104 -0
- data/lib/datadog/appsec/api_security/sampler.rb +62 -0
- data/lib/datadog/appsec/api_security.rb +14 -0
- data/lib/datadog/appsec/assets/blocked.html +10 -1
- data/lib/datadog/appsec/assets/blocked.json +1 -1
- data/lib/datadog/appsec/assets/blocked.text +3 -1
- data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
- 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/assets.rb +1 -1
- data/lib/datadog/appsec/autoload.rb +2 -2
- data/lib/datadog/appsec/component.rb +37 -64
- data/lib/datadog/appsec/compressed_json.rb +3 -3
- data/lib/datadog/appsec/configuration.rb +427 -1
- data/lib/datadog/appsec/context.rb +77 -16
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
- data/lib/datadog/appsec/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +4 -1
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
- data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
- data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +144 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +4 -2
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/patcher.rb +3 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +152 -13
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +138 -13
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +74 -24
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +4 -2
- data/lib/datadog/appsec/contrib/graphql/integration.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/buffered_input.rb +83 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +47 -13
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +40 -19
- data/lib/datadog/appsec/contrib/rack/input_peeker.rb +79 -0
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +80 -62
- data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +35 -1
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +47 -5
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +52 -26
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +29 -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/patcher.rb +3 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +167 -12
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +63 -10
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -21
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/counter_sampler.rb +25 -0
- data/lib/datadog/appsec/default_header_tags.rb +52 -0
- data/lib/datadog/appsec/event.rb +14 -47
- data/lib/datadog/appsec/ext.rb +3 -0
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +17 -1
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
- data/lib/datadog/appsec/instrumentation/gateway.rb +2 -15
- data/lib/datadog/appsec/metrics/collector.rb +47 -5
- data/lib/datadog/appsec/metrics/exporter.rb +16 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +21 -4
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +47 -0
- data/lib/datadog/appsec/metrics.rb +5 -4
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +8 -6
- data/lib/datadog/appsec/processor/rule_loader.rb +5 -6
- data/lib/datadog/appsec/remote.rb +51 -76
- data/lib/datadog/appsec/response.rb +18 -4
- data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
- data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
- data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
- data/lib/datadog/appsec/route_normalizer.rb +80 -0
- data/lib/datadog/appsec/security_engine/engine.rb +197 -0
- data/lib/datadog/appsec/security_engine/result.rb +45 -9
- data/lib/datadog/appsec/security_engine/runner.rb +44 -21
- data/lib/datadog/appsec/security_event.rb +5 -7
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +36 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec/utils/http/body.rb +38 -0
- data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +2 -1
- data/lib/datadog/appsec/utils/http/media_type.rb +32 -26
- data/lib/datadog/appsec/utils/http/url_encoded.rb +52 -0
- data/lib/datadog/appsec.rb +10 -17
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +5 -47
- data/lib/datadog/core/configuration/base.rb +17 -5
- data/lib/datadog/core/configuration/components.rb +192 -20
- data/lib/datadog/core/configuration/components_state.rb +6 -1
- data/lib/datadog/core/configuration/config_helper.rb +109 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +0 -1
- data/lib/datadog/core/configuration/option.rb +95 -65
- data/lib/datadog/core/configuration/option_definition.rb +42 -23
- data/lib/datadog/core/configuration/options.rb +57 -18
- data/lib/datadog/core/configuration/settings.rb +160 -25
- data/lib/datadog/core/configuration/stable_config.rb +11 -2
- data/lib/datadog/core/configuration/supported_configurations.rb +413 -0
- data/lib/datadog/core/configuration.rb +4 -4
- data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
- data/lib/datadog/core/contrib/rails/utils.rb +7 -3
- data/lib/datadog/core/crashtracking/component.rb +73 -21
- data/lib/datadog/core/crashtracking/tag_builder.rb +9 -21
- data/lib/datadog/core/ddsketch.rb +19 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/diagnostics/environment_logger.rb +3 -1
- data/lib/datadog/core/environment/agent_info.rb +65 -1
- data/lib/datadog/core/environment/cgroup.rb +52 -25
- data/lib/datadog/core/environment/container.rb +140 -46
- data/lib/datadog/core/environment/ext.rb +13 -2
- data/lib/datadog/core/environment/git.rb +2 -2
- data/lib/datadog/core/environment/identity.rb +40 -4
- data/lib/datadog/core/environment/process.rb +122 -0
- data/lib/datadog/core/environment/socket.rb +13 -0
- data/lib/datadog/core/environment/variable_helpers.rb +3 -3
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +6 -6
- data/lib/datadog/core/evp.rb +11 -0
- data/lib/datadog/core/feature_flags.rb +61 -0
- data/lib/datadog/core/knuth_sampler.rb +57 -0
- data/lib/datadog/core/logger.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +7 -7
- data/lib/datadog/core/metrics/logging.rb +1 -1
- data/lib/datadog/core/pin.rb +8 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +51 -21
- data/lib/datadog/core/rate_limiter.rb +11 -1
- data/lib/datadog/core/remote/client/capabilities.rb +49 -6
- data/lib/datadog/core/remote/client.rb +15 -7
- data/lib/datadog/core/remote/component.rb +64 -36
- data/lib/datadog/core/remote/configuration/content.rb +15 -2
- data/lib/datadog/core/remote/configuration/digest.rb +14 -7
- data/lib/datadog/core/remote/configuration/repository.rb +13 -1
- data/lib/datadog/core/remote/configuration/target.rb +13 -6
- data/lib/datadog/core/remote/transport/config.rb +9 -36
- data/lib/datadog/core/remote/transport/http/config.rb +15 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
- data/lib/datadog/core/remote/transport/http.rb +15 -24
- data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
- data/lib/datadog/core/remote/worker.rb +25 -37
- data/lib/datadog/core/runtime/ext.rb +0 -1
- data/lib/datadog/core/runtime/metrics.rb +11 -2
- data/lib/datadog/core/semaphore.rb +1 -4
- data/lib/datadog/core/tag_builder.rb +52 -0
- data/lib/datadog/core/tag_normalizer.rb +84 -0
- data/lib/datadog/core/telemetry/component.rb +65 -17
- data/lib/datadog/core/telemetry/emitter.rb +6 -6
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +3 -3
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +32 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +203 -89
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
- data/lib/datadog/core/telemetry/event.rb +2 -7
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/logger.rb +5 -2
- data/lib/datadog/core/telemetry/logging.rb +22 -4
- data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
- data/lib/datadog/core/telemetry/request.rb +17 -5
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +8 -34
- data/lib/datadog/core/telemetry/transport/http.rb +21 -16
- data/lib/datadog/core/telemetry/transport/telemetry.rb +8 -17
- data/lib/datadog/core/telemetry/worker.rb +108 -32
- data/lib/datadog/core/transport/ext.rb +3 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
- data/lib/datadog/core/transport/http/api/instance.rb +4 -21
- data/lib/datadog/core/transport/http/builder.rb +11 -7
- data/lib/datadog/core/transport/http/client.rb +80 -0
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http/response.rb +4 -0
- data/lib/datadog/core/transport/http.rb +24 -19
- data/lib/datadog/core/transport/parcel.rb +61 -9
- data/lib/datadog/core/transport/response.rb +16 -2
- data/lib/datadog/core/transport/transport.rb +90 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +1 -1
- data/lib/datadog/core/utils/{base64.rb → base64_codec.rb} +4 -3
- data/lib/datadog/core/utils/enumerable_compat.rb +29 -0
- data/lib/datadog/core/utils/fnv.rb +26 -0
- data/lib/datadog/core/utils/forking.rb +3 -1
- data/lib/datadog/core/utils/hash.rb +0 -23
- data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -14
- data/lib/datadog/core/utils/network.rb +22 -1
- data/lib/datadog/core/utils/only_once.rb +1 -1
- data/lib/datadog/core/utils/only_once_successful.rb +8 -2
- data/lib/datadog/core/utils/safe_dup.rb +2 -2
- data/lib/datadog/core/utils/sequence.rb +2 -0
- data/lib/datadog/core/utils/spawn_monkey_patch.rb +68 -0
- data/lib/datadog/core/utils/time.rb +1 -1
- data/lib/datadog/core/utils.rb +10 -1
- data/lib/datadog/core/workers/async.rb +11 -2
- data/lib/datadog/core/workers/interval_loop.rb +51 -3
- data/lib/datadog/core/workers/polling.rb +2 -0
- data/lib/datadog/core/workers/queue.rb +96 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +9 -1
- data/lib/datadog/core.rb +11 -2
- data/lib/datadog/data_streams/configuration.rb +50 -0
- data/lib/datadog/data_streams/ext.rb +11 -0
- data/lib/datadog/data_streams/extensions.rb +16 -0
- data/lib/datadog/data_streams/pathway_context.rb +169 -0
- data/lib/datadog/data_streams/processor.rb +511 -0
- data/lib/datadog/data_streams/transport/http/stats.rb +58 -0
- data/lib/datadog/data_streams/transport/http.rb +36 -0
- data/lib/datadog/data_streams/transport/stats.rb +39 -0
- data/lib/datadog/data_streams.rb +100 -0
- data/lib/datadog/di/base.rb +15 -7
- data/lib/datadog/di/boot.rb +11 -1
- data/lib/datadog/di/code_tracker.rb +217 -15
- data/lib/datadog/di/component.rb +143 -48
- data/lib/datadog/di/configuration.rb +235 -2
- data/lib/datadog/di/context.rb +76 -0
- data/lib/datadog/di/contrib/active_record.rb +34 -5
- data/lib/datadog/di/el/compiler.rb +168 -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 +44 -0
- data/lib/datadog/di/fatal_exceptions.rb +26 -0
- data/lib/datadog/di/instrumenter.rb +620 -132
- data/lib/datadog/di/logger.rb +2 -2
- data/lib/datadog/di/probe.rb +78 -15
- data/lib/datadog/di/probe_builder.rb +42 -3
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +87 -0
- data/lib/datadog/di/probe_manager.rb +195 -100
- data/lib/datadog/di/probe_notification_builder.rb +285 -100
- data/lib/datadog/di/probe_notifier_worker.rb +120 -36
- data/lib/datadog/di/probe_repository.rb +198 -0
- data/lib/datadog/di/proc_responder.rb +36 -0
- data/lib/datadog/di/redactor.rb +24 -2
- data/lib/datadog/di/remote.rb +258 -95
- data/lib/datadog/di/serializer.rb +297 -20
- data/lib/datadog/di/transport/diagnostics.rb +12 -42
- data/lib/datadog/di/transport/http/diagnostics.rb +4 -34
- data/lib/datadog/di/transport/http/input.rb +12 -34
- data/lib/datadog/di/transport/http.rb +43 -19
- data/lib/datadog/di/transport/input.rb +121 -39
- data/lib/datadog/di/utils.rb +42 -14
- data/lib/datadog/di.rb +203 -10
- data/lib/datadog/error_tracking/collector.rb +2 -1
- data/lib/datadog/error_tracking/component.rb +2 -2
- data/lib/datadog/error_tracking/configuration.rb +55 -2
- data/lib/datadog/error_tracking/filters.rb +2 -2
- data/lib/datadog/kit/appsec/events/v2.rb +253 -0
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/kit/tracing/method_tracer.rb +135 -0
- data/lib/datadog/open_feature/component.rb +100 -0
- data/lib/datadog/open_feature/configuration.rb +37 -0
- data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
- data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
- data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
- data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
- data/lib/datadog/open_feature/exposures/event.rb +60 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
- data/lib/datadog/open_feature/exposures/worker.rb +116 -0
- data/lib/datadog/open_feature/ext.rb +16 -0
- data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +286 -0
- data/lib/datadog/open_feature/flag_evaluation/writer.rb +433 -0
- data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +101 -0
- data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +49 -0
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
- data/lib/datadog/open_feature/native_evaluator.rb +60 -0
- data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
- data/lib/datadog/open_feature/provider.rb +191 -0
- data/lib/datadog/open_feature/remote.rb +67 -0
- data/lib/datadog/open_feature/resolution_details.rb +35 -0
- data/lib/datadog/open_feature/transport.rb +121 -0
- data/lib/datadog/open_feature.rb +19 -0
- data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- data/lib/datadog/opentelemetry/configuration/settings.rb +226 -0
- data/lib/datadog/opentelemetry/ext.rb +9 -0
- data/lib/datadog/opentelemetry/logs.rb +98 -0
- data/lib/datadog/opentelemetry/metrics.rb +90 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +66 -2
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
- data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +30 -0
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +28 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +13 -7
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +12 -9
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
- data/lib/datadog/opentelemetry/sdk.rb +19 -0
- data/lib/datadog/opentelemetry/signal_configuration.rb +53 -0
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/opentelemetry.rb +4 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +83 -15
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +52 -3
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +13 -4
- data/lib/datadog/profiling/collectors/info.rb +59 -4
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -5
- data/lib/datadog/profiling/component.rb +73 -49
- data/lib/datadog/profiling/exporter.rb +48 -13
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +24 -5
- data/lib/datadog/profiling/ext/exec_monkey_patch.rb +32 -0
- data/lib/datadog/profiling/ext.rb +2 -15
- data/lib/datadog/profiling/flush.rb +23 -11
- data/lib/datadog/profiling/http_transport.rb +24 -11
- data/lib/datadog/profiling/load_native_extension.rb +2 -2
- data/lib/datadog/profiling/profiler.rb +31 -12
- data/lib/datadog/profiling/scheduler.rb +12 -10
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +5 -13
- data/lib/datadog/profiling/tag_builder.rb +42 -38
- data/lib/datadog/profiling/tasks/exec.rb +10 -5
- data/lib/datadog/profiling/tasks/help.rb +1 -0
- data/lib/datadog/profiling/tasks/setup.rb +4 -2
- data/lib/datadog/profiling.rb +8 -11
- data/lib/datadog/ruby_version.rb +25 -0
- data/lib/datadog/single_step_instrument.rb +10 -1
- data/lib/datadog/symbol_database/component.rb +734 -0
- data/lib/datadog/symbol_database/configuration.rb +73 -0
- data/lib/datadog/symbol_database/extensions.rb +19 -0
- data/lib/datadog/symbol_database/extractor.rb +1110 -0
- data/lib/datadog/symbol_database/file_hash.rb +48 -0
- data/lib/datadog/symbol_database/logger.rb +43 -0
- data/lib/datadog/symbol_database/remote.rb +180 -0
- data/lib/datadog/symbol_database/scope.rb +102 -0
- data/lib/datadog/symbol_database/scope_batcher.rb +292 -0
- data/lib/datadog/symbol_database/service_version.rb +66 -0
- data/lib/datadog/symbol_database/symbol.rb +69 -0
- data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
- data/lib/datadog/symbol_database/transport/http.rb +45 -0
- data/lib/datadog/symbol_database/transport.rb +54 -0
- data/lib/datadog/symbol_database/uploader.rb +230 -0
- data/lib/datadog/symbol_database.rb +71 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +10 -10
- data/lib/datadog/tracing/component.rb +17 -17
- data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
- data/lib/datadog/tracing/configuration/ext.rb +25 -5
- data/lib/datadog/tracing/configuration/settings.rb +125 -11
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +4 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +29 -11
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +47 -12
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +3 -1
- 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_pack/utils.rb +1 -2
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +4 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +6 -3
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +4 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +7 -10
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +16 -16
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +15 -12
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -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 +8 -10
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +8 -10
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/component.rb +3 -3
- 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 +22 -7
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +14 -4
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -5
- data/lib/datadog/tracing/contrib/dalli/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
- 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 +47 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +7 -7
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +7 -8
- data/lib/datadog/tracing/contrib/ethon/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -8
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/excon/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -9
- data/lib/datadog/tracing/contrib/ext.rb +6 -4
- data/lib/datadog/tracing/contrib/extensions.rb +28 -11
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +7 -9
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +18 -15
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +13 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/grape/patcher.rb +6 -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 +105 -63
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -15
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +6 -10
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc.rb +1 -0
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -0
- 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 +2 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +10 -11
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +9 -13
- data/lib/datadog/tracing/contrib/http/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/http.rb +1 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +10 -10
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +16 -5
- data/lib/datadog/tracing/contrib/httprb/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +8 -12
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +2 -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/instrumentation/consumer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +24 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +39 -8
- data/lib/datadog/tracing/contrib/karafka.rb +1 -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 +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +6 -6
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +11 -14
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +64 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +7 -7
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +3 -6
- 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 +9 -11
- 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/ext.rb +13 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +6 -2
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +25 -1
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +2 -6
- 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/configuration/settings.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +55 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +83 -44
- data/lib/datadog/tracing/contrib/rack/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +67 -0
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +126 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/rails/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +3 -3
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/rails/runner.rb +64 -40
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +10 -8
- 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 +2 -2
- data/lib/datadog/tracing/contrib/redis/tags.rb +2 -7
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +6 -4
- data/lib/datadog/tracing/contrib/registerable.rb +11 -0
- 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 +2 -1
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +5 -2
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -9
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +8 -3
- 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 +6 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +2 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -6
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +8 -4
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +5 -1
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +40 -39
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +15 -4
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -0
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +13 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +4 -6
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +15 -13
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +31 -0
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +18 -0
- data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
- data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop.rb +42 -0
- data/lib/datadog/tracing/contrib.rb +9 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +12 -4
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +133 -12
- data/lib/datadog/tracing/distributed/datadog.rb +17 -16
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -26
- 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 +39 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +107 -78
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/ext.rb +9 -0
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/ext.rb +23 -1
- data/lib/datadog/tracing/metadata/tagging.rb +6 -6
- 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 +2 -2
- data/lib/datadog/tracing/remote.rb +36 -13
- data/lib/datadog/tracing/sampling/ext.rb +2 -2
- data/lib/datadog/tracing/sampling/priority_sampler.rb +16 -1
- data/lib/datadog/tracing/sampling/rate_sampler.rb +8 -19
- data/lib/datadog/tracing/sampling/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +77 -48
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +3 -3
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +2 -2
- data/lib/datadog/tracing/span_event.rb +12 -12
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +63 -19
- data/lib/datadog/tracing/sync_writer.rb +1 -2
- data/lib/datadog/tracing/trace_digest.rb +28 -23
- data/lib/datadog/tracing/trace_operation.rb +209 -98
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +113 -52
- data/lib/datadog/tracing/transport/http/client.rb +12 -26
- data/lib/datadog/tracing/transport/http/traces.rb +4 -52
- data/lib/datadog/tracing/transport/http.rb +15 -9
- data/lib/datadog/tracing/transport/io/client.rb +11 -14
- data/lib/datadog/tracing/transport/io/traces.rb +28 -34
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +22 -0
- data/lib/datadog/tracing/transport/traces.rb +14 -82
- data/lib/datadog/tracing/workers.rb +4 -3
- data/lib/datadog/tracing/writer.rb +1 -1
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +14 -0
- metadata +201 -40
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
- data/ext/libdatadog_api/macos_development.md +0 -26
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -321
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -1023
- data/lib/datadog/appsec/configuration/settings.rb +0 -342
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -171
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/core/remote/transport/http/api.rb +0 -53
- data/lib/datadog/core/remote/transport/http/client.rb +0 -49
- data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
- data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
- data/lib/datadog/core/transport/http/api/spec.rb +0 -36
- data/lib/datadog/di/configuration/settings.rb +0 -212
- data/lib/datadog/di/transport/http/api.rb +0 -42
- data/lib/datadog/di/transport/http/client.rb +0 -47
- data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
- data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
- data/lib/datadog/tracing/transport/http/api.rb +0 -44
- data/lib/datadog/tracing/workers/trace_writer.rb +0 -199
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../../core/utils'
|
|
4
|
+
require_relative 'helpers'
|
|
5
|
+
|
|
3
6
|
module Datadog
|
|
4
7
|
module Tracing
|
|
5
8
|
module Distributed
|
|
@@ -52,7 +55,7 @@ module Datadog
|
|
|
52
55
|
tags ||= {}
|
|
53
56
|
tags[Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER] = decision
|
|
54
57
|
when :drop
|
|
55
|
-
tags
|
|
58
|
+
tags&.delete(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
56
59
|
end
|
|
57
60
|
end
|
|
58
61
|
|
|
@@ -75,34 +78,6 @@ module Datadog
|
|
|
75
78
|
|
|
76
79
|
private
|
|
77
80
|
|
|
78
|
-
# Refinements to ensure newer rubies do not suffer performance impact
|
|
79
|
-
# by needing to use older APIs.
|
|
80
|
-
module Refine
|
|
81
|
-
# Backport `Regexp::match?` because it is measurably the most performant
|
|
82
|
-
# way to check if a string matches a regular expression.
|
|
83
|
-
unless Regexp.method_defined?(:match?)
|
|
84
|
-
refine ::Regexp do
|
|
85
|
-
def match?(*args)
|
|
86
|
-
!match(*args).nil?
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
unless String.method_defined?(:delete_prefix)
|
|
92
|
-
refine ::String do
|
|
93
|
-
def delete_prefix(prefix)
|
|
94
|
-
prefix = prefix.to_s
|
|
95
|
-
if rindex(prefix, 0)
|
|
96
|
-
self[prefix.length..-1]
|
|
97
|
-
else
|
|
98
|
-
dup
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
using Refine
|
|
105
|
-
|
|
106
81
|
# @see https://www.w3.org/TR/trace-context/#traceparent-header
|
|
107
82
|
def build_traceparent(digest)
|
|
108
83
|
build_traceparent_string(
|
|
@@ -128,7 +103,7 @@ module Datadog
|
|
|
128
103
|
# @param parent_id [Integer] 64-bit
|
|
129
104
|
# @param trace_flags [Integer] 8-bit
|
|
130
105
|
def build_traceparent_string(trace_id, parent_id, trace_flags)
|
|
131
|
-
"00-#{format(
|
|
106
|
+
"00-#{format("%032x", trace_id)}-#{format("%016x", parent_id)}-#{format("%02x", trace_flags)}"
|
|
132
107
|
end
|
|
133
108
|
|
|
134
109
|
# Sets the trace flag to an existing `trace_flags`.
|
|
@@ -148,58 +123,65 @@ module Datadog
|
|
|
148
123
|
|
|
149
124
|
# @see https://www.w3.org/TR/trace-context/#tracestate-header
|
|
150
125
|
def build_tracestate(digest)
|
|
151
|
-
tracestate =
|
|
152
|
-
tracestate
|
|
153
|
-
tracestate
|
|
154
|
-
tracestate
|
|
155
|
-
|
|
156
|
-
|
|
126
|
+
tracestate = +'dd='
|
|
127
|
+
append_dd(tracestate, last_dd_parent_id(digest))
|
|
128
|
+
append_dd(tracestate, "s:#{digest.trace_sampling_priority};") if digest.trace_sampling_priority
|
|
129
|
+
append_dd(tracestate, "o:#{serialize_origin(digest.trace_origin)};") if digest.trace_origin
|
|
130
|
+
|
|
131
|
+
# Replacing this by safe navigation seems to have a different behaviour on Rubies <= 3.0.
|
|
132
|
+
# It cause a LocalJumpError in the CI.
|
|
133
|
+
if digest.trace_distributed_tags # rubocop:disable Style/SafeNavigation
|
|
157
134
|
digest.trace_distributed_tags.each do |name, value|
|
|
158
135
|
tag = "t.#{serialize_tag_key(name)}:#{serialize_tag_value(value)};"
|
|
159
136
|
|
|
160
|
-
# If tracestate size limit is
|
|
161
|
-
|
|
162
|
-
#
|
|
163
|
-
# We add 1 to the limit because of the trailing comma, which will be removed before returning.
|
|
164
|
-
break if tracestate.bytesize + tag.bytesize > (TRACESTATE_VALUE_SIZE_LIMIT + 1)
|
|
165
|
-
|
|
166
|
-
tracestate << tag
|
|
137
|
+
# If tracestate size limit is exceeded, drop the remaining data.
|
|
138
|
+
break unless append_dd(tracestate, tag)
|
|
167
139
|
end
|
|
168
140
|
end
|
|
169
141
|
|
|
170
|
-
tracestate
|
|
142
|
+
append_dd(tracestate, digest.trace_state_unknown_fields) if digest.trace_state_unknown_fields
|
|
143
|
+
vendors = split_tracestate(digest.trace_state)
|
|
171
144
|
|
|
172
145
|
# Is there any Datadog-specific information to propagate.
|
|
173
146
|
# Check for > 3 size because the empty prefix `dd=` has 3 characters.
|
|
174
|
-
if tracestate.
|
|
147
|
+
if tracestate.bytesize > 3
|
|
175
148
|
# Propagate upstream tracestate with `dd=...` appended to the list
|
|
176
149
|
tracestate.chop! # Removes trailing `;` from Datadog trace state string.
|
|
177
150
|
|
|
178
|
-
if
|
|
179
|
-
trace_state = digest.trace_state.strip
|
|
180
|
-
|
|
151
|
+
if vendors && !vendors.empty?
|
|
181
152
|
# Delete existing `dd=` tracestate fields, if present.
|
|
182
|
-
vendors = split_tracestate(trace_state)
|
|
183
153
|
vendors.reject! { |v| v.start_with?('dd=') }
|
|
184
|
-
end
|
|
185
154
|
|
|
186
|
-
if vendors && !vendors.empty?
|
|
187
155
|
# Ensure the list has at most 31 elements, as we need to prepend Datadog's
|
|
188
156
|
# entry and the limit is 32 elements total.
|
|
189
|
-
vendors
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
157
|
+
vendors.first(TRACESTATE_MAX_LIST_MEMBERS - 1).each do |vendor|
|
|
158
|
+
break if tracestate.bytesize + vendor.bytesize + 1 > TRACESTATE_MAX_SIZE_LIMIT
|
|
159
|
+
|
|
160
|
+
tracestate << ',' << vendor
|
|
161
|
+
end
|
|
193
162
|
end
|
|
194
|
-
|
|
195
|
-
|
|
163
|
+
|
|
164
|
+
tracestate.to_s
|
|
165
|
+
elsif vendors && !vendors.empty?
|
|
166
|
+
vendors.join(',')
|
|
196
167
|
end
|
|
197
168
|
end
|
|
198
169
|
|
|
170
|
+
# Appends a Datadog tracestate field when it fits.
|
|
171
|
+
def append_dd(tracestate, field)
|
|
172
|
+
return true if field.empty?
|
|
173
|
+
|
|
174
|
+
# We add 1 to the limit because of the trailing semicolon, which will be removed before returning.
|
|
175
|
+
return false if tracestate.bytesize + field.bytesize > (TRACESTATE_VALUE_SIZE_LIMIT + 1)
|
|
176
|
+
|
|
177
|
+
tracestate << field
|
|
178
|
+
true
|
|
179
|
+
end
|
|
180
|
+
|
|
199
181
|
def last_dd_parent_id(digest)
|
|
200
182
|
if !digest.span_remote
|
|
201
183
|
span_id = digest.span_id || 0 # Fall back to zero (invalid) if not present
|
|
202
|
-
"p:#{format(
|
|
184
|
+
"p:#{format("%016x", span_id)};"
|
|
203
185
|
elsif digest.trace_distributed_tags&.key?(Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID)
|
|
204
186
|
"p:#{digest.trace_distributed_tags[Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID]};"
|
|
205
187
|
else
|
|
@@ -216,10 +198,10 @@ module Datadog
|
|
|
216
198
|
# DEV: come from Datadog-controlled sources.
|
|
217
199
|
# DEV: Trying to `match?` is measurably faster than a `gsub` that does not match.
|
|
218
200
|
value = if INVALID_ORIGIN_CHARS.match?(value)
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
201
|
+
value.gsub(INVALID_ORIGIN_CHARS, '_')
|
|
202
|
+
else
|
|
203
|
+
value
|
|
204
|
+
end
|
|
223
205
|
|
|
224
206
|
if REMAP_ORIGIN_CHARS.match?(value)
|
|
225
207
|
value.gsub(REMAP_ORIGIN_CHARS, '~')
|
|
@@ -253,10 +235,10 @@ module Datadog
|
|
|
253
235
|
# DEV: come from Datadog-controlled sources.
|
|
254
236
|
# DEV: Trying to `match?` is measurably faster than a `gsub` that does not match.
|
|
255
237
|
ret = if INVALID_TAG_VALUE_CHARS.match?(value)
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
238
|
+
value.gsub(INVALID_TAG_VALUE_CHARS, '_')
|
|
239
|
+
else
|
|
240
|
+
value
|
|
241
|
+
end
|
|
260
242
|
|
|
261
243
|
# DEV: Checking for an unlikely '=' is faster than a no-op `tr`.
|
|
262
244
|
if ret.include?('=')
|
|
@@ -279,19 +261,21 @@ module Datadog
|
|
|
279
261
|
|
|
280
262
|
def parse_traceparent_string(traceparent)
|
|
281
263
|
return unless traceparent
|
|
264
|
+
return if traceparent.bytesize > TRACEPARENT_MAX_SIZE_LIMIT
|
|
265
|
+
|
|
266
|
+
traceparent = traceparent.strip
|
|
282
267
|
|
|
283
|
-
version, trace_id, parent_id, trace_flags, extra = traceparent.
|
|
268
|
+
version, trace_id, parent_id, trace_flags, extra = traceparent.split('-', 5)
|
|
284
269
|
|
|
285
|
-
return
|
|
270
|
+
return unless version && trace_id && parent_id && trace_flags
|
|
271
|
+
return if version.size != 2 || trace_id.size != 32 || parent_id.size != 16 || trace_flags.size != 2
|
|
272
|
+
return if version[0] < '0' || version[0] > 'f' || version[1] < '0' || version[1] > 'f'
|
|
286
273
|
|
|
287
274
|
return if version == INVALID_VERSION
|
|
288
275
|
|
|
289
276
|
# Extra fields are not allowed in version 00, but we have to be lenient for future versions.
|
|
290
277
|
return if version == SPEC_VERSION && extra
|
|
291
278
|
|
|
292
|
-
# Invalid field sizes
|
|
293
|
-
return if trace_id.size != 32 || parent_id.size != 16 || trace_flags.size != 2
|
|
294
|
-
|
|
295
279
|
[Integer(trace_id, 16), Integer(parent_id, 16), Integer(trace_flags, 16)]
|
|
296
280
|
rescue ArgumentError # Conversion to integer failed
|
|
297
281
|
nil
|
|
@@ -301,12 +285,16 @@ module Datadog
|
|
|
301
285
|
trace_flags & TRACE_FLAGS_SAMPLED
|
|
302
286
|
end
|
|
303
287
|
|
|
304
|
-
# @return [
|
|
305
|
-
#
|
|
288
|
+
# @return [nil] when the tracestate is absent or has no vendor entries.
|
|
289
|
+
# @return [String] when no `dd=` entry is present, the joined vendor list.
|
|
290
|
+
# @return [Array(String, Integer, String, String, Hash, String)] when a `dd=`
|
|
291
|
+
# entry is present: [tracestate without `dd=`, sampling_priority, origin,
|
|
292
|
+
# ts_parent_id, tags, unknown_fields]. All elements past the first may be nil.
|
|
306
293
|
def extract_tracestate(tracestate)
|
|
307
|
-
return unless tracestate
|
|
308
|
-
|
|
309
294
|
vendors = split_tracestate(tracestate)
|
|
295
|
+
return unless vendors && !vendors.empty?
|
|
296
|
+
|
|
297
|
+
tracestate = vendors.join(',')
|
|
310
298
|
|
|
311
299
|
# Find Datadog's `dd=` tracestate field.
|
|
312
300
|
idx = vendors.index { |v| v.start_with?('dd=') }
|
|
@@ -333,7 +321,11 @@ module Datadog
|
|
|
333
321
|
key, value = pair.split(':', 2)
|
|
334
322
|
case key
|
|
335
323
|
when 's'
|
|
336
|
-
sampling_priority =
|
|
324
|
+
sampling_priority = begin
|
|
325
|
+
Integer(value)
|
|
326
|
+
rescue
|
|
327
|
+
nil
|
|
328
|
+
end
|
|
337
329
|
when 'o'
|
|
338
330
|
origin = value
|
|
339
331
|
when 'p'
|
|
@@ -350,7 +342,7 @@ module Datadog
|
|
|
350
342
|
tags ||= {}
|
|
351
343
|
tags["#{Tracing::Metadata::Ext::Distributed::TAGS_PREFIX}#{key}"] = value
|
|
352
344
|
else
|
|
353
|
-
unknown_fields ||=
|
|
345
|
+
unknown_fields ||= +''
|
|
354
346
|
unknown_fields << pair
|
|
355
347
|
unknown_fields << ';'
|
|
356
348
|
end
|
|
@@ -390,10 +382,47 @@ module Datadog
|
|
|
390
382
|
end
|
|
391
383
|
end
|
|
392
384
|
|
|
385
|
+
# We MUST NOT propagate partial members, but we SHOULD try
|
|
386
|
+
# to parse as much of the tracestate as possible.
|
|
393
387
|
def split_tracestate(tracestate)
|
|
394
|
-
|
|
388
|
+
return unless tracestate
|
|
389
|
+
|
|
390
|
+
remove_last_member = false
|
|
391
|
+
if tracestate.bytesize > TRACESTATE_MAX_SIZE_LIMIT
|
|
392
|
+
# We parse 1 byte over the limit to detect if the last member
|
|
393
|
+
# is a partial member (toss) or ends exactly at the limit (keep).
|
|
394
|
+
remove_last_member = tracestate.byteslice(TRACESTATE_MAX_SIZE_LIMIT, 1) != ','
|
|
395
|
+
|
|
396
|
+
# To ensure we don't have a trailing partial UTF-8 codepoint, we keep one extra byte
|
|
397
|
+
# and safely remove it with `#chop`.
|
|
398
|
+
# `#chop` walks back the string until it finds a valid character boundary and deletes
|
|
399
|
+
# from there.
|
|
400
|
+
tracestate = tracestate.byteslice(0, TRACESTATE_MAX_SIZE_LIMIT + 1) #: String
|
|
401
|
+
tracestate = tracestate.chop
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
tracestate = ::Datadog::Core::Utils.utf8_encode(tracestate, placeholder: nil)
|
|
405
|
+
return unless tracestate
|
|
406
|
+
|
|
407
|
+
vendors = tracestate.split(',', TRACESTATE_MAX_LIST_MEMBERS + 1)
|
|
408
|
+
if vendors.length > TRACESTATE_MAX_LIST_MEMBERS || remove_last_member
|
|
409
|
+
vendors.pop
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
vendors.each(&:strip!)
|
|
413
|
+
vendors.pop while vendors.last == ''
|
|
414
|
+
vendors
|
|
395
415
|
end
|
|
396
416
|
|
|
417
|
+
TRACEPARENT_MAX_SIZE_LIMIT = 512
|
|
418
|
+
private_constant :TRACEPARENT_MAX_SIZE_LIMIT
|
|
419
|
+
|
|
420
|
+
TRACESTATE_MAX_SIZE_LIMIT = 512
|
|
421
|
+
private_constant :TRACESTATE_MAX_SIZE_LIMIT
|
|
422
|
+
|
|
423
|
+
TRACESTATE_MAX_LIST_MEMBERS = 32
|
|
424
|
+
private_constant :TRACESTATE_MAX_LIST_MEMBERS
|
|
425
|
+
|
|
397
426
|
# Version 0xFF is invalid as per spec
|
|
398
427
|
# @see https://www.w3.org/TR/trace-context/#version
|
|
399
428
|
INVALID_VERSION = 'ff'
|
|
@@ -59,13 +59,11 @@ module Datadog
|
|
|
59
59
|
|
|
60
60
|
def publish(*args)
|
|
61
61
|
subscriptions.each do |block|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"at #{Array(e.backtrace).first}"
|
|
68
|
-
end
|
|
62
|
+
block.call(*args)
|
|
63
|
+
rescue => e
|
|
64
|
+
Datadog.logger.debug do
|
|
65
|
+
"Error while handling '#{name}' event with '#{block}': #{e.class}: #{e.message} " \
|
|
66
|
+
"at #{Array(e.backtrace).first}"
|
|
69
67
|
end
|
|
70
68
|
end
|
|
71
69
|
|
|
@@ -12,7 +12,7 @@ module Datadog
|
|
|
12
12
|
case key
|
|
13
13
|
when Ext::Analytics::TAG_ENABLED
|
|
14
14
|
# If true, set rate to 1.0, otherwise set 0.0.
|
|
15
|
-
value = value == true ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
|
|
15
|
+
value = (value == true) ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
|
|
16
16
|
Tracing::Analytics.set_sample_rate(self, value)
|
|
17
17
|
when Ext::Analytics::TAG_SAMPLE_RATE
|
|
18
18
|
Tracing::Analytics.set_sample_rate(self, value)
|
|
@@ -33,6 +33,16 @@ module Datadog
|
|
|
33
33
|
|
|
34
34
|
TAG_APM_ENABLED = '_dd.apm.enabled'
|
|
35
35
|
|
|
36
|
+
# Set to the global service name when a span's service is overridden
|
|
37
|
+
TAG_BASE_SERVICE = '_dd.base_service'
|
|
38
|
+
|
|
39
|
+
# Set to the source of a span's service override: the component name for Datadog-instrumented spans
|
|
40
|
+
# (e.g. 'redis', 'pg'), or {SVC_SRC_MANUAL} for manually-instrumented spans
|
|
41
|
+
TAG_SVC_SRC = '_dd.svc_src'
|
|
42
|
+
|
|
43
|
+
# Value for {TAG_SVC_SRC} indicating that a span was manually instrumented via the Tracing API
|
|
44
|
+
SVC_SRC_MANUAL = 'm'
|
|
45
|
+
|
|
36
46
|
# Defines constants for trace analytics
|
|
37
47
|
# @public_api
|
|
38
48
|
module Analytics
|
|
@@ -66,6 +76,10 @@ module Datadog
|
|
|
66
76
|
TAG_DD_PARENT_ID = '_dd.parent_id'
|
|
67
77
|
DD_PARENT_ID_DEFAULT = '0000000000000000'
|
|
68
78
|
|
|
79
|
+
# Knuth Sampling Rate: the sampling rate applied by agent-based or rule-based sampling.
|
|
80
|
+
# This is a propagated tag (prefixed with `_dd.p.`) that is included in `x-datadog-tags`.
|
|
81
|
+
TAG_KNUTH_SAMPLING_RATE = '_dd.p.ksr'
|
|
82
|
+
|
|
69
83
|
# Trace tags with this prefix will propagate from a trace through distributed tracing.
|
|
70
84
|
# Distributed headers tags with this prefix will be injected into the active trace.
|
|
71
85
|
TAGS_PREFIX = '_dd.p.'
|
|
@@ -82,12 +96,20 @@ module Datadog
|
|
|
82
96
|
TAG_MSG = 'error.message'
|
|
83
97
|
TAG_STACK = 'error.stack'
|
|
84
98
|
TAG_TYPE = 'error.type'
|
|
99
|
+
|
|
100
|
+
# From https://opentelemetry.io/docs/specs/semconv/registry/attributes/exception/#exception-stacktrace
|
|
101
|
+
ATTRIBUTE_MESSAGE = 'exception.message'
|
|
102
|
+
ATTRIBUTE_STACKTRACE = 'exception.stacktrace'
|
|
103
|
+
ATTRIBUTE_TYPE = 'exception.type'
|
|
104
|
+
|
|
105
|
+
# From https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#exception-event
|
|
106
|
+
EVENT_NAME = 'exception'
|
|
85
107
|
end
|
|
86
108
|
|
|
87
109
|
# @public_api
|
|
88
110
|
module HTTP
|
|
89
|
-
ERROR_RANGE = (500...600).freeze
|
|
90
111
|
TAG_BASE_URL = 'http.base_url'
|
|
112
|
+
TAG_ENDPOINT = 'http.endpoint'
|
|
91
113
|
TAG_METHOD = 'http.method'
|
|
92
114
|
TAG_STATUS_CODE = 'http.status_code'
|
|
93
115
|
TAG_USER_AGENT = 'http.useragent'
|
|
@@ -51,8 +51,8 @@ module Datadog
|
|
|
51
51
|
# Encode strings in UTF-8 to facilitate downstream serialization
|
|
52
52
|
meta[Core::Utils.utf8_encode(key)] = Core::Utils.utf8_encode(value)
|
|
53
53
|
end
|
|
54
|
-
rescue
|
|
55
|
-
Datadog.logger.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e}")
|
|
54
|
+
rescue => e
|
|
55
|
+
Datadog.logger.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e.class}: #{e.message}")
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
# Sets tags from given hash, for each key in hash it sets the tag with that key
|
|
@@ -80,10 +80,10 @@ module Datadog
|
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
# Convenient interface for setting a single tag.
|
|
83
|
-
|
|
83
|
+
alias_method :[]=, :set_tag
|
|
84
84
|
|
|
85
85
|
# Convenient interface for getting a single tag.
|
|
86
|
-
|
|
86
|
+
alias_method :[], :get_tag
|
|
87
87
|
|
|
88
88
|
# Return the metric with the given key, nil if it doesn't exist.
|
|
89
89
|
def get_metric(key)
|
|
@@ -101,8 +101,8 @@ module Datadog
|
|
|
101
101
|
|
|
102
102
|
# Encode strings in UTF-8 to facilitate downstream serialization
|
|
103
103
|
metrics[Core::Utils.utf8_encode(key)] = value
|
|
104
|
-
rescue
|
|
105
|
-
Datadog.logger.debug("Unable to set the metric #{key}, ignoring it. Caused by: #{e}")
|
|
104
|
+
rescue => e
|
|
105
|
+
Datadog.logger.debug("Unable to set the metric #{key}, ignoring it. Caused by: #{e.class}: #{e.message}")
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
# This method removes a metric for the given key. It acts like {#clear_tag}.
|
|
@@ -47,11 +47,11 @@ module Datadog
|
|
|
47
47
|
next nil if current_trace.nil? || current_trace.empty?
|
|
48
48
|
|
|
49
49
|
process_result = processor.call(current_trace)
|
|
50
|
-
process_result && process_result.empty? ? nil : process_result
|
|
50
|
+
(process_result && process_result.empty?) ? nil : process_result
|
|
51
51
|
end
|
|
52
52
|
rescue => e
|
|
53
53
|
Datadog.logger.debug(
|
|
54
|
-
"trace dropped entirely due to `Pipeline.before_flush` error: #{e}"
|
|
54
|
+
"trace dropped entirely due to `Pipeline.before_flush` error: #{e.class}: #{e.message}"
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
nil
|
|
@@ -7,8 +7,6 @@ module Datadog
|
|
|
7
7
|
module Tracing
|
|
8
8
|
# Remote configuration declaration
|
|
9
9
|
module Remote
|
|
10
|
-
class ReadError < StandardError; end
|
|
11
|
-
|
|
12
10
|
class << self
|
|
13
11
|
PRODUCT = 'APM_TRACING'
|
|
14
12
|
|
|
@@ -17,6 +15,9 @@ module Datadog
|
|
|
17
15
|
1 << 13, # APM_TRACING_LOGS_INJECTION: Dynamic trace logs injection configuration
|
|
18
16
|
1 << 14, # APM_TRACING_HTTP_HEADER_TAGS: Dynamic trace HTTP header tags configuration
|
|
19
17
|
1 << 29, # APM_TRACING_SAMPLE_RULES: Dynamic trace sampling rules configuration
|
|
18
|
+
# APM_TRACING_ENABLE_DYNAMIC_INSTRUMENTATION (bit 38) is declared in
|
|
19
|
+
# DI::Remote.capabilities, not here, so it is registered only when DI
|
|
20
|
+
# is not explicitly disabled and the runtime supports DI.
|
|
20
21
|
].freeze
|
|
21
22
|
|
|
22
23
|
def products
|
|
@@ -27,7 +28,7 @@ module Datadog
|
|
|
27
28
|
CAPABILITIES
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
def process_config(config, content)
|
|
31
|
+
def process_config(config, content, repository = nil)
|
|
31
32
|
lib_config = config['lib_config']
|
|
32
33
|
|
|
33
34
|
env_vars = Datadog::Tracing::Configuration::Dynamic::OPTIONS.map do |name, env_var, option|
|
|
@@ -41,11 +42,39 @@ module Datadog
|
|
|
41
42
|
[env_var, value]
|
|
42
43
|
end
|
|
43
44
|
|
|
45
|
+
if (di_enabled = lib_config['dynamic_instrumentation_enabled']) != nil # rubocop:disable Style/NonNilCheck
|
|
46
|
+
# repository is forwarded so that an enable signal can reconcile DI
|
|
47
|
+
# against probes delivered in an earlier poll while DI was stopped
|
|
48
|
+
# (see Datadog::DI::Remote.handle_rc_enablement).
|
|
49
|
+
Datadog::DI::Remote.handle_rc_enablement(di_enabled, repository)
|
|
50
|
+
|
|
51
|
+
if di_enabled
|
|
52
|
+
# DI was just (implicitly) enabled. A Symbol Database upload signal
|
|
53
|
+
# received in an earlier poll while DI was inactive was deferred by
|
|
54
|
+
# the component's DI-active gate; re-attempt it now. Mirrors the DI
|
|
55
|
+
# probe replay in handle_rc_enablement above. allow_initialization:
|
|
56
|
+
# false because this runs on the remote-config worker thread.
|
|
57
|
+
Datadog.send(:components, allow_initialization: false)&.symbol_database&.resume_pending_upload
|
|
58
|
+
else
|
|
59
|
+
# DI was disabled via remote configuration. In the nil-default
|
|
60
|
+
# (follows-DI) case, stop Symbol Database too so its TracePoint and
|
|
61
|
+
# scheduler don't keep uploading while DI is off. An explicit
|
|
62
|
+
# symbol_database.enabled = true is independent and keeps running.
|
|
63
|
+
Datadog.send(:components, allow_initialization: false)&.symbol_database&.stop_for_di_disable
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
44
67
|
content.applied
|
|
45
68
|
|
|
46
|
-
|
|
69
|
+
# allow_initialization: false because process_config runs on the
|
|
70
|
+
# remote-config worker thread. If components haven't been built yet
|
|
71
|
+
# (e.g. during a teardown/reset window), the default `true` would
|
|
72
|
+
# synchronously build the entire component tree from this thread.
|
|
73
|
+
# The &. chain matches the pattern used by DI::Remote.handle_rc_enablement
|
|
74
|
+
# in the same dispatch path.
|
|
75
|
+
Datadog.send(:components, allow_initialization: false)&.telemetry&.client_configuration_change!(env_vars)
|
|
47
76
|
rescue => e
|
|
48
|
-
content.errored("#{e.class
|
|
77
|
+
content.errored("#{e.class}: #{e.message}: #{Array(e.backtrace).join("\n")}")
|
|
49
78
|
end
|
|
50
79
|
|
|
51
80
|
def receivers(_telemetry)
|
|
@@ -57,7 +86,7 @@ module Datadog
|
|
|
57
86
|
case content.path.product
|
|
58
87
|
when PRODUCT
|
|
59
88
|
config = parse_content(content)
|
|
60
|
-
process_config(config, content)
|
|
89
|
+
process_config(config, content, repository)
|
|
61
90
|
end
|
|
62
91
|
end
|
|
63
92
|
end
|
|
@@ -71,13 +100,7 @@ module Datadog
|
|
|
71
100
|
private
|
|
72
101
|
|
|
73
102
|
def parse_content(content)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
content.data.rewind
|
|
77
|
-
|
|
78
|
-
raise ReadError, 'EOF reached' if data.nil?
|
|
79
|
-
|
|
80
|
-
JSON.parse(data)
|
|
103
|
+
JSON.parse(content.data)
|
|
81
104
|
end
|
|
82
105
|
end
|
|
83
106
|
end
|
|
@@ -47,8 +47,8 @@ module Datadog
|
|
|
47
47
|
MANUAL = '-4'
|
|
48
48
|
# Formerly AppSec.
|
|
49
49
|
ASM = '-5'
|
|
50
|
-
#
|
|
51
|
-
|
|
50
|
+
# AI Guard.
|
|
51
|
+
AI_GUARD = '-13'
|
|
52
52
|
# Dynamically configured rule, explicitly created by the user.
|
|
53
53
|
REMOTE_USER_RULE = '-11'
|
|
54
54
|
# Dynamically configured rule, automatically generated by Datadog.
|
|
@@ -60,7 +60,9 @@ module Datadog
|
|
|
60
60
|
ensure
|
|
61
61
|
if trace.sampling_priority && trace.sampling_priority > 0
|
|
62
62
|
# Don't modify decision if priority was set upstream.
|
|
63
|
-
|
|
63
|
+
# Steep: https://github.com/soutaro/steep/issues/1971
|
|
64
|
+
if !distributed_sampling_priority && # steep:ignore FallbackAny
|
|
65
|
+
!trace.has_tag?(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
|
|
64
66
|
# If no sampling priority being assigned at this point, a custom
|
|
65
67
|
# sampler implementation is configured: this means the user has
|
|
66
68
|
# full control over the sampling decision.
|
|
@@ -75,6 +77,19 @@ module Datadog
|
|
|
75
77
|
end
|
|
76
78
|
end
|
|
77
79
|
|
|
80
|
+
def reconsider_sample_resource!(trace)
|
|
81
|
+
return unless @priority_sampler.respond_to?(:reconsider_sample_resource!)
|
|
82
|
+
|
|
83
|
+
preserving_sampling(trace) do
|
|
84
|
+
@priority_sampler.reconsider_sample_resource!(trace)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def resource_sampling?
|
|
89
|
+
@priority_sampler.respond_to?(:resource_sampling?) &&
|
|
90
|
+
@priority_sampler.resource_sampling?
|
|
91
|
+
end
|
|
92
|
+
|
|
78
93
|
# (see Datadog::Tracing::Sampling::RateByServiceSampler#update)
|
|
79
94
|
def update(rate_by_service, decision: nil)
|
|
80
95
|
@priority_sampler.update(rate_by_service, decision: decision)
|