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
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative '../../../transport/http/api/endpoint'
|
|
4
4
|
require_relative '../../../transport/http/api/instance'
|
|
5
|
-
require_relative '../../../transport/http/
|
|
5
|
+
require_relative '../../../transport/http/client'
|
|
6
6
|
require_relative '../../../transport/request'
|
|
7
|
-
require_relative 'client'
|
|
8
7
|
|
|
9
8
|
module Datadog
|
|
10
9
|
module Core
|
|
@@ -12,35 +11,7 @@ module Datadog
|
|
|
12
11
|
module Transport
|
|
13
12
|
module HTTP
|
|
14
13
|
module Telemetry
|
|
15
|
-
module Client
|
|
16
|
-
def send_telemetry_payload(request)
|
|
17
|
-
send_request(request) do |api, env| # steep:ignore
|
|
18
|
-
api.send_telemetry(env)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
14
|
module API
|
|
24
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
|
25
|
-
def send_telemetry(env)
|
|
26
|
-
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('telemetry', self) unless spec.is_a?(Telemetry::API::Spec)
|
|
27
|
-
|
|
28
|
-
spec.send_telemetry(env) do |request_env|
|
|
29
|
-
call(request_env)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
|
35
|
-
attr_accessor :telemetry
|
|
36
|
-
|
|
37
|
-
def send_telemetry(env, &block)
|
|
38
|
-
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('telemetry', self) if telemetry.nil?
|
|
39
|
-
|
|
40
|
-
telemetry.call(env, &block)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
15
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
45
16
|
HEADER_CONTENT_TYPE = 'Content-Type'
|
|
46
17
|
|
|
@@ -64,27 +35,30 @@ module Datadog
|
|
|
64
35
|
super
|
|
65
36
|
end
|
|
66
37
|
|
|
67
|
-
def headers(request_type:, api_key
|
|
38
|
+
def headers(request_type:, api_key:)
|
|
68
39
|
{
|
|
69
40
|
Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST => '1',
|
|
70
41
|
# Provided by encoder
|
|
71
42
|
# 'Content-Type' => 'application/json',
|
|
72
|
-
'DD-Telemetry-API-Version' =>
|
|
43
|
+
'DD-Telemetry-API-Version' => 'v2',
|
|
73
44
|
'DD-Telemetry-Request-Type' => request_type,
|
|
74
45
|
'DD-Client-Library-Language' => Core::Environment::Ext::LANG,
|
|
75
46
|
'DD-Client-Library-Version' => Core::Environment::Identity.gem_datadog_version_semver2,
|
|
47
|
+
'DD-Session-ID' => Core::Environment::Identity.id,
|
|
76
48
|
|
|
77
49
|
# Enable debug mode for telemetry
|
|
78
50
|
# 'DD-Telemetry-Debug-Enabled' => 'true',
|
|
79
51
|
}.tap do |result|
|
|
80
52
|
result['DD-API-KEY'] = api_key unless api_key.nil?
|
|
53
|
+
root = Core::Environment::Identity.root_runtime_id
|
|
54
|
+
result['DD-Root-Session-ID'] = root if root
|
|
55
|
+
parent = Core::Environment::Identity.parent_runtime_id
|
|
56
|
+
result['DD-Parent-Session-ID'] = parent if parent
|
|
81
57
|
end
|
|
82
58
|
end
|
|
83
59
|
end
|
|
84
60
|
end
|
|
85
61
|
end
|
|
86
|
-
|
|
87
|
-
HTTP::Client.include(Telemetry::Client)
|
|
88
62
|
end
|
|
89
63
|
end
|
|
90
64
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative 'http/api'
|
|
3
|
+
require_relative '../../encoding'
|
|
5
4
|
require_relative '../../transport/http'
|
|
5
|
+
require_relative 'telemetry'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Core
|
|
@@ -10,6 +10,16 @@ module Datadog
|
|
|
10
10
|
module Transport
|
|
11
11
|
# Namespace for HTTP transport components
|
|
12
12
|
module HTTP
|
|
13
|
+
AGENT_TELEMETRY = Telemetry::API::Endpoint.new(
|
|
14
|
+
'/telemetry/proxy/api/v2/apmtelemetry',
|
|
15
|
+
Core::Encoding::JSONEncoder,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
AGENTLESS_TELEMETRY = Telemetry::API::Endpoint.new(
|
|
19
|
+
'/api/v2/apmtelemetry',
|
|
20
|
+
Core::Encoding::JSONEncoder,
|
|
21
|
+
)
|
|
22
|
+
|
|
13
23
|
module_function
|
|
14
24
|
|
|
15
25
|
# Builds a new Transport::HTTP::Client with default settings
|
|
@@ -18,18 +28,14 @@ module Datadog
|
|
|
18
28
|
agent_settings:,
|
|
19
29
|
logger:,
|
|
20
30
|
api_key: nil,
|
|
21
|
-
api_version: nil,
|
|
22
31
|
headers: nil
|
|
23
32
|
)
|
|
24
|
-
Core::Transport::HTTP.build(
|
|
33
|
+
Core::Transport::HTTP.build(
|
|
25
34
|
logger: logger,
|
|
26
35
|
agent_settings: agent_settings,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
transport.api API::AGENTLESS_TELEMETRY, apis[API::AGENTLESS_TELEMETRY]
|
|
32
|
-
|
|
36
|
+
headers: headers
|
|
37
|
+
) do |transport|
|
|
38
|
+
transport.api 'agentless_telemetry', AGENTLESS_TELEMETRY
|
|
33
39
|
# Call block to apply any customization, if provided
|
|
34
40
|
yield(transport) if block_given?
|
|
35
41
|
end.to_transport(Core::Telemetry::Transport::Telemetry::Transport).tap do |transport|
|
|
@@ -42,15 +48,14 @@ module Datadog
|
|
|
42
48
|
def agent_telemetry(
|
|
43
49
|
agent_settings:,
|
|
44
50
|
logger:,
|
|
45
|
-
api_version: nil,
|
|
46
51
|
headers: nil
|
|
47
52
|
)
|
|
48
|
-
Core::Transport::HTTP.build(
|
|
53
|
+
Core::Transport::HTTP.build(
|
|
49
54
|
logger: logger,
|
|
50
|
-
agent_settings: agent_settings,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
transport.api
|
|
55
|
+
agent_settings: agent_settings,
|
|
56
|
+
headers: headers
|
|
57
|
+
) do |transport|
|
|
58
|
+
transport.api 'agent_telemetry', AGENT_TELEMETRY
|
|
54
59
|
|
|
55
60
|
# Call block to apply any customization, if provided
|
|
56
61
|
yield(transport) if block_given?
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative '../../transport/parcel'
|
|
4
|
-
require_relative '
|
|
4
|
+
require_relative '../../transport/transport'
|
|
5
5
|
require_relative 'http/telemetry'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
@@ -9,10 +9,6 @@ module Datadog
|
|
|
9
9
|
module Telemetry
|
|
10
10
|
module Transport
|
|
11
11
|
module Telemetry
|
|
12
|
-
class EncodedParcel
|
|
13
|
-
include Datadog::Core::Transport::Parcel
|
|
14
|
-
end
|
|
15
|
-
|
|
16
12
|
class Request < Datadog::Core::Transport::Request
|
|
17
13
|
attr_reader :request_type
|
|
18
14
|
attr_reader :api_key
|
|
@@ -24,23 +20,18 @@ module Datadog
|
|
|
24
20
|
end
|
|
25
21
|
end
|
|
26
22
|
|
|
27
|
-
class Transport
|
|
28
|
-
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
|
23
|
+
class Transport < Core::Transport::Transport
|
|
29
24
|
attr_accessor :api_key
|
|
30
25
|
|
|
31
|
-
def initialize(apis, default_api, logger:)
|
|
32
|
-
@apis = apis
|
|
33
|
-
@logger = logger
|
|
34
|
-
|
|
35
|
-
@client = HTTP::Client.new(@apis[default_api], logger: logger)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
26
|
def send_telemetry(request_type:, payload:)
|
|
39
|
-
|
|
40
|
-
parcel =
|
|
27
|
+
encoder = Core::Encoding::JSONEncoder
|
|
28
|
+
parcel = Core::Transport::Parcel.new(
|
|
29
|
+
encoder.encode(payload),
|
|
30
|
+
content_type: encoder.content_type,
|
|
31
|
+
)
|
|
41
32
|
request = Request.new(request_type, parcel, api_key)
|
|
42
33
|
|
|
43
|
-
@client.
|
|
34
|
+
@client.send_request(:telemetry, request)
|
|
44
35
|
# Perform no error checking here
|
|
45
36
|
end
|
|
46
37
|
end
|
|
@@ -9,7 +9,10 @@ require_relative '../workers/queue'
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Core
|
|
11
11
|
module Telemetry
|
|
12
|
-
# Accumulates events and sends them to the API at a regular interval,
|
|
12
|
+
# Accumulates events and sends them to the API at a regular interval,
|
|
13
|
+
# including heartbeat event.
|
|
14
|
+
#
|
|
15
|
+
# @api private
|
|
13
16
|
class Worker
|
|
14
17
|
include Core::Workers::Queue
|
|
15
18
|
include Core::Workers::Polling
|
|
@@ -24,6 +27,9 @@ module Datadog
|
|
|
24
27
|
metrics_manager:,
|
|
25
28
|
dependency_collection:,
|
|
26
29
|
logger:,
|
|
30
|
+
settings:,
|
|
31
|
+
agent_settings:,
|
|
32
|
+
extended_heartbeat_interval_seconds:,
|
|
27
33
|
enabled: true,
|
|
28
34
|
shutdown_timeout: Workers::Polling::DEFAULT_SHUTDOWN_TIMEOUT,
|
|
29
35
|
buffer_size: DEFAULT_BUFFER_MAX_SIZE
|
|
@@ -32,33 +38,50 @@ module Datadog
|
|
|
32
38
|
@metrics_manager = metrics_manager
|
|
33
39
|
@dependency_collection = dependency_collection
|
|
34
40
|
@logger = logger
|
|
41
|
+
@settings = settings
|
|
42
|
+
@agent_settings = agent_settings
|
|
35
43
|
|
|
36
44
|
@ticks_per_heartbeat = (heartbeat_interval_seconds / metrics_aggregation_interval_seconds).to_i
|
|
45
|
+
@ticks_per_extended_heartbeat = (extended_heartbeat_interval_seconds / metrics_aggregation_interval_seconds).to_i
|
|
37
46
|
@current_ticks = 0
|
|
38
47
|
|
|
39
48
|
# Workers::Polling settings
|
|
40
49
|
self.enabled = enabled
|
|
41
50
|
# Workers::IntervalLoop settings
|
|
42
51
|
self.loop_base_interval = metrics_aggregation_interval_seconds
|
|
43
|
-
|
|
52
|
+
# We actually restart the worker after fork, but this is done
|
|
53
|
+
# via the AtForkMonkeyPatch rather than the worker fork policy
|
|
54
|
+
# because we also need to reset state outside of the worker
|
|
55
|
+
# (e.g. the metrics).
|
|
56
|
+
self.fork_policy = Core::Workers::Async::Thread::FORK_POLICY_RESTART
|
|
44
57
|
|
|
45
58
|
@shutdown_timeout = shutdown_timeout
|
|
46
59
|
@buffer_size = buffer_size
|
|
47
60
|
|
|
61
|
+
initialize_state
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# To make the method calls clear, the initialization code is in this
|
|
65
|
+
# method called +initialize_state+ which is called from +after_fork+.
|
|
66
|
+
# This way users of this class (e.g. telemetry Component) do not
|
|
67
|
+
# need to invoke +initialize_state+ directly, which can be confusing.
|
|
68
|
+
private def initialize_state
|
|
48
69
|
self.buffer = buffer_klass.new(@buffer_size)
|
|
49
70
|
|
|
50
71
|
@initial_event_once = Utils::OnlyOnceSuccessful.new(APP_STARTED_EVENT_RETRIES)
|
|
72
|
+
@extended_heartbeat_ticks = 0
|
|
51
73
|
end
|
|
52
74
|
|
|
53
75
|
attr_reader :logger
|
|
54
76
|
attr_reader :initial_event_once
|
|
55
77
|
attr_reader :initial_event
|
|
78
|
+
attr_reader :emitter
|
|
56
79
|
|
|
57
80
|
# Returns true if worker thread is successfully started,
|
|
58
81
|
# false if worker thread was not started but telemetry is enabled,
|
|
59
82
|
# nil if telemetry is disabled.
|
|
60
83
|
def start(initial_event)
|
|
61
|
-
return
|
|
84
|
+
return unless enabled?
|
|
62
85
|
|
|
63
86
|
@initial_event = initial_event
|
|
64
87
|
|
|
@@ -79,7 +102,7 @@ module Datadog
|
|
|
79
102
|
# for not enqueueing event (presently) is that telemetry is disabled
|
|
80
103
|
# altogether, and in this case other methods return nil.
|
|
81
104
|
def enqueue(event)
|
|
82
|
-
return
|
|
105
|
+
return unless enabled?
|
|
83
106
|
|
|
84
107
|
buffer.push(event)
|
|
85
108
|
true
|
|
@@ -102,38 +125,16 @@ module Datadog
|
|
|
102
125
|
# been flushed.
|
|
103
126
|
#
|
|
104
127
|
# @api private
|
|
105
|
-
def flush
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
loop do
|
|
110
|
-
# The AppStarted event is triggered by the worker itself,
|
|
111
|
-
# from the worker thread. As such the main thread has no way
|
|
112
|
-
# to delay itself until that event is queued and we need some
|
|
113
|
-
# way to wait until that event is sent out to assert on it in
|
|
114
|
-
# the test suite. Check the run once flag which *should*
|
|
115
|
-
# indicate the event has been queued (at which point our queue
|
|
116
|
-
# depth check should waint until it's sent).
|
|
117
|
-
# This is still a hack because the flag can be overridden
|
|
118
|
-
# either way with or without the event being sent out.
|
|
119
|
-
# Note that if the AppStarted sending fails, this check
|
|
120
|
-
# will return false and flushing will be blocked until the
|
|
121
|
-
# 15 second timeout.
|
|
122
|
-
# Note that the first wait interval between telemetry event
|
|
123
|
-
# sending is 10 seconds, the timeout needs to be strictly
|
|
124
|
-
# greater than that.
|
|
125
|
-
return true if buffer.empty? && !in_iteration? && sent_initial_event?
|
|
126
|
-
|
|
127
|
-
sleep 0.5
|
|
128
|
-
|
|
129
|
-
return false if Utils::Time.get_time - started > 15
|
|
130
|
-
end
|
|
128
|
+
def flush(timeout: nil)
|
|
129
|
+
# Increase default timeout to 15 seconds - see the comment in
|
|
130
|
+
# +idle?+ for more details.
|
|
131
|
+
super(timeout: timeout || 15)
|
|
131
132
|
end
|
|
132
133
|
|
|
133
134
|
private
|
|
134
135
|
|
|
135
136
|
def perform(*events)
|
|
136
|
-
return
|
|
137
|
+
return unless enabled?
|
|
137
138
|
|
|
138
139
|
if need_initial_event?
|
|
139
140
|
started!
|
|
@@ -157,6 +158,13 @@ module Datadog
|
|
|
157
158
|
end
|
|
158
159
|
|
|
159
160
|
@current_ticks += 1
|
|
161
|
+
@extended_heartbeat_ticks += 1
|
|
162
|
+
|
|
163
|
+
if @extended_heartbeat_ticks >= @ticks_per_extended_heartbeat
|
|
164
|
+
@extended_heartbeat_ticks = 0
|
|
165
|
+
extended_heartbeat!
|
|
166
|
+
end
|
|
167
|
+
|
|
160
168
|
return if @current_ticks < @ticks_per_heartbeat
|
|
161
169
|
|
|
162
170
|
@current_ticks = 0
|
|
@@ -176,6 +184,12 @@ module Datadog
|
|
|
176
184
|
send_event(Event::AppHeartbeat.new)
|
|
177
185
|
end
|
|
178
186
|
|
|
187
|
+
def extended_heartbeat!
|
|
188
|
+
return if !enabled? || !sent_initial_event?
|
|
189
|
+
|
|
190
|
+
send_event(Event::AppExtendedHeartbeat.new(settings: @settings, agent_settings: @agent_settings))
|
|
191
|
+
end
|
|
192
|
+
|
|
179
193
|
def started!
|
|
180
194
|
return unless enabled?
|
|
181
195
|
|
|
@@ -189,7 +203,9 @@ module Datadog
|
|
|
189
203
|
# dependencies and send the new ones.
|
|
190
204
|
# System tests demand only one instance of this event per
|
|
191
205
|
# dependency.
|
|
192
|
-
|
|
206
|
+
if @dependency_collection && initial_event.app_started?
|
|
207
|
+
send_event(Event::AppDependenciesLoaded.new)
|
|
208
|
+
end
|
|
193
209
|
|
|
194
210
|
true
|
|
195
211
|
else
|
|
@@ -212,6 +228,8 @@ module Datadog
|
|
|
212
228
|
res
|
|
213
229
|
end
|
|
214
230
|
|
|
231
|
+
# This method overrides Queue's dequeue method and does LIFO instead
|
|
232
|
+
# of FIFO that Queue implements. Why?
|
|
215
233
|
def dequeue
|
|
216
234
|
buffer.pop
|
|
217
235
|
end
|
|
@@ -240,6 +258,45 @@ module Datadog
|
|
|
240
258
|
disable!
|
|
241
259
|
end
|
|
242
260
|
|
|
261
|
+
# Call this method in a forked child to reset the state of this worker.
|
|
262
|
+
#
|
|
263
|
+
# Discard any accumulated events since they will be sent by
|
|
264
|
+
# the parent.
|
|
265
|
+
# Discard any accumulated metrics.
|
|
266
|
+
# Restart the worker thread, if it was running in the parent process.
|
|
267
|
+
#
|
|
268
|
+
# This method cannot be called +after_fork+ because workers define
|
|
269
|
+
# and call +after_fork+ which is supposed to do different things.
|
|
270
|
+
def after_fork_monkey_patched
|
|
271
|
+
# If telemetry is disabled, we still reset the state to avoid
|
|
272
|
+
# having wrong state. It is possible that in the future telemetry
|
|
273
|
+
# will be re-enabled after errors.
|
|
274
|
+
initialize_state
|
|
275
|
+
# In the child process, we get a new runtime_id.
|
|
276
|
+
# As such we need to send AppStarted event.
|
|
277
|
+
# In the parent process, the event may have been the
|
|
278
|
+
# SynthAppClientConfigurationChange instead of AppStarted,
|
|
279
|
+
# and in that case we need to convert it to the "regular"
|
|
280
|
+
# AppStarted event.
|
|
281
|
+
if defined?(@initial_event) && @initial_event.is_a?(Event::SynthAppClientConfigurationChange)
|
|
282
|
+
# It would be great to just replace the initial event in
|
|
283
|
+
# +initialize_state+ method. Unfortunately this event requires
|
|
284
|
+
# the entire component tree to build its payload, which we
|
|
285
|
+
# 1) don't currently have in telemetry and
|
|
286
|
+
# 2) don't want to keep a permanent reference to in any case.
|
|
287
|
+
# Therefore we have this +reset!+ method that changes the
|
|
288
|
+
# event type while keeping the payload.
|
|
289
|
+
@initial_event.reset! # steep:ignore NoMethod
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
if enabled? && !worker.nil?
|
|
293
|
+
# Start the background thread if it was started in the parent
|
|
294
|
+
# process (which requires telemetry to be enabled).
|
|
295
|
+
# This should be done after all of the state resets.
|
|
296
|
+
perform
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
243
300
|
# Deduplicate logs by counting the number of repeated occurrences of the same log
|
|
244
301
|
# entry and replacing them with a single entry with the calculated `count` value.
|
|
245
302
|
# Non-log events are unchanged.
|
|
@@ -270,6 +327,25 @@ module Datadog
|
|
|
270
327
|
|
|
271
328
|
other_events + uniq_logs
|
|
272
329
|
end
|
|
330
|
+
|
|
331
|
+
def idle?
|
|
332
|
+
# The AppStarted event is triggered by the worker itself,
|
|
333
|
+
# from the worker thread. As such the main thread has no way
|
|
334
|
+
# to delay itself until that event is queued and we need some
|
|
335
|
+
# way to wait until that event is sent out to assert on it in
|
|
336
|
+
# the test suite. Check the run once flag which *should*
|
|
337
|
+
# indicate the event has been queued (at which point our queue
|
|
338
|
+
# depth check should wait until it's sent).
|
|
339
|
+
# This is still a hack because the flag can be overridden
|
|
340
|
+
# either way with or without the event being sent out.
|
|
341
|
+
# Note that if the AppStarted sending fails, this check
|
|
342
|
+
# will return false and flushing will be blocked until the
|
|
343
|
+
# 15 second timeout.
|
|
344
|
+
# Note that the first wait interval between telemetry event
|
|
345
|
+
# sending is 10 seconds, the timeout needs to be strictly
|
|
346
|
+
# greater than that.
|
|
347
|
+
super && sent_initial_event?
|
|
348
|
+
end
|
|
273
349
|
end
|
|
274
350
|
end
|
|
275
351
|
end
|
|
@@ -8,6 +8,9 @@ module Datadog
|
|
|
8
8
|
module Ext
|
|
9
9
|
module HTTP
|
|
10
10
|
HEADER_CONTAINER_ID = 'Datadog-Container-ID'
|
|
11
|
+
HEADER_CONTAINER_TAGS_HASH = 'Datadog-Container-Tags-Hash'
|
|
12
|
+
HEADER_ENTITY_ID = 'Datadog-Entity-ID'
|
|
13
|
+
HEADER_EXTERNAL_ENV = 'Datadog-External-Env'
|
|
11
14
|
HEADER_DD_API_KEY = 'DD-API-KEY'
|
|
12
15
|
# Tells agent that `_dd.top_level` metrics have been set by the tracer.
|
|
13
16
|
# The agent will not calculate top-level spans but instead trust the tracer tagging.
|
|
@@ -48,7 +48,7 @@ module Datadog
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def get(env)
|
|
51
|
-
get = ::Net::HTTP::Get.new(env
|
|
51
|
+
get = ::Net::HTTP::Get.new(net_http_path_from_env(env), env.headers)
|
|
52
52
|
|
|
53
53
|
# Connect and send the request
|
|
54
54
|
http_response = open do |http|
|
|
@@ -63,7 +63,7 @@ module Datadog
|
|
|
63
63
|
post = nil
|
|
64
64
|
|
|
65
65
|
if env.form.nil? || env.form.empty?
|
|
66
|
-
post = ::Net::HTTP::Post.new(env
|
|
66
|
+
post = ::Net::HTTP::Post.new(net_http_path_from_env(env), env.headers)
|
|
67
67
|
post.body = env.body
|
|
68
68
|
else
|
|
69
69
|
post = ::Datadog::Core::Vendor::Net::HTTP::Post::Multipart.new(
|
|
@@ -86,6 +86,21 @@ module Datadog
|
|
|
86
86
|
"http://#{hostname}:#{port}?timeout=#{timeout}"
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
+
def net_http_path_from_env(env)
|
|
90
|
+
path = env.path
|
|
91
|
+
case query = env.query
|
|
92
|
+
when Hash
|
|
93
|
+
path = path + '?' + URI.encode_www_form(query)
|
|
94
|
+
when String
|
|
95
|
+
path = path + '?' + query
|
|
96
|
+
when nil
|
|
97
|
+
# Nothing
|
|
98
|
+
else
|
|
99
|
+
raise ArgumentError, "Invalid type for query: #{query}"
|
|
100
|
+
end
|
|
101
|
+
path
|
|
102
|
+
end
|
|
103
|
+
|
|
89
104
|
# Raised when called with an unknown HTTP method
|
|
90
105
|
class UnknownHTTPMethod < StandardError
|
|
91
106
|
attr_reader :verb
|
|
@@ -9,13 +9,18 @@ module Datadog
|
|
|
9
9
|
module API
|
|
10
10
|
# Endpoint
|
|
11
11
|
class Endpoint
|
|
12
|
-
attr_reader
|
|
13
|
-
|
|
14
|
-
:path
|
|
12
|
+
attr_reader :verb
|
|
13
|
+
attr_reader :path
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
# TODO Currently only Traces transport specifies an encoder.
|
|
16
|
+
# Other transports perform encoding "inline" / ad-hoc.
|
|
17
|
+
# They should probably use this encoder field instead.
|
|
18
|
+
attr_reader :encoder
|
|
19
|
+
|
|
20
|
+
def initialize(verb, path, encoder: nil)
|
|
17
21
|
@verb = verb
|
|
18
22
|
@path = path
|
|
23
|
+
@encoder = encoder
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
def call(env)
|
|
@@ -7,36 +7,19 @@ module Datadog
|
|
|
7
7
|
module API
|
|
8
8
|
# An API configured with adapter and routes
|
|
9
9
|
class Instance
|
|
10
|
-
# Raised when an endpoint is invoked on an API that is not the
|
|
11
|
-
# of expected API class for that endpoint.
|
|
12
|
-
class EndpointNotSupportedError < StandardError
|
|
13
|
-
attr_reader :spec, :endpoint_name
|
|
14
|
-
|
|
15
|
-
def initialize(endpoint_name, spec)
|
|
16
|
-
@spec = spec
|
|
17
|
-
@endpoint_name = endpoint_name
|
|
18
|
-
|
|
19
|
-
super(message)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def message
|
|
23
|
-
"#{endpoint_name} not supported for this API!"
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
10
|
attr_reader \
|
|
28
11
|
:adapter,
|
|
29
12
|
:headers,
|
|
30
|
-
:
|
|
13
|
+
:endpoint
|
|
31
14
|
|
|
32
|
-
def initialize(
|
|
33
|
-
@
|
|
15
|
+
def initialize(endpoint, adapter, options = {})
|
|
16
|
+
@endpoint = endpoint
|
|
34
17
|
@adapter = adapter
|
|
35
18
|
@headers = options.fetch(:headers, {})
|
|
36
19
|
end
|
|
37
20
|
|
|
38
21
|
def encoder
|
|
39
|
-
|
|
22
|
+
endpoint.encoder
|
|
40
23
|
end
|
|
41
24
|
|
|
42
25
|
def call(env)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../../configuration/
|
|
3
|
+
require_relative '../../configuration/agent_settings'
|
|
4
4
|
require_relative 'adapters/registry'
|
|
5
5
|
require_relative 'api/map'
|
|
6
6
|
|
|
@@ -13,7 +13,6 @@ module Datadog
|
|
|
13
13
|
REGISTRY = Datadog::Core::Transport::HTTP::Adapters::Registry.new
|
|
14
14
|
|
|
15
15
|
attr_reader \
|
|
16
|
-
:api_instance_class,
|
|
17
16
|
:apis,
|
|
18
17
|
:api_options,
|
|
19
18
|
:default_adapter,
|
|
@@ -21,7 +20,7 @@ module Datadog
|
|
|
21
20
|
:default_headers,
|
|
22
21
|
:logger
|
|
23
22
|
|
|
24
|
-
def initialize(
|
|
23
|
+
def initialize(logger: Datadog.logger)
|
|
25
24
|
# Global settings
|
|
26
25
|
@default_adapter = nil
|
|
27
26
|
@default_headers = {}
|
|
@@ -33,7 +32,6 @@ module Datadog
|
|
|
33
32
|
# API settings
|
|
34
33
|
@api_options = {}
|
|
35
34
|
|
|
36
|
-
@api_instance_class = api_instance_class
|
|
37
35
|
@logger = logger
|
|
38
36
|
|
|
39
37
|
yield(self) if block_given?
|
|
@@ -41,7 +39,7 @@ module Datadog
|
|
|
41
39
|
|
|
42
40
|
def adapter(config, *args, **kwargs)
|
|
43
41
|
@default_adapter = case config
|
|
44
|
-
when Core::Configuration::
|
|
42
|
+
when Core::Configuration::AgentSettings
|
|
45
43
|
registry_klass = REGISTRY.get(config.adapter)
|
|
46
44
|
raise UnknownAdapterError, config.adapter if registry_klass.nil?
|
|
47
45
|
|
|
@@ -73,6 +71,12 @@ module Datadog
|
|
|
73
71
|
@apis[key] = spec
|
|
74
72
|
|
|
75
73
|
# Apply as default API, if specified to do so.
|
|
74
|
+
#
|
|
75
|
+
# This code also sets the first defined API to be the default API.
|
|
76
|
+
# In APIs without fallbacks (currently, everything other than
|
|
77
|
+
# tracing's Traces, though DI Input will also have fallbacks soon)
|
|
78
|
+
# there is only one declaration of `transport.api`, and that
|
|
79
|
+
# API is set as the default API in the transport by this line.
|
|
76
80
|
@default_api = key if options.delete(:default) || @default_api.nil?
|
|
77
81
|
|
|
78
82
|
# Save all other settings for initialization
|
|
@@ -94,7 +98,7 @@ module Datadog
|
|
|
94
98
|
def to_api_instances
|
|
95
99
|
raise NoApisError if @apis.empty?
|
|
96
100
|
|
|
97
|
-
@apis.inject(
|
|
101
|
+
@apis.inject(API::Map.new) do |instances, (key, spec)|
|
|
98
102
|
instances.tap do
|
|
99
103
|
api_options = @api_options[key].dup
|
|
100
104
|
|
|
@@ -107,7 +111,7 @@ module Datadog
|
|
|
107
111
|
api_options[:headers] = @default_headers.merge((api_options[:headers] || {}))
|
|
108
112
|
|
|
109
113
|
# Add API::Instance with all settings
|
|
110
|
-
instances[key] =
|
|
114
|
+
instances[key] = API::Instance.new(
|
|
111
115
|
spec,
|
|
112
116
|
adapter,
|
|
113
117
|
api_options
|