datadog 2.12.1 → 2.19.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 +243 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
- data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +10 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
- data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
- data/ext/libdatadog_api/crashtracker.c +11 -12
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/extconf.rb +2 -2
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +164 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +112 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +71 -0
- data/lib/datadog/appsec/api_security/sampler.rb +59 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +257 -85
- data/lib/datadog/appsec/assets/waf_rules/strict.json +10 -78
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +46 -61
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +153 -30
- data/lib/datadog/appsec/context.rb +7 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +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} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +42 -30
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +4 -2
- 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/telemetry.rb +1 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
- data/lib/datadog/appsec/remote.rb +31 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +194 -0
- data/lib/datadog/appsec/security_engine/runner.rb +13 -14
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -8
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -46
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +48 -31
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +4 -0
- data/lib/datadog/core/configuration/option.rb +81 -45
- data/lib/datadog/core/configuration/option_definition.rb +4 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +109 -44
- data/lib/datadog/core/configuration/stable_config.rb +22 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -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 +20 -21
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
- data/lib/datadog/core/process_discovery.rb +36 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +40 -32
- data/lib/datadog/core/remote/component.rb +6 -9
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +14 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +22 -57
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/tag_builder.rb +56 -0
- data/lib/datadog/core/telemetry/component.rb +81 -52
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -472
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +5 -4
- data/lib/datadog/core/telemetry/logging.rb +11 -5
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +90 -24
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +19 -17
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http.rb +39 -2
- 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/utils.rb +7 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/component.rb +0 -2
- data/lib/datadog/di/instrumenter.rb +48 -5
- data/lib/datadog/di/probe_notification_builder.rb +38 -43
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +2 -0
- data/lib/datadog/di/serializer.rb +10 -2
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +18 -35
- data/lib/datadog/di/transport/http.rb +14 -62
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -33
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events/v2.rb +195 -0
- data/lib/datadog/kit/appsec/events.rb +12 -0
- data/lib/datadog/kit/identity.rb +5 -1
- 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 +18 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +44 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +8 -9
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext.rb +0 -14
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +7 -61
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +7 -41
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +7 -2
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -12
- data/lib/datadog/tracing/configuration/ext.rb +7 -1
- data/lib/datadog/tracing/configuration/settings.rb +18 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +11 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -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/faraday/middleware.rb +5 -3
- 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/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- 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/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- 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/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +61 -40
- 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/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- 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/diagnostics/environment_logger.rb +3 -1
- 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 +10 -1
- data/lib/datadog/tracing/span_event.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +68 -16
- data/lib/datadog/tracing/sync_writer.rb +2 -3
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +55 -27
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +51 -7
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -41
- data/lib/datadog/tracing/transport/http.rb +11 -44
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +26 -9
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
- data/lib/datadog/tracing/writer.rb +2 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +8 -2
- metadata +88 -23
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -11,11 +11,12 @@ 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
17
|
attr_reader :transport, :repository, :id, :dispatcher, :logger
|
17
18
|
|
18
|
-
def initialize(transport, capabilities, logger
|
19
|
+
def initialize(transport, capabilities, logger: Datadog.logger, repository: Configuration::Repository.new)
|
19
20
|
@transport = transport
|
20
21
|
@logger = logger
|
21
22
|
|
@@ -119,7 +120,7 @@ module Datadog
|
|
119
120
|
end
|
120
121
|
end
|
121
122
|
|
122
|
-
def payload #
|
123
|
+
def payload # standard:disable Metrics/MethodLength
|
123
124
|
state = repository.state
|
124
125
|
|
125
126
|
client_tracer_tags = [
|
@@ -134,12 +135,19 @@ module Datadog
|
|
134
135
|
"ruby.runtime.engine.name:#{RUBY_ENGINE}",
|
135
136
|
"ruby.runtime.engine.version:#{ruby_engine_version}",
|
136
137
|
"ruby.rubygems.platform.local:#{Gem::Platform.local}",
|
137
|
-
"ruby.gem.libddwaf.version:#{gem_spec(
|
138
|
-
"ruby.gem.libddwaf.platform:#{gem_spec(
|
139
|
-
"ruby.gem.libdatadog.version:#{gem_spec(
|
140
|
-
"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}",
|
141
142
|
]
|
142
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
|
+
|
143
151
|
client_tracer = {
|
144
152
|
runtime_id: Core::Environment::Identity.id,
|
145
153
|
language: Core::Environment::Identity.lang,
|
@@ -195,37 +203,37 @@ module Datadog
|
|
195
203
|
return @native_platform unless @native_platform.nil?
|
196
204
|
|
197
205
|
os = if RUBY_ENGINE == 'jruby'
|
198
|
-
|
206
|
+
os_name = java.lang.System.get_property('os.name')
|
199
207
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
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
|
208
216
|
|
209
217
|
version = if os != 'linux'
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
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
|
217
225
|
|
218
226
|
cpu = if RUBY_ENGINE == 'jruby'
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
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
|
229
237
|
|
230
238
|
@native_platform = [cpu, os, version].compact.join('-')
|
231
239
|
end
|
@@ -18,11 +18,8 @@ module Datadog
|
|
18
18
|
def initialize(settings, capabilities, agent_settings, logger:)
|
19
19
|
@logger = logger
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
negotiation = Negotiation.new(settings, agent_settings)
|
25
|
-
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options) # steep:ignore
|
21
|
+
negotiation = Negotiation.new(settings, agent_settings, logger: logger)
|
22
|
+
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(agent_settings: agent_settings, logger: logger)
|
26
23
|
|
27
24
|
@barrier = Barrier.new(settings.remote.boot_timeout_seconds)
|
28
25
|
|
@@ -45,16 +42,16 @@ module Datadog
|
|
45
42
|
logger.error do
|
46
43
|
"remote worker client sync error: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
|
47
44
|
end
|
48
|
-
rescue
|
45
|
+
rescue => e
|
49
46
|
# In case of unexpected errors, reset the negotiation object
|
50
47
|
# given external conditions have changed and the negotiation
|
51
48
|
# negotiation object stores error logging state that should be reset.
|
52
|
-
negotiation = Negotiation.new(settings, agent_settings)
|
49
|
+
negotiation = Negotiation.new(settings, agent_settings, logger: logger)
|
53
50
|
|
54
51
|
# Transient errors due to network or agent. Logged the error but not via telemetry
|
55
52
|
logger.error do
|
56
|
-
"remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. "\
|
57
|
-
'
|
53
|
+
"remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. " \
|
54
|
+
'resetting client state'
|
58
55
|
end
|
59
56
|
|
60
57
|
# client state is unknown, state might be corrupted
|
@@ -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)
|
@@ -237,6 +237,10 @@ module Datadog
|
|
237
237
|
@path = path
|
238
238
|
@previous = previous
|
239
239
|
end
|
240
|
+
|
241
|
+
def type
|
242
|
+
:delete
|
243
|
+
end
|
240
244
|
end
|
241
245
|
|
242
246
|
# Insert change
|
@@ -247,6 +251,10 @@ module Datadog
|
|
247
251
|
@path = path
|
248
252
|
@content = content
|
249
253
|
end
|
254
|
+
|
255
|
+
def type
|
256
|
+
:insert
|
257
|
+
end
|
250
258
|
end
|
251
259
|
|
252
260
|
# Update change
|
@@ -258,6 +266,10 @@ module Datadog
|
|
258
266
|
@content = content
|
259
267
|
@previous = previous
|
260
268
|
end
|
269
|
+
|
270
|
+
def type
|
271
|
+
:update
|
272
|
+
end
|
261
273
|
end
|
262
274
|
end
|
263
275
|
|
@@ -272,7 +284,8 @@ module Datadog
|
|
272
284
|
|
273
285
|
return deleted(path, previous) if previous && content.nil?
|
274
286
|
return inserted(path, content) if content && previous.nil?
|
275
|
-
|
287
|
+
|
288
|
+
updated(path, content, previous) if content && previous
|
276
289
|
end
|
277
290
|
|
278
291
|
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!
|
@@ -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
|
@@ -5,6 +5,7 @@ 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
|
|
@@ -20,9 +21,11 @@ module Datadog
|
|
20
21
|
include Datadog::Core::Transport::HTTP::Response
|
21
22
|
include Core::Remote::Transport::Config::Response
|
22
23
|
|
23
|
-
def initialize(http_response, options = {}) #
|
24
|
+
def initialize(http_response, options = {}) # standard:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
24
25
|
super(http_response)
|
25
26
|
|
27
|
+
raise AgentErrorResponse.new(http_response.code, http_response.payload) if http_response.code != 200
|
28
|
+
|
26
29
|
begin
|
27
30
|
payload = JSON.parse(http_response.payload, symbolize_names: true)
|
28
31
|
rescue JSON::ParserError => e
|
@@ -130,8 +133,21 @@ module Datadog
|
|
130
133
|
end
|
131
134
|
end
|
132
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
|
+
|
133
149
|
# When an expected value type is incorrect
|
134
|
-
class TypeError <
|
150
|
+
class TypeError < ConfigError
|
135
151
|
def initialize(type, value)
|
136
152
|
message = "not a #{type}: #{value.inspect}"
|
137
153
|
|
@@ -140,7 +156,7 @@ module Datadog
|
|
140
156
|
end
|
141
157
|
|
142
158
|
# When value decoding fails
|
143
|
-
class DecodeError <
|
159
|
+
class DecodeError < ConfigError
|
144
160
|
def initialize(key, value)
|
145
161
|
message = "could not decode key #{key.inspect}: #{value.inspect}"
|
146
162
|
|
@@ -149,7 +165,7 @@ module Datadog
|
|
149
165
|
end
|
150
166
|
|
151
167
|
# When value parsing fails
|
152
|
-
class ParseError <
|
168
|
+
class ParseError < ConfigError
|
153
169
|
def initialize(key, value)
|
154
170
|
message = "could not parse key #{key.inspect}: #{value.inspect}"
|
155
171
|
|
@@ -177,51 +193,25 @@ module Datadog
|
|
177
193
|
end
|
178
194
|
|
179
195
|
def send_config(env, &block)
|
180
|
-
raise
|
196
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('config', self) if config.nil?
|
181
197
|
|
182
198
|
config.call(env, &block)
|
183
199
|
end
|
184
|
-
|
185
|
-
# Raised when traces sent but no traces endpoint is defined
|
186
|
-
class NoConfigEndpointDefinedError < StandardError
|
187
|
-
attr_reader :spec
|
188
|
-
|
189
|
-
def initialize(spec)
|
190
|
-
super()
|
191
|
-
|
192
|
-
@spec = spec
|
193
|
-
end
|
194
|
-
|
195
|
-
def message
|
196
|
-
'No config endpoint is defined for API specification!'
|
197
|
-
end
|
198
|
-
end
|
199
200
|
end
|
200
201
|
|
201
202
|
# Extensions for HTTP API Instance
|
202
203
|
module Instance
|
203
204
|
def send_config(env)
|
204
|
-
|
205
|
+
unless spec.is_a?(Config::API::Spec)
|
206
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
207
|
+
'config', self
|
208
|
+
)
|
209
|
+
end
|
205
210
|
|
206
211
|
spec.send_config(env) do |request_env|
|
207
212
|
call(request_env)
|
208
213
|
end
|
209
214
|
end
|
210
|
-
|
211
|
-
# Raised when traces sent to API that does not support traces
|
212
|
-
class ConfigNotSupportedError < StandardError
|
213
|
-
attr_reader :spec
|
214
|
-
|
215
|
-
def initialize(spec)
|
216
|
-
super()
|
217
|
-
|
218
|
-
@spec = spec
|
219
|
-
end
|
220
|
-
|
221
|
-
def message
|
222
|
-
'Config not supported for this API!'
|
223
|
-
end
|
224
|
-
end
|
225
215
|
end
|
226
216
|
|
227
217
|
# Endpoint for remote configuration
|
@@ -241,7 +231,7 @@ module Datadog
|
|
241
231
|
env.body = env.request.parcel.data
|
242
232
|
|
243
233
|
# Query for response
|
244
|
-
http_response = super
|
234
|
+
http_response = super
|
245
235
|
|
246
236
|
response_options = {}
|
247
237
|
|
@@ -50,51 +50,25 @@ module Datadog
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def send_info(env, &block)
|
53
|
-
raise
|
53
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('info', self) if info.nil?
|
54
54
|
|
55
55
|
info.call(env, &block)
|
56
56
|
end
|
57
|
-
|
58
|
-
# Raised when traces sent but no traces endpoint is defined
|
59
|
-
class NoNegotiationEndpointDefinedError < StandardError
|
60
|
-
attr_reader :spec
|
61
|
-
|
62
|
-
def initialize(spec)
|
63
|
-
super()
|
64
|
-
|
65
|
-
@spec = spec
|
66
|
-
end
|
67
|
-
|
68
|
-
def message
|
69
|
-
'No info endpoint is defined for API specification!'
|
70
|
-
end
|
71
|
-
end
|
72
57
|
end
|
73
58
|
|
74
59
|
# Extensions for HTTP API Instance
|
75
60
|
module Instance
|
76
61
|
def send_info(env)
|
77
|
-
|
62
|
+
unless spec.is_a?(Negotiation::API::Spec)
|
63
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
64
|
+
'info', self
|
65
|
+
)
|
66
|
+
end
|
78
67
|
|
79
68
|
spec.send_info(env) do |request_env|
|
80
69
|
call(request_env)
|
81
70
|
end
|
82
71
|
end
|
83
|
-
|
84
|
-
# Raised when traces sent to API that does not support traces
|
85
|
-
class NegotiationNotSupportedError < StandardError
|
86
|
-
attr_reader :spec
|
87
|
-
|
88
|
-
def initialize(spec)
|
89
|
-
super()
|
90
|
-
|
91
|
-
@spec = spec
|
92
|
-
end
|
93
|
-
|
94
|
-
def message
|
95
|
-
'Info not supported for this API!'
|
96
|
-
end
|
97
|
-
end
|
98
72
|
end
|
99
73
|
|
100
74
|
# Endpoint for negotiation
|
@@ -105,7 +79,7 @@ module Datadog
|
|
105
79
|
|
106
80
|
def call(env, &block)
|
107
81
|
# Query for response
|
108
|
-
http_response = super
|
82
|
+
http_response = super
|
109
83
|
|
110
84
|
# Process the response
|
111
85
|
body = JSON.parse(http_response.payload, symbolize_names: true) if http_response.ok?
|
@@ -29,87 +29,52 @@ module Datadog
|
|
29
29
|
module HTTP
|
30
30
|
module_function
|
31
31
|
|
32
|
-
# Builds a new Transport::HTTP::Client
|
33
|
-
def new(klass, &block)
|
34
|
-
Core::Transport::HTTP.build(
|
35
|
-
api_instance_class: API::Instance, &block
|
36
|
-
).to_transport(klass)
|
37
|
-
end
|
38
|
-
|
39
32
|
# Builds a new Transport::HTTP::Client with default settings
|
40
33
|
# Pass a block to override any settings.
|
41
34
|
def root(
|
42
35
|
agent_settings:,
|
43
|
-
|
36
|
+
logger: Datadog.logger,
|
37
|
+
api_version: nil,
|
38
|
+
headers: nil
|
44
39
|
)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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|
|
49
47
|
apis = API.defaults
|
50
48
|
|
51
49
|
transport.api API::ROOT, apis[API::ROOT]
|
52
50
|
|
53
|
-
# Apply any settings given by options
|
54
|
-
unless options.empty?
|
55
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
56
|
-
transport.headers options[:headers] if options.key?(:headers)
|
57
|
-
end
|
58
|
-
|
59
51
|
# Call block to apply any customization, if provided
|
60
52
|
yield(transport) if block_given?
|
61
|
-
end
|
53
|
+
end.to_transport(Core::Remote::Transport::Negotiation::Transport)
|
62
54
|
end
|
63
55
|
|
64
56
|
# Builds a new Transport::HTTP::Client with default settings
|
65
57
|
# Pass a block to override any settings.
|
66
58
|
def v7(
|
67
59
|
agent_settings:,
|
68
|
-
|
60
|
+
logger: Datadog.logger,
|
61
|
+
api_version: nil,
|
62
|
+
headers: nil
|
69
63
|
)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
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|
|
74
71
|
apis = API.defaults
|
75
72
|
|
76
73
|
transport.api API::V7, apis[API::V7]
|
77
74
|
|
78
|
-
# Apply any settings given by options
|
79
|
-
unless options.empty?
|
80
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
81
|
-
transport.headers options[:headers] if options.key?(:headers)
|
82
|
-
end
|
83
|
-
|
84
75
|
# Call block to apply any customization, if provided
|
85
76
|
yield(transport) if block_given?
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def default_headers
|
90
|
-
{
|
91
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
92
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
93
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION =>
|
94
|
-
Datadog::Core::Environment::Ext::LANG_VERSION,
|
95
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
96
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
97
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
98
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
99
|
-
}.tap do |headers|
|
100
|
-
# Add container ID, if present.
|
101
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
102
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
103
|
-
# Sending this header to the agent will disable metrics computation (and billing) on the agent side
|
104
|
-
# by pretending it has already been done on the library side.
|
105
|
-
if Datadog.configuration.appsec.standalone.enabled
|
106
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def default_adapter
|
112
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
77
|
+
end.to_transport(Core::Remote::Transport::Config::Transport)
|
113
78
|
end
|
114
79
|
end
|
115
80
|
end
|
@@ -49,12 +49,13 @@ module Datadog
|
|
49
49
|
|
50
50
|
# Negotiation transport
|
51
51
|
class Transport
|
52
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
52
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
53
53
|
|
54
|
-
def initialize(apis, default_api)
|
54
|
+
def initialize(apis, default_api, logger: Datadog.logger)
|
55
55
|
@apis = apis
|
56
|
+
@logger = logger
|
56
57
|
|
57
|
-
@client = HTTP::Client.new(current_api)
|
58
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
58
59
|
end
|
59
60
|
|
60
61
|
def send_info
|