datadog 2.7.1 → 2.17.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 +310 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +7 -8
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
- data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +17 -15
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +49 -0
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
- data/lib/datadog/appsec/api_security.rb +9 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +41 -33
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +152 -25
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
- data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +12 -3
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/collector.rb +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +5 -4
- data/lib/datadog/appsec/remote.rb +26 -12
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +88 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +23 -10
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +76 -32
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +5 -1
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +6 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +100 -41
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +43 -11
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +4 -13
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +17 -1
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +27 -27
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client/capabilities.rb +6 -0
- data/lib/datadog/core/remote/client.rb +107 -92
- data/lib/datadog/core/remote/component.rb +18 -19
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
- data/lib/datadog/core/remote/transport/http.rb +25 -94
- data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
- data/lib/datadog/core/remote/worker.rb +10 -7
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +84 -49
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -383
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +2 -2
- data/lib/datadog/core/telemetry/metric.rb +28 -6
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +128 -25
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/code_tracker.rb +26 -15
- data/lib/datadog/di/component.rb +23 -14
- data/lib/datadog/di/configuration/settings.rb +25 -1
- data/lib/datadog/di/contrib/active_record.rb +1 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +111 -20
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +14 -7
- data/lib/datadog/di/probe_builder.rb +1 -0
- data/lib/datadog/di/probe_manager.rb +11 -5
- data/lib/datadog/di/probe_notification_builder.rb +34 -8
- data/lib/datadog/di/probe_notifier_worker.rb +52 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +14 -7
- data/lib/datadog/di/transport/diagnostics.rb +62 -0
- data/lib/datadog/di/transport/http/api.rb +42 -0
- data/lib/datadog/di/transport/http/client.rb +47 -0
- data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
- data/lib/datadog/di/transport/http/input.rb +67 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +62 -0
- data/lib/datadog/di/utils.rb +103 -0
- data/lib/datadog/di.rb +14 -76
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events.rb +15 -3
- data/lib/datadog/kit/identity.rb +9 -5
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/component.rb +60 -76
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +6 -85
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/profiling/scheduler.rb +8 -1
- data/lib/datadog/profiling/stack_recorder.rb +4 -4
- data/lib/datadog/profiling/tag_builder.rb +1 -5
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +16 -12
- data/lib/datadog/tracing/configuration/ext.rb +8 -1
- data/lib/datadog/tracing/configuration/settings.rb +22 -10
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +22 -5
- data/lib/datadog/tracing/span_event.rb +124 -4
- data/lib/datadog/tracing/span_operation.rb +52 -16
- data/lib/datadog/tracing/sync_writer.rb +9 -5
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +44 -24
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +60 -12
- data/lib/datadog/tracing/transport/http/api.rb +5 -4
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -44
- data/lib/datadog/tracing/transport/http.rb +13 -70
- data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +47 -13
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
- data/lib/datadog/tracing/workers.rb +5 -4
- data/lib/datadog/tracing/writer.rb +10 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +143 -50
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/actions.rb +0 -49
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
- data/lib/datadog/di/transport.rb +0 -81
- data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -5,25 +5,10 @@ require 'json'
|
|
5
5
|
require_relative '../config'
|
6
6
|
require_relative 'client'
|
7
7
|
require_relative '../../../utils/base64'
|
8
|
+
require_relative '../../../utils/truncation'
|
8
9
|
require_relative '../../../transport/http/response'
|
9
10
|
require_relative '../../../transport/http/api/endpoint'
|
10
11
|
|
11
|
-
# TODO: Decouple standard transport/http/api/instance
|
12
|
-
#
|
13
|
-
# Separate classes are needed because transport/http/trace includes
|
14
|
-
# Trace::API::Instance which closes over and uses a single spec, which is
|
15
|
-
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
16
|
-
# need an independent toplevel path at the endpoint level.
|
17
|
-
#
|
18
|
-
# Separate classes are needed because of `include Trace::API::Instance`.
|
19
|
-
#
|
20
|
-
# Below should be:
|
21
|
-
# require_relative '../../../core/transport/http/api/instance'
|
22
|
-
require_relative 'api/instance'
|
23
|
-
# Below should be:
|
24
|
-
# require_relative '../../../core/transport/http/api/spec'
|
25
|
-
require_relative 'api/spec'
|
26
|
-
|
27
12
|
module Datadog
|
28
13
|
module Core
|
29
14
|
module Remote
|
@@ -36,9 +21,11 @@ module Datadog
|
|
36
21
|
include Datadog::Core::Transport::HTTP::Response
|
37
22
|
include Core::Remote::Transport::Config::Response
|
38
23
|
|
39
|
-
def initialize(http_response, options = {}) #
|
24
|
+
def initialize(http_response, options = {}) # standard:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
40
25
|
super(http_response)
|
41
26
|
|
27
|
+
raise AgentErrorResponse.new(http_response.code, http_response.payload) if http_response.code != 200
|
28
|
+
|
42
29
|
begin
|
43
30
|
payload = JSON.parse(http_response.payload, symbolize_names: true)
|
44
31
|
rescue JSON::ParserError => e
|
@@ -146,8 +133,21 @@ module Datadog
|
|
146
133
|
end
|
147
134
|
end
|
148
135
|
|
136
|
+
# Base class for Remote Configuration Config errors
|
137
|
+
class ConfigError < StandardError
|
138
|
+
end
|
139
|
+
|
140
|
+
# When the agent returned an error response to our request
|
141
|
+
class AgentErrorResponse < ConfigError
|
142
|
+
def initialize(code, body)
|
143
|
+
truncated_body = Core::Utils::Truncation.truncate_in_middle(body, 700, 300)
|
144
|
+
message = "Agent returned an error response: #{code}: #{truncated_body}"
|
145
|
+
super(message)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
149
|
# When an expected value type is incorrect
|
150
|
-
class TypeError <
|
150
|
+
class TypeError < ConfigError
|
151
151
|
def initialize(type, value)
|
152
152
|
message = "not a #{type}: #{value.inspect}"
|
153
153
|
|
@@ -156,7 +156,7 @@ module Datadog
|
|
156
156
|
end
|
157
157
|
|
158
158
|
# When value decoding fails
|
159
|
-
class DecodeError <
|
159
|
+
class DecodeError < ConfigError
|
160
160
|
def initialize(key, value)
|
161
161
|
message = "could not decode key #{key.inspect}: #{value.inspect}"
|
162
162
|
|
@@ -165,7 +165,7 @@ module Datadog
|
|
165
165
|
end
|
166
166
|
|
167
167
|
# When value parsing fails
|
168
|
-
class ParseError <
|
168
|
+
class ParseError < ConfigError
|
169
169
|
def initialize(key, value)
|
170
170
|
message = "could not parse key #{key.inspect}: #{value.inspect}"
|
171
171
|
|
@@ -193,51 +193,25 @@ module Datadog
|
|
193
193
|
end
|
194
194
|
|
195
195
|
def send_config(env, &block)
|
196
|
-
raise
|
196
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('config', self) if config.nil?
|
197
197
|
|
198
198
|
config.call(env, &block)
|
199
199
|
end
|
200
|
-
|
201
|
-
# Raised when traces sent but no traces endpoint is defined
|
202
|
-
class NoConfigEndpointDefinedError < StandardError
|
203
|
-
attr_reader :spec
|
204
|
-
|
205
|
-
def initialize(spec)
|
206
|
-
super()
|
207
|
-
|
208
|
-
@spec = spec
|
209
|
-
end
|
210
|
-
|
211
|
-
def message
|
212
|
-
'No config endpoint is defined for API specification!'
|
213
|
-
end
|
214
|
-
end
|
215
200
|
end
|
216
201
|
|
217
202
|
# Extensions for HTTP API Instance
|
218
203
|
module Instance
|
219
204
|
def send_config(env)
|
220
|
-
|
205
|
+
unless spec.is_a?(Config::API::Spec)
|
206
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
207
|
+
'config', self
|
208
|
+
)
|
209
|
+
end
|
221
210
|
|
222
211
|
spec.send_config(env) do |request_env|
|
223
212
|
call(request_env)
|
224
213
|
end
|
225
214
|
end
|
226
|
-
|
227
|
-
# Raised when traces sent to API that does not support traces
|
228
|
-
class ConfigNotSupportedError < StandardError
|
229
|
-
attr_reader :spec
|
230
|
-
|
231
|
-
def initialize(spec)
|
232
|
-
super()
|
233
|
-
|
234
|
-
@spec = spec
|
235
|
-
end
|
236
|
-
|
237
|
-
def message
|
238
|
-
'Config not supported for this API!'
|
239
|
-
end
|
240
|
-
end
|
241
215
|
end
|
242
216
|
|
243
217
|
# Endpoint for remote configuration
|
@@ -257,7 +231,7 @@ module Datadog
|
|
257
231
|
env.body = env.request.parcel.data
|
258
232
|
|
259
233
|
# Query for response
|
260
|
-
http_response = super
|
234
|
+
http_response = super
|
261
235
|
|
262
236
|
response_options = {}
|
263
237
|
|
@@ -270,8 +244,6 @@ module Datadog
|
|
270
244
|
# Add remote configuration behavior to transport components
|
271
245
|
###### overrides send_payload! which calls send_<endpoint>! kills any other possible endpoint!
|
272
246
|
HTTP::Client.include(Config::Client)
|
273
|
-
HTTP::API::Spec.include(Config::API::Spec)
|
274
|
-
HTTP::API::Instance.include(Config::API::Instance)
|
275
247
|
end
|
276
248
|
end
|
277
249
|
end
|
@@ -7,22 +7,6 @@ require_relative 'client'
|
|
7
7
|
require_relative '../../../transport/http/response'
|
8
8
|
require_relative '../../../transport/http/api/endpoint'
|
9
9
|
|
10
|
-
# TODO: Decouple standard transport/http/api/instance
|
11
|
-
#
|
12
|
-
# Separate classes are needed because transport/http/trace includes
|
13
|
-
# Trace::API::Instance which closes over and uses a single spec, which is
|
14
|
-
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
15
|
-
# need an independent toplevel path at the endpoint level.
|
16
|
-
#
|
17
|
-
# Separate classes are needed because of `include Trace::API::Instance`.
|
18
|
-
#
|
19
|
-
# Below should be:
|
20
|
-
# require_relative '../../../../datadog/core/transport/http/api/instance'
|
21
|
-
require_relative 'api/instance'
|
22
|
-
# Below should be:
|
23
|
-
# require_relative '../../../../datadog/core/transport/http/api/spec'
|
24
|
-
require_relative 'api/spec'
|
25
|
-
|
26
10
|
module Datadog
|
27
11
|
module Core
|
28
12
|
module Remote
|
@@ -43,6 +27,7 @@ module Datadog
|
|
43
27
|
@version = options[:version]
|
44
28
|
@endpoints = options[:endpoints]
|
45
29
|
@config = options[:config]
|
30
|
+
@span_events = options[:span_events]
|
46
31
|
end
|
47
32
|
end
|
48
33
|
|
@@ -65,51 +50,25 @@ module Datadog
|
|
65
50
|
end
|
66
51
|
|
67
52
|
def send_info(env, &block)
|
68
|
-
raise
|
53
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('info', self) if info.nil?
|
69
54
|
|
70
55
|
info.call(env, &block)
|
71
56
|
end
|
72
|
-
|
73
|
-
# Raised when traces sent but no traces endpoint is defined
|
74
|
-
class NoNegotiationEndpointDefinedError < StandardError
|
75
|
-
attr_reader :spec
|
76
|
-
|
77
|
-
def initialize(spec)
|
78
|
-
super()
|
79
|
-
|
80
|
-
@spec = spec
|
81
|
-
end
|
82
|
-
|
83
|
-
def message
|
84
|
-
'No info endpoint is defined for API specification!'
|
85
|
-
end
|
86
|
-
end
|
87
57
|
end
|
88
58
|
|
89
59
|
# Extensions for HTTP API Instance
|
90
60
|
module Instance
|
91
61
|
def send_info(env)
|
92
|
-
|
62
|
+
unless spec.is_a?(Negotiation::API::Spec)
|
63
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
64
|
+
'info', self
|
65
|
+
)
|
66
|
+
end
|
93
67
|
|
94
68
|
spec.send_info(env) do |request_env|
|
95
69
|
call(request_env)
|
96
70
|
end
|
97
71
|
end
|
98
|
-
|
99
|
-
# Raised when traces sent to API that does not support traces
|
100
|
-
class NegotiationNotSupportedError < StandardError
|
101
|
-
attr_reader :spec
|
102
|
-
|
103
|
-
def initialize(spec)
|
104
|
-
super()
|
105
|
-
|
106
|
-
@spec = spec
|
107
|
-
end
|
108
|
-
|
109
|
-
def message
|
110
|
-
'Info not supported for this API!'
|
111
|
-
end
|
112
|
-
end
|
113
72
|
end
|
114
73
|
|
115
74
|
# Endpoint for negotiation
|
@@ -120,7 +79,7 @@ module Datadog
|
|
120
79
|
|
121
80
|
def call(env, &block)
|
122
81
|
# Query for response
|
123
|
-
http_response = super
|
82
|
+
http_response = super
|
124
83
|
|
125
84
|
# Process the response
|
126
85
|
body = JSON.parse(http_response.payload, symbolize_names: true) if http_response.ok?
|
@@ -136,8 +95,6 @@ module Datadog
|
|
136
95
|
|
137
96
|
# Add negotiation behavior to transport components
|
138
97
|
HTTP::Client.include(Negotiation::Client)
|
139
|
-
HTTP::API::Spec.include(Negotiation::API::Spec)
|
140
|
-
HTTP::API::Instance.include(Negotiation::API::Instance)
|
141
98
|
end
|
142
99
|
end
|
143
100
|
end
|
@@ -1,13 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
|
-
|
5
3
|
require_relative '../../environment/container'
|
6
4
|
require_relative '../../environment/ext'
|
7
5
|
require_relative '../../transport/ext'
|
8
|
-
require_relative '../../transport/http
|
9
|
-
require_relative '../../transport/http/adapters/unix_socket'
|
10
|
-
require_relative '../../transport/http/adapters/test'
|
6
|
+
require_relative '../../transport/http'
|
11
7
|
|
12
8
|
# TODO: Improve negotiation to allow per endpoint selection
|
13
9
|
#
|
@@ -19,14 +15,6 @@ require_relative '../../transport/http/adapters/test'
|
|
19
15
|
# require_relative '../../transport/http/api'
|
20
16
|
require_relative 'http/api'
|
21
17
|
|
22
|
-
# TODO: Decouple transport/http/builder
|
23
|
-
#
|
24
|
-
# See http/builder
|
25
|
-
#
|
26
|
-
# Below should be:
|
27
|
-
# require_relative '../../transport/http/builder'
|
28
|
-
require_relative 'http/builder'
|
29
|
-
|
30
18
|
# TODO: Decouple transport/http
|
31
19
|
#
|
32
20
|
# Because a new transport is required for every (API, Client, Transport)
|
@@ -39,112 +27,55 @@ module Datadog
|
|
39
27
|
module Transport
|
40
28
|
# Namespace for HTTP transport components
|
41
29
|
module HTTP
|
42
|
-
# NOTE: Due to... legacy reasons... This class likes having a default `AgentSettings` instance to fall back to.
|
43
|
-
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
44
|
-
# represents only settings specified via environment variables + the usual defaults.
|
45
|
-
#
|
46
|
-
# DO NOT USE THIS IN NEW CODE, as it ignores any settings specified by users via `Datadog.configure`.
|
47
|
-
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS = Datadog::Core::Configuration::AgentSettingsResolver.call(
|
48
|
-
Datadog::Core::Configuration::Settings.new,
|
49
|
-
logger: nil,
|
50
|
-
)
|
51
|
-
|
52
30
|
module_function
|
53
31
|
|
54
|
-
# Builds a new Transport::HTTP::Client
|
55
|
-
def new(klass, &block)
|
56
|
-
Builder.new(&block).to_transport(klass)
|
57
|
-
end
|
58
|
-
|
59
32
|
# Builds a new Transport::HTTP::Client with default settings
|
60
33
|
# Pass a block to override any settings.
|
61
34
|
def root(
|
62
|
-
agent_settings
|
63
|
-
|
35
|
+
agent_settings:,
|
36
|
+
logger: Datadog.logger,
|
37
|
+
api_version: nil,
|
38
|
+
headers: nil
|
64
39
|
)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
40
|
+
Core::Transport::HTTP.build(
|
41
|
+
api_instance_class: API::Instance,
|
42
|
+
agent_settings: agent_settings,
|
43
|
+
logger: logger,
|
44
|
+
api_version: api_version,
|
45
|
+
headers: headers
|
46
|
+
) do |transport|
|
69
47
|
apis = API.defaults
|
70
48
|
|
71
49
|
transport.api API::ROOT, apis[API::ROOT]
|
72
50
|
|
73
|
-
# Apply any settings given by options
|
74
|
-
unless options.empty?
|
75
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
76
|
-
transport.headers options[:headers] if options.key?(:headers)
|
77
|
-
end
|
78
|
-
|
79
51
|
# Call block to apply any customization, if provided
|
80
52
|
yield(transport) if block_given?
|
81
|
-
end
|
53
|
+
end.to_transport(Core::Remote::Transport::Negotiation::Transport)
|
82
54
|
end
|
83
55
|
|
84
56
|
# Builds a new Transport::HTTP::Client with default settings
|
85
57
|
# Pass a block to override any settings.
|
86
58
|
def v7(
|
87
|
-
agent_settings
|
88
|
-
|
59
|
+
agent_settings:,
|
60
|
+
logger: Datadog.logger,
|
61
|
+
api_version: nil,
|
62
|
+
headers: nil
|
89
63
|
)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
64
|
+
Core::Transport::HTTP.build(
|
65
|
+
api_instance_class: API::Instance,
|
66
|
+
agent_settings: agent_settings,
|
67
|
+
logger: logger,
|
68
|
+
api_version: api_version,
|
69
|
+
headers: headers
|
70
|
+
) do |transport|
|
94
71
|
apis = API.defaults
|
95
72
|
|
96
73
|
transport.api API::V7, apis[API::V7]
|
97
74
|
|
98
|
-
# Apply any settings given by options
|
99
|
-
unless options.empty?
|
100
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
101
|
-
transport.headers options[:headers] if options.key?(:headers)
|
102
|
-
end
|
103
|
-
|
104
75
|
# Call block to apply any customization, if provided
|
105
76
|
yield(transport) if block_given?
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def default_headers
|
110
|
-
{
|
111
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
112
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
113
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION =>
|
114
|
-
Datadog::Core::Environment::Ext::LANG_VERSION,
|
115
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
116
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
117
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
118
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
119
|
-
}.tap do |headers|
|
120
|
-
# Add container ID, if present.
|
121
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
122
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
123
|
-
# Sending this header to the agent will disable metrics computation (and billing) on the agent side
|
124
|
-
# by pretending it has already been done on the library side.
|
125
|
-
if Datadog.configuration.appsec.standalone.enabled
|
126
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def default_adapter
|
132
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
77
|
+
end.to_transport(Core::Remote::Transport::Config::Transport)
|
133
78
|
end
|
134
|
-
|
135
|
-
# Add adapters to registry
|
136
|
-
Builder::REGISTRY.set(
|
137
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
138
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
139
|
-
)
|
140
|
-
Builder::REGISTRY.set(
|
141
|
-
Datadog::Core::Transport::HTTP::Adapters::Test,
|
142
|
-
Datadog::Core::Transport::Ext::Test::ADAPTER
|
143
|
-
)
|
144
|
-
Builder::REGISTRY.set(
|
145
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
146
|
-
Datadog::Core::Configuration::Ext::Agent::UnixSocket::ADAPTER
|
147
|
-
)
|
148
79
|
end
|
149
80
|
end
|
150
81
|
end
|
@@ -32,17 +32,30 @@ module Datadog
|
|
32
32
|
|
33
33
|
# Negotiation response
|
34
34
|
module Response
|
35
|
-
|
35
|
+
# @!attribute [r] version
|
36
|
+
# The version of the agent.
|
37
|
+
# @return [String]
|
38
|
+
# @!attribute [r] endpoints
|
39
|
+
# The HTTP endpoints the agent supports.
|
40
|
+
# @return [Array<String>]
|
41
|
+
# @!attribute [r] config
|
42
|
+
# The agent configuration. These are configured by the user when starting the agent, as well as any defaults.
|
43
|
+
# @return [Hash]
|
44
|
+
# @!attribute [r] span_events
|
45
|
+
# Whether the agent supports the top-level span events field in flushed spans.
|
46
|
+
# @return [Boolean,nil]
|
47
|
+
attr_reader :version, :endpoints, :config, :span_events
|
36
48
|
end
|
37
49
|
|
38
50
|
# Negotiation transport
|
39
51
|
class Transport
|
40
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
52
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
41
53
|
|
42
|
-
def initialize(apis, default_api)
|
54
|
+
def initialize(apis, default_api, logger: Datadog.logger)
|
43
55
|
@apis = apis
|
56
|
+
@logger = logger
|
44
57
|
|
45
|
-
@client = HTTP::Client.new(current_api)
|
58
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
46
59
|
end
|
47
60
|
|
48
61
|
def send_info
|
@@ -5,7 +5,7 @@ module Datadog
|
|
5
5
|
module Remote
|
6
6
|
# Worker executes a block every interval on a separate Thread
|
7
7
|
class Worker
|
8
|
-
def initialize(interval:, &block)
|
8
|
+
def initialize(interval:, logger:, &block)
|
9
9
|
@mutex = Mutex.new
|
10
10
|
@thr = nil
|
11
11
|
|
@@ -14,18 +14,21 @@ module Datadog
|
|
14
14
|
@stopped = false
|
15
15
|
|
16
16
|
@interval = interval
|
17
|
+
@logger = logger
|
17
18
|
raise ArgumentError, 'can not initialize a worker without a block' unless block
|
18
19
|
|
19
20
|
@block = block
|
20
21
|
end
|
21
22
|
|
23
|
+
attr_reader :logger
|
24
|
+
|
22
25
|
def start
|
23
|
-
|
26
|
+
logger.debug { 'remote worker starting' }
|
24
27
|
|
25
28
|
acquire_lock
|
26
29
|
|
27
30
|
if @stopped
|
28
|
-
|
31
|
+
logger.debug('remote worker: refusing to restart after previous stop')
|
29
32
|
return
|
30
33
|
end
|
31
34
|
|
@@ -41,13 +44,13 @@ module Datadog
|
|
41
44
|
@started = true
|
42
45
|
@starting = false
|
43
46
|
|
44
|
-
|
47
|
+
logger.debug { 'remote worker started' }
|
45
48
|
ensure
|
46
49
|
release_lock
|
47
50
|
end
|
48
51
|
|
49
52
|
def stop
|
50
|
-
|
53
|
+
logger.debug { 'remote worker stopping' }
|
51
54
|
|
52
55
|
acquire_lock
|
53
56
|
|
@@ -62,7 +65,7 @@ module Datadog
|
|
62
65
|
@thr = nil
|
63
66
|
@stopped = true
|
64
67
|
|
65
|
-
|
68
|
+
logger.debug { 'remote worker stopped' }
|
66
69
|
ensure
|
67
70
|
release_lock
|
68
71
|
end
|
@@ -92,7 +95,7 @@ module Datadog
|
|
92
95
|
end
|
93
96
|
|
94
97
|
def call
|
95
|
-
|
98
|
+
logger.debug { 'remote worker perform' }
|
96
99
|
|
97
100
|
@block.call
|
98
101
|
end
|
@@ -14,13 +14,16 @@ module Datadog
|
|
14
14
|
module Runtime
|
15
15
|
# For generating runtime metrics
|
16
16
|
class Metrics < Core::Metrics::Client
|
17
|
-
def initialize(**options)
|
17
|
+
def initialize(telemetry:, **options)
|
18
18
|
super
|
19
19
|
|
20
20
|
# Initialize service list
|
21
21
|
@services = Set.new(options.fetch(:services, []))
|
22
22
|
@service_tags = nil
|
23
23
|
compile_service_tags!
|
24
|
+
|
25
|
+
# Initialize the collection of runtime-id
|
26
|
+
@runtime_id_enabled = options.fetch(:experimental_runtime_id_enabled, false)
|
24
27
|
end
|
25
28
|
|
26
29
|
# Associate service with runtime metrics
|
@@ -93,7 +96,7 @@ module Datadog
|
|
93
96
|
|
94
97
|
def try_flush
|
95
98
|
yield
|
96
|
-
rescue
|
99
|
+
rescue => e
|
97
100
|
Datadog.logger.warn("Error while sending runtime metric. Cause: #{e.class.name} #{e.message}")
|
98
101
|
end
|
99
102
|
|
@@ -105,6 +108,9 @@ module Datadog
|
|
105
108
|
|
106
109
|
# Add services dynamically because they might change during runtime.
|
107
110
|
options[:tags].concat(service_tags) unless service_tags.nil?
|
111
|
+
|
112
|
+
# Add runtime-id dynamically because it might change during runtime.
|
113
|
+
options[:tags].concat(["runtime-id:#{Core::Environment::Identity.id}"]) if @runtime_id_enabled
|
108
114
|
end
|
109
115
|
end
|
110
116
|
|
@@ -112,7 +118,8 @@ module Datadog
|
|
112
118
|
|
113
119
|
attr_reader \
|
114
120
|
:service_tags,
|
115
|
-
:services
|
121
|
+
:services,
|
122
|
+
:runtime_id_enabled
|
116
123
|
|
117
124
|
def compile_service_tags!
|
118
125
|
@service_tags = services.to_a.collect do |service|
|
@@ -140,7 +147,7 @@ module Datadog
|
|
140
147
|
gauge(metric_name, metric_value) if metric_value
|
141
148
|
end
|
142
149
|
|
143
|
-
#
|
150
|
+
# standard:disable Metrics/MethodLength
|
144
151
|
def flush_yjit_stats
|
145
152
|
# Only on Ruby >= 3.2
|
146
153
|
try_flush do
|
@@ -188,7 +195,7 @@ module Datadog
|
|
188
195
|
end
|
189
196
|
end
|
190
197
|
end
|
191
|
-
#
|
198
|
+
# standard:enable Metrics/MethodLength
|
192
199
|
end
|
193
200
|
end
|
194
201
|
end
|