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
@@ -13,13 +13,15 @@ module Datadog
|
|
13
13
|
# to be side-effect free.
|
14
14
|
#
|
15
15
|
# @return [Boolean] whether a resource conforms with the current limit
|
16
|
-
def allow?(size = 1)
|
16
|
+
def allow?(size = 1)
|
17
|
+
end
|
17
18
|
|
18
19
|
# The effective rate limiting ratio based on
|
19
20
|
# recent calls to `allow?`.
|
20
21
|
#
|
21
22
|
# @return [Float] recent allowance ratio
|
22
|
-
def effective_rate
|
23
|
+
def effective_rate
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
25
27
|
# Implementation of the Token Bucket metering algorithm
|
@@ -32,6 +32,12 @@ module Datadog
|
|
32
32
|
register_receivers(Datadog::AppSec::Remote.receivers(@telemetry))
|
33
33
|
end
|
34
34
|
|
35
|
+
if settings.respond_to?(:dynamic_instrumentation) && settings.dynamic_instrumentation.enabled
|
36
|
+
register_capabilities(Datadog::DI::Remote.capabilities)
|
37
|
+
register_products(Datadog::DI::Remote.products)
|
38
|
+
register_receivers(Datadog::DI::Remote.receivers(@telemetry))
|
39
|
+
end
|
40
|
+
|
35
41
|
register_capabilities(Datadog::Tracing::Remote.capabilities)
|
36
42
|
register_products(Datadog::Tracing::Remote.products)
|
37
43
|
register_receivers(Datadog::Tracing::Remote.receivers(@telemetry))
|
@@ -11,12 +11,14 @@ module Datadog
|
|
11
11
|
# Client communicates with the agent and sync remote configuration
|
12
12
|
class Client
|
13
13
|
class TransportError < StandardError; end
|
14
|
+
|
14
15
|
class SyncError < StandardError; end
|
15
16
|
|
16
|
-
attr_reader :transport, :repository, :id, :dispatcher
|
17
|
+
attr_reader :transport, :repository, :id, :dispatcher, :logger
|
17
18
|
|
18
|
-
def initialize(transport, capabilities, repository: Configuration::Repository.new)
|
19
|
+
def initialize(transport, capabilities, logger: Datadog.logger, repository: Configuration::Repository.new)
|
19
20
|
@transport = transport
|
21
|
+
@logger = logger
|
20
22
|
|
21
23
|
@repository = repository
|
22
24
|
@id = SecureRandom.uuid
|
@@ -24,95 +26,101 @@ module Datadog
|
|
24
26
|
@dispatcher = Dispatcher.new(@capabilities.receivers)
|
25
27
|
end
|
26
28
|
|
27
|
-
# rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity,Metrics/MethodLength,Metrics/CyclomaticComplexity
|
28
29
|
def sync
|
29
30
|
# TODO: Skip sync if no capabilities are registered
|
30
31
|
response = transport.send_config(payload)
|
31
32
|
|
32
33
|
if response.ok?
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
process_response(response)
|
35
|
+
elsif response.internal_error?
|
36
|
+
raise TransportError, response.to_s
|
37
|
+
end
|
38
|
+
end
|
36
39
|
|
37
|
-
|
38
|
-
end
|
40
|
+
private
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
def process_response(response)
|
43
|
+
# when response is completely empty, do nothing as in: leave as is
|
44
|
+
if response.empty?
|
45
|
+
logger.debug { 'remote: empty response => NOOP' }
|
44
46
|
|
45
|
-
|
47
|
+
return
|
48
|
+
end
|
46
49
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
+
begin
|
51
|
+
paths = response.client_configs.map do |path|
|
52
|
+
Configuration::Path.parse(path)
|
50
53
|
end
|
51
54
|
|
52
|
-
|
53
|
-
return unless paths && targets && contents
|
55
|
+
targets = Configuration::TargetMap.parse(response.targets)
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
+
contents = Configuration::ContentList.parse(response.target_files)
|
58
|
+
rescue Remote::Configuration::Path::ParseError => e
|
59
|
+
raise SyncError, e.message
|
60
|
+
end
|
57
61
|
|
58
|
-
|
59
|
-
|
60
|
-
(current.paths - paths).each { |p| transaction.delete(p) }
|
62
|
+
# To make sure steep does not complain
|
63
|
+
return unless paths && targets && contents
|
61
64
|
|
62
|
-
|
63
|
-
|
64
|
-
# match target with path
|
65
|
-
target = targets[path]
|
65
|
+
# TODO: sometimes it can strangely be so that paths.empty?
|
66
|
+
# TODO: sometimes it can strangely be so that targets.empty?
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
apply_config(paths, targets, contents)
|
69
|
+
end
|
69
70
|
|
70
|
-
|
71
|
-
|
71
|
+
def apply_config(paths, targets, contents)
|
72
|
+
changes = repository.transaction do |current, transaction|
|
73
|
+
# paths to be removed: previously applied paths minus ingress paths
|
74
|
+
(current.paths - paths).each { |p| transaction.delete(p) }
|
72
75
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
+
# go through each ingress path
|
77
|
+
paths.each do |path|
|
78
|
+
# match target with path
|
79
|
+
target = targets[path]
|
76
80
|
|
77
|
-
|
78
|
-
|
81
|
+
# abort entirely if matching target not found
|
82
|
+
raise SyncError, "no target for path '#{path}'" if target.nil?
|
79
83
|
|
80
|
-
|
84
|
+
# new paths are not in previously applied paths
|
85
|
+
new = !current.paths.include?(path)
|
81
86
|
|
82
|
-
|
83
|
-
|
87
|
+
# updated paths are in previously applied paths
|
88
|
+
# but the content hash changed
|
89
|
+
changed = current.paths.include?(path) && !current.contents.find_content(path, target)
|
84
90
|
|
85
|
-
|
86
|
-
|
91
|
+
# skip if unchanged
|
92
|
+
same = !new && !changed
|
87
93
|
|
88
|
-
|
89
|
-
# TODO: metadata (hash, version, etc...)
|
90
|
-
transaction.insert(path, target, content) if new
|
91
|
-
transaction.update(path, target, content) if changed
|
92
|
-
end
|
94
|
+
next if same
|
93
95
|
|
94
|
-
#
|
95
|
-
|
96
|
-
transaction.set(targets_version: targets.version)
|
96
|
+
# match content with path and target
|
97
|
+
content = contents.find_content(path, target)
|
97
98
|
|
98
|
-
#
|
99
|
-
|
100
|
-
end
|
99
|
+
# abort entirely if matching content not found
|
100
|
+
raise SyncError, "no valid content for target at path '#{path}'" if content.nil?
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
# to be added or updated << config
|
103
|
+
# TODO: metadata (hash, version, etc...)
|
104
|
+
transaction.insert(path, target, content) if new
|
105
|
+
transaction.update(path, target, content) if changed
|
106
106
|
end
|
107
|
-
|
108
|
-
|
107
|
+
|
108
|
+
# save backend opaque backend state
|
109
|
+
transaction.set(opaque_backend_state: targets.opaque_backend_state)
|
110
|
+
transaction.set(targets_version: targets.version)
|
111
|
+
|
112
|
+
# upon transaction end, new list of applied config + metadata (add, change, remove) will be saved
|
113
|
+
# TODO: also remove stale config (matching removed) from cache (client configs is exhaustive list of paths)
|
109
114
|
end
|
110
|
-
end
|
111
|
-
# rubocop:enable Metrics/AbcSize,Metrics/PerceivedComplexity,Metrics/MethodLength,Metrics/CyclomaticComplexity
|
112
115
|
|
113
|
-
|
116
|
+
if changes.empty?
|
117
|
+
logger.debug { 'remote: no changes' }
|
118
|
+
else
|
119
|
+
dispatcher.dispatch(changes, repository)
|
120
|
+
end
|
121
|
+
end
|
114
122
|
|
115
|
-
def payload #
|
123
|
+
def payload # standard:disable Metrics/MethodLength
|
116
124
|
state = repository.state
|
117
125
|
|
118
126
|
client_tracer_tags = [
|
@@ -127,12 +135,19 @@ module Datadog
|
|
127
135
|
"ruby.runtime.engine.name:#{RUBY_ENGINE}",
|
128
136
|
"ruby.runtime.engine.version:#{ruby_engine_version}",
|
129
137
|
"ruby.rubygems.platform.local:#{Gem::Platform.local}",
|
130
|
-
"ruby.gem.libddwaf.version:#{gem_spec(
|
131
|
-
"ruby.gem.libddwaf.platform:#{gem_spec(
|
132
|
-
"ruby.gem.libdatadog.version:#{gem_spec(
|
133
|
-
"ruby.gem.libdatadog.platform:#{gem_spec(
|
138
|
+
"ruby.gem.libddwaf.version:#{gem_spec("libddwaf").version}",
|
139
|
+
"ruby.gem.libddwaf.platform:#{gem_spec("libddwaf").platform}",
|
140
|
+
"ruby.gem.libdatadog.version:#{gem_spec("libdatadog").version}",
|
141
|
+
"ruby.gem.libdatadog.platform:#{gem_spec("libdatadog").platform}",
|
134
142
|
]
|
135
143
|
|
144
|
+
if (git_repository_url = Core::Environment::Git.git_repository_url)
|
145
|
+
client_tracer_tags << "git.repository_url:#{git_repository_url}"
|
146
|
+
end
|
147
|
+
if (git_commit_sha = Core::Environment::Git.git_commit_sha)
|
148
|
+
client_tracer_tags << "git.commit.sha:#{git_commit_sha}"
|
149
|
+
end
|
150
|
+
|
136
151
|
client_tracer = {
|
137
152
|
runtime_id: Core::Environment::Identity.id,
|
138
153
|
language: Core::Environment::Identity.lang,
|
@@ -188,37 +203,37 @@ module Datadog
|
|
188
203
|
return @native_platform unless @native_platform.nil?
|
189
204
|
|
190
205
|
os = if RUBY_ENGINE == 'jruby'
|
191
|
-
|
206
|
+
os_name = java.lang.System.get_property('os.name')
|
192
207
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
208
|
+
case os_name
|
209
|
+
when /linux/i then 'linux'
|
210
|
+
when /mac/i then 'darwin'
|
211
|
+
else os_name
|
212
|
+
end
|
213
|
+
else
|
214
|
+
Gem::Platform.local.os
|
215
|
+
end
|
201
216
|
|
202
217
|
version = if os != 'linux'
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
218
|
+
nil
|
219
|
+
elsif RUBY_PLATFORM =~ /linux-(.+)$/
|
220
|
+
# Old rubygems don't handle non-gnu linux correctly
|
221
|
+
Regexp.last_match(1)
|
222
|
+
else
|
223
|
+
'gnu'
|
224
|
+
end
|
210
225
|
|
211
226
|
cpu = if RUBY_ENGINE == 'jruby'
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
227
|
+
os_arch = java.lang.System.get_property('os.arch')
|
228
|
+
|
229
|
+
case os_arch
|
230
|
+
when 'amd64' then 'x86_64'
|
231
|
+
when 'aarch64' then (os == 'darwin') ? 'arm64' : 'aarch64'
|
232
|
+
else os_arch
|
233
|
+
end
|
234
|
+
else
|
235
|
+
Gem::Platform.local.cpu
|
236
|
+
end
|
222
237
|
|
223
238
|
@native_platform = [cpu, os, version].compact.join('-')
|
224
239
|
end
|
@@ -13,22 +13,21 @@ module Datadog
|
|
13
13
|
# Configures the HTTP transport to communicate with the agent
|
14
14
|
# to fetch and sync the remote configuration
|
15
15
|
class Component
|
16
|
-
attr_reader :client, :healthy
|
16
|
+
attr_reader :logger, :client, :healthy
|
17
17
|
|
18
|
-
def initialize(settings, capabilities, agent_settings)
|
19
|
-
|
20
|
-
transport_options[:agent_settings] = agent_settings if agent_settings
|
18
|
+
def initialize(settings, capabilities, agent_settings, logger:)
|
19
|
+
@logger = logger
|
21
20
|
|
22
|
-
negotiation = Negotiation.new(settings, agent_settings)
|
23
|
-
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(
|
21
|
+
negotiation = Negotiation.new(settings, agent_settings, logger: logger)
|
22
|
+
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(agent_settings: agent_settings, logger: logger)
|
24
23
|
|
25
24
|
@barrier = Barrier.new(settings.remote.boot_timeout_seconds)
|
26
25
|
|
27
|
-
@client = Client.new(transport_v7, capabilities)
|
26
|
+
@client = Client.new(transport_v7, capabilities, logger: logger)
|
28
27
|
@healthy = false
|
29
|
-
|
28
|
+
logger.debug { "new remote configuration client: #{@client.id}" }
|
30
29
|
|
31
|
-
@worker = Worker.new(interval: settings.remote.poll_interval_seconds) do
|
30
|
+
@worker = Worker.new(interval: settings.remote.poll_interval_seconds, logger: logger) do
|
32
31
|
unless @healthy || negotiation.endpoint?('/v0.7/config')
|
33
32
|
@barrier.lift
|
34
33
|
|
@@ -40,25 +39,25 @@ module Datadog
|
|
40
39
|
@healthy ||= true
|
41
40
|
rescue Client::SyncError => e
|
42
41
|
# Transient errors due to network or agent. Logged the error but not via telemetry
|
43
|
-
|
42
|
+
logger.error do
|
44
43
|
"remote worker client sync error: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
|
45
44
|
end
|
46
|
-
rescue
|
45
|
+
rescue => e
|
47
46
|
# In case of unexpected errors, reset the negotiation object
|
48
47
|
# given external conditions have changed and the negotiation
|
49
48
|
# negotiation object stores error logging state that should be reset.
|
50
|
-
negotiation = Negotiation.new(settings, agent_settings)
|
49
|
+
negotiation = Negotiation.new(settings, agent_settings, logger: logger)
|
51
50
|
|
52
51
|
# Transient errors due to network or agent. Logged the error but not via telemetry
|
53
|
-
|
54
|
-
"remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. "\
|
55
|
-
'
|
52
|
+
logger.error do
|
53
|
+
"remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. " \
|
54
|
+
'resetting client state'
|
56
55
|
end
|
57
56
|
|
58
57
|
# client state is unknown, state might be corrupted
|
59
|
-
@client = Client.new(transport_v7, capabilities)
|
58
|
+
@client = Client.new(transport_v7, capabilities, logger: logger)
|
60
59
|
@healthy = false
|
61
|
-
|
60
|
+
logger.debug { "new remote configuration client: #{@client.id}" }
|
62
61
|
|
63
62
|
# TODO: bail out if too many errors?
|
64
63
|
end
|
@@ -152,10 +151,10 @@ module Datadog
|
|
152
151
|
#
|
153
152
|
# Those checks are instead performed inside the worker loop.
|
154
153
|
# This allows users to upgrade their agent while keeping their application running.
|
155
|
-
def build(settings, agent_settings, telemetry:)
|
154
|
+
def build(settings, agent_settings, logger:, telemetry:)
|
156
155
|
return unless settings.remote.enabled
|
157
156
|
|
158
|
-
new(settings, Client::Capabilities.new(settings, telemetry), agent_settings)
|
157
|
+
new(settings, Client::Capabilities.new(settings, telemetry), agent_settings, logger: logger)
|
159
158
|
end
|
160
159
|
end
|
161
160
|
end
|
@@ -29,13 +29,13 @@ module Datadog
|
|
29
29
|
class << self
|
30
30
|
def hexdigest(type, data)
|
31
31
|
d = case type
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
32
|
+
when :sha256
|
33
|
+
::Digest::SHA256.new
|
34
|
+
when :sha512
|
35
|
+
::Digest::SHA512.new
|
36
|
+
else
|
37
|
+
raise InvalidHashTypeError, type
|
38
|
+
end
|
39
39
|
|
40
40
|
while (buf = data.read(DIGEST_CHUNK))
|
41
41
|
d.update(buf)
|
@@ -272,7 +272,8 @@ module Datadog
|
|
272
272
|
|
273
273
|
return deleted(path, previous) if previous && content.nil?
|
274
274
|
return inserted(path, content) if content && previous.nil?
|
275
|
-
|
275
|
+
|
276
|
+
updated(path, content, previous) if content && previous
|
276
277
|
end
|
277
278
|
|
278
279
|
def deleted(path, previous)
|
@@ -7,11 +7,11 @@ module Datadog
|
|
7
7
|
module Remote
|
8
8
|
# Endpoint negotiation
|
9
9
|
class Negotiation
|
10
|
-
|
11
|
-
transport_options = {}
|
12
|
-
transport_options[:agent_settings] = agent_settings if agent_settings
|
10
|
+
attr_reader :logger
|
13
11
|
|
14
|
-
|
12
|
+
def initialize(_settings, agent_settings, logger: Datadog.logger, suppress_logging: {})
|
13
|
+
@logger = logger
|
14
|
+
@transport_root = Datadog::Core::Remote::Transport::HTTP.root(agent_settings: agent_settings, logger: logger)
|
15
15
|
@logged = suppress_logging
|
16
16
|
end
|
17
17
|
|
@@ -20,7 +20,7 @@ module Datadog
|
|
20
20
|
|
21
21
|
if res.internal_error? && network_error?(res.error)
|
22
22
|
unless @logged[:agent_unreachable]
|
23
|
-
|
23
|
+
logger.warn { "agent unreachable: cannot negotiate #{path}" }
|
24
24
|
@logged[:agent_unreachable] = true
|
25
25
|
end
|
26
26
|
|
@@ -29,7 +29,7 @@ module Datadog
|
|
29
29
|
|
30
30
|
if res.not_found?
|
31
31
|
unless @logged[:no_info_endpoint]
|
32
|
-
|
32
|
+
logger.warn { "agent reachable but has no /info endpoint: cannot negotiate #{path}" }
|
33
33
|
@logged[:no_info_endpoint] = true
|
34
34
|
end
|
35
35
|
|
@@ -38,7 +38,7 @@ module Datadog
|
|
38
38
|
|
39
39
|
unless res.ok?
|
40
40
|
unless @logged[:unexpected_response]
|
41
|
-
|
41
|
+
logger.warn { "agent reachable but unexpected response: cannot negotiate #{path}" }
|
42
42
|
@logged[:unexpected_response] = true
|
43
43
|
end
|
44
44
|
|
@@ -47,14 +47,14 @@ module Datadog
|
|
47
47
|
|
48
48
|
unless res.endpoints.include?(path)
|
49
49
|
unless @logged[:no_config_endpoint]
|
50
|
-
|
50
|
+
logger.warn { "agent reachable but does not report #{path}" }
|
51
51
|
@logged[:no_config_endpoint] = true
|
52
52
|
end
|
53
53
|
|
54
54
|
return false
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
logger.debug { "agent reachable and reports #{path}" }
|
58
58
|
|
59
59
|
true
|
60
60
|
end
|
@@ -32,12 +32,13 @@ module Datadog
|
|
32
32
|
|
33
33
|
# Config transport
|
34
34
|
class Transport
|
35
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
35
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
36
36
|
|
37
|
-
def initialize(apis, default_api)
|
37
|
+
def initialize(apis, default_api, logger: Datadog.logger)
|
38
38
|
@apis = apis
|
39
|
+
@logger = logger
|
39
40
|
|
40
|
-
@client = HTTP::Client.new(current_api)
|
41
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
41
42
|
end
|
42
43
|
|
43
44
|
##### there is only one transport! it's negotiation!
|
@@ -2,24 +2,9 @@
|
|
2
2
|
|
3
3
|
require_relative '../../../encoding'
|
4
4
|
require_relative '../../../transport/http/api/map'
|
5
|
-
|
6
|
-
|
7
|
-
#
|
8
|
-
# Separate classes are needed because transport/http/traces includes
|
9
|
-
# Trace::API::Instance which closes over and uses a single spec, which is
|
10
|
-
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
11
|
-
# need an independent toplevel path at the endpoint level.
|
12
|
-
#
|
13
|
-
# Separate classes are needed because of `include Trace::API::Instance`.
|
14
|
-
#
|
15
|
-
# Below should be:
|
16
|
-
# require_relative '../../../../datadog/core/transport/http/api/spec'
|
17
|
-
require_relative 'api/spec'
|
18
|
-
|
19
|
-
# TODO: only needed for Negotiation::API::Endpoint
|
5
|
+
require_relative '../../../transport/http/api/instance'
|
6
|
+
require_relative '../../../transport/http/api/spec'
|
20
7
|
require_relative 'negotiation'
|
21
|
-
|
22
|
-
# TODO: only needed for Config::API::Endpoint
|
23
8
|
require_relative 'config'
|
24
9
|
|
25
10
|
module Datadog
|
@@ -36,7 +21,7 @@ module Datadog
|
|
36
21
|
module_function
|
37
22
|
|
38
23
|
def defaults
|
39
|
-
|
24
|
+
Core::Transport::HTTP::API::Map[
|
40
25
|
ROOT => Spec.new do |s|
|
41
26
|
s.info = Negotiation::API::Endpoint.new(
|
42
27
|
'/info',
|
@@ -50,6 +35,16 @@ module Datadog
|
|
50
35
|
end,
|
51
36
|
]
|
52
37
|
end
|
38
|
+
|
39
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
40
|
+
include Config::API::Instance
|
41
|
+
include Negotiation::API::Instance
|
42
|
+
end
|
43
|
+
|
44
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
45
|
+
include Config::API::Spec
|
46
|
+
include Negotiation::API::Spec
|
47
|
+
end
|
53
48
|
end
|
54
49
|
end
|
55
50
|
end
|
@@ -15,10 +15,11 @@ module Datadog
|
|
15
15
|
module HTTP
|
16
16
|
# Routes, encodes, and sends tracer data to the trace agent via HTTP.
|
17
17
|
class Client
|
18
|
-
attr_reader :api
|
18
|
+
attr_reader :api, :logger
|
19
19
|
|
20
|
-
def initialize(api)
|
20
|
+
def initialize(api, logger: Datadog.logger)
|
21
21
|
@api = api
|
22
|
+
@logger = logger
|
22
23
|
end
|
23
24
|
|
24
25
|
def send_request(request, &block)
|
@@ -27,12 +28,12 @@ module Datadog
|
|
27
28
|
|
28
29
|
# Get responses from API
|
29
30
|
yield(api, env)
|
30
|
-
rescue
|
31
|
+
rescue => e
|
31
32
|
message =
|
32
33
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
33
34
|
"Location: #{Array(e.backtrace).first}"
|
34
35
|
|
35
|
-
|
36
|
+
logger.debug(message)
|
36
37
|
|
37
38
|
Datadog::Core::Transport::InternalErrorResponse.new(e)
|
38
39
|
end
|