datadog 2.12.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 +154 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +16 -14
- 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 +3 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +8 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +8 -0
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +23 -23
- 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/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 +24 -2
- 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/scanners.json +926 -17
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +29 -20
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +93 -28
- data/lib/datadog/appsec/context.rb +1 -1
- 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 +19 -18
- 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 +26 -28
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +1 -1
- data/lib/datadog/appsec/remote.rb +23 -11
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/runner.rb +3 -3
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +1 -1
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +5 -5
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +50 -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 +79 -43
- 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 +68 -35
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- 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.rb +32 -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 +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/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/telemetry/component.rb +78 -53
- 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 -472
- 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/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/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 +18 -16
- 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/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/probe_notification_builder.rb +1 -1
- data/lib/datadog/di/probe_notifier_worker.rb +16 -16
- data/lib/datadog/di/remote.rb +2 -0
- 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 +7 -34
- data/lib/datadog/di/transport/http.rb +14 -62
- data/lib/datadog/di/transport/input.rb +4 -3
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +5 -32
- 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 +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 +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/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 +5 -59
- 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 +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/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +4 -1
- 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/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/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/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/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/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 +10 -1
- data/lib/datadog/tracing/span_event.rb +1 -1
- data/lib/datadog/tracing/span_operation.rb +46 -16
- data/lib/datadog/tracing/sync_writer.rb +1 -2
- 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 +45 -5
- 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 +2 -3
- metadata +80 -19
- 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/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
@@ -58,7 +58,7 @@ module Datadog
|
|
58
58
|
part = ''
|
59
59
|
part << "--#{boundary}\r\n"
|
60
60
|
part << "Content-ID: #{headers["Content-ID"]}\r\n" if headers["Content-ID"]
|
61
|
-
part << "Content-Disposition: form-data; name=\"#{name
|
61
|
+
part << "Content-Disposition: form-data; name=\"#{name}\"\r\n"
|
62
62
|
part << "Content-Type: #{headers["Content-Type"]}\r\n" if headers["Content-Type"]
|
63
63
|
part << "\r\n"
|
64
64
|
part << "#{value}\r\n"
|
@@ -76,9 +76,9 @@ module Datadog
|
|
76
76
|
# @param io [IO]
|
77
77
|
# @param headers [Hash]
|
78
78
|
def initialize(boundary, name, io, headers = {})
|
79
|
-
file_length = io.respond_to?(:length) ?
|
79
|
+
file_length = io.respond_to?(:length) ? io.length : File.size(io.local_path)
|
80
80
|
@head = build_head(boundary, name, io.original_filename, io.content_type, file_length,
|
81
|
-
|
81
|
+
io.respond_to?(:opts) ? io.opts.merge(headers) : headers)
|
82
82
|
@foot = "\r\n"
|
83
83
|
@length = @head.bytesize + file_length + @foot.length
|
84
84
|
@io = CompositeReadIO.new(StringIO.new(@head), io, StringIO.new(@foot))
|
@@ -98,16 +98,16 @@ module Datadog
|
|
98
98
|
|
99
99
|
part = ''
|
100
100
|
part << "--#{boundary}\r\n"
|
101
|
-
part << "Content-Disposition: #{content_disposition}; name=\"#{name
|
101
|
+
part << "Content-Disposition: #{content_disposition}; name=\"#{name}\"; filename=\"#{filename}\"\r\n"
|
102
102
|
part << "Content-Length: #{content_len}\r\n"
|
103
103
|
if content_id = opts.delete("Content-ID")
|
104
104
|
part << "Content-ID: #{content_id}\r\n"
|
105
105
|
end
|
106
106
|
|
107
|
-
if opts["Content-Type"]
|
108
|
-
|
107
|
+
part << if !opts["Content-Type"].nil?
|
108
|
+
"Content-Type: " + opts["Content-Type"] + "\r\n"
|
109
109
|
else
|
110
|
-
|
110
|
+
"Content-Type: #{type}\r\n"
|
111
111
|
end
|
112
112
|
|
113
113
|
part << "Content-Transfer-Encoding: #{trans_encoding}\r\n"
|
data/lib/datadog/core/worker.rb
CHANGED
@@ -47,6 +47,14 @@ module Datadog
|
|
47
47
|
@run_async = false
|
48
48
|
Datadog.logger.debug { "Forcibly terminating worker thread for: #{self}" }
|
49
49
|
worker.terminate
|
50
|
+
# Wait for the worker thread to end
|
51
|
+
begin
|
52
|
+
Timeout.timeout(SHUTDOWN_TIMEOUT) do
|
53
|
+
worker.join
|
54
|
+
end
|
55
|
+
rescue Timeout::Error
|
56
|
+
Datadog.logger.debug { "Worker thread did not end after #{SHUTDOWN_TIMEOUT} seconds: #{self}" }
|
57
|
+
end
|
50
58
|
true
|
51
59
|
end
|
52
60
|
|
@@ -112,23 +120,33 @@ module Datadog
|
|
112
120
|
@worker ||= nil
|
113
121
|
end
|
114
122
|
|
123
|
+
# Returns true if worker thread is successfully started,
|
124
|
+
# false if it is not started. Reasons for not starting the worker
|
125
|
+
# thread: it is already running, or the process forked and fork
|
126
|
+
# policy is to stop the workers on fork (which means they are
|
127
|
+
# not started in children, really).
|
115
128
|
def start_async(&block)
|
116
129
|
mutex.synchronize do
|
117
|
-
return if running?
|
130
|
+
return false if running?
|
118
131
|
|
119
132
|
if forked?
|
120
133
|
case fork_policy
|
121
134
|
when FORK_POLICY_STOP
|
122
135
|
stop_fork
|
136
|
+
false
|
123
137
|
when FORK_POLICY_RESTART
|
138
|
+
# restart_after_fork should return true
|
124
139
|
restart_after_fork(&block)
|
125
140
|
end
|
126
141
|
elsif !run_async?
|
142
|
+
# start_worker should return true
|
127
143
|
start_worker(&block)
|
128
144
|
end
|
129
145
|
end
|
130
146
|
end
|
131
147
|
|
148
|
+
# Returns true if worker thread is successfully started,
|
149
|
+
# which should generally be always.
|
132
150
|
def start_worker
|
133
151
|
@run_async = true
|
134
152
|
@pid = Process.pid
|
@@ -136,22 +154,21 @@ module Datadog
|
|
136
154
|
Datadog.logger.debug { "Starting thread for: #{self}" }
|
137
155
|
|
138
156
|
@worker = ::Thread.new do
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
end
|
157
|
+
yield
|
158
|
+
# rubocop:disable Lint/RescueException
|
159
|
+
rescue Exception => e
|
160
|
+
@error = e
|
161
|
+
Datadog.logger.debug(
|
162
|
+
"Worker thread error. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
163
|
+
)
|
164
|
+
raise
|
165
|
+
|
149
166
|
# rubocop:enable Lint/RescueException
|
150
167
|
end
|
151
168
|
@worker.name = self.class.name
|
152
169
|
@worker.thread_variable_set(:fork_safe, true)
|
153
170
|
|
154
|
-
|
171
|
+
true
|
155
172
|
end
|
156
173
|
|
157
174
|
def stop_fork
|
@@ -21,7 +21,18 @@ module Datadog
|
|
21
21
|
# Methods that must be prepended
|
22
22
|
module PrependedMethods
|
23
23
|
def perform(*args)
|
24
|
-
perform_loop
|
24
|
+
perform_loop do
|
25
|
+
@in_iteration = true
|
26
|
+
begin
|
27
|
+
super(*args)
|
28
|
+
ensure
|
29
|
+
@in_iteration = false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def in_iteration?
|
35
|
+
defined?(@in_iteration) && @in_iteration
|
25
36
|
end
|
26
37
|
end
|
27
38
|
|
@@ -20,8 +20,8 @@ module Datadog
|
|
20
20
|
attr_reader \
|
21
21
|
:metrics
|
22
22
|
|
23
|
-
def initialize(options
|
24
|
-
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger]) }
|
23
|
+
def initialize(telemetry:, **options)
|
24
|
+
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger], telemetry: telemetry) }
|
25
25
|
|
26
26
|
# Workers::Async::Thread settings
|
27
27
|
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
|
data/lib/datadog/core.rb
CHANGED
@@ -11,6 +11,14 @@ module Datadog
|
|
11
11
|
# for higher-level features.
|
12
12
|
module Core
|
13
13
|
extend Core::Deprecations
|
14
|
+
|
15
|
+
LIBDATADOG_API_FAILURE =
|
16
|
+
begin
|
17
|
+
require "libdatadog_api.#{RUBY_VERSION[/\d+.\d+/]}_#{RUBY_PLATFORM}"
|
18
|
+
nil
|
19
|
+
rescue LoadError => e
|
20
|
+
e.message
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
24
|
extend Core::Extensions
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'logger'
|
4
|
+
require_relative 'base'
|
5
|
+
require_relative 'error'
|
6
|
+
require_relative 'code_tracker'
|
7
|
+
require_relative 'component'
|
8
|
+
require_relative 'instrumenter'
|
9
|
+
require_relative 'probe'
|
10
|
+
require_relative 'probe_builder'
|
11
|
+
require_relative 'probe_manager'
|
12
|
+
require_relative 'probe_notification_builder'
|
13
|
+
require_relative 'probe_notifier_worker'
|
14
|
+
require_relative 'redactor'
|
15
|
+
require_relative 'serializer'
|
16
|
+
require_relative 'transport/http'
|
17
|
+
require_relative 'utils'
|
18
|
+
|
19
|
+
if %w[1 true yes].include?(ENV['DD_DYNAMIC_INSTRUMENTATION_ENABLED']) # steep:ignore
|
20
|
+
# For initial release of Dynamic Instrumentation, activate code tracking
|
21
|
+
# only if DI is explicitly requested in the environment.
|
22
|
+
# Code tracking is required for line probes to work; see the comments
|
23
|
+
# above for the implementation of the method.
|
24
|
+
#
|
25
|
+
# If DI is enabled programmatically, the application can (and must,
|
26
|
+
# for line probes to work) activate tracking in an initializer.
|
27
|
+
# We seem to have Datadog.logger here already
|
28
|
+
Datadog.logger.debug("di: activating code tracking")
|
29
|
+
Datadog::DI.activate_tracking
|
30
|
+
end
|
31
|
+
|
32
|
+
require_relative 'contrib'
|
33
|
+
|
34
|
+
Datadog::DI::Contrib.load_now_or_later
|
data/lib/datadog/di/component.rb
CHANGED
@@ -171,7 +171,7 @@ module Datadog
|
|
171
171
|
attr_reader :last_sent
|
172
172
|
|
173
173
|
def status_transport
|
174
|
-
@status_transport ||= DI::Transport::HTTP.diagnostics(agent_settings: agent_settings)
|
174
|
+
@status_transport ||= DI::Transport::HTTP.diagnostics(agent_settings: agent_settings, logger: logger)
|
175
175
|
end
|
176
176
|
|
177
177
|
def do_send_status(batch)
|
@@ -179,7 +179,7 @@ module Datadog
|
|
179
179
|
end
|
180
180
|
|
181
181
|
def snapshot_transport
|
182
|
-
@snapshot_transport ||= DI::Transport::HTTP.input(agent_settings: agent_settings)
|
182
|
+
@snapshot_transport ||= DI::Transport::HTTP.input(agent_settings: agent_settings, logger: logger)
|
183
183
|
end
|
184
184
|
|
185
185
|
def do_send_snapshot(batch)
|
@@ -227,20 +227,6 @@ module Datadog
|
|
227
227
|
start
|
228
228
|
end
|
229
229
|
|
230
|
-
# Determine how much longer the worker thread should sleep
|
231
|
-
# so as not to send in less than min send interval since the last send.
|
232
|
-
# Important: this method must be called when @lock is held.
|
233
|
-
#
|
234
|
-
# Returns the time remaining to sleep.
|
235
|
-
def set_sleep_remaining
|
236
|
-
now = Core::Utils::Time.get_time
|
237
|
-
@sleep_remaining = if last_sent
|
238
|
-
[last_sent + min_send_interval - now, 0].max
|
239
|
-
else
|
240
|
-
0
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
230
|
public "add_#{event_type}"
|
245
231
|
|
246
232
|
# Sends pending probe statuses or snapshots.
|
@@ -288,6 +274,20 @@ module Datadog
|
|
288
274
|
end
|
289
275
|
end
|
290
276
|
|
277
|
+
# Determine how much longer the worker thread should sleep
|
278
|
+
# so as not to send in less than min send interval since the last send.
|
279
|
+
# Important: this method must be called when @lock is held.
|
280
|
+
#
|
281
|
+
# Returns the time remaining to sleep.
|
282
|
+
def set_sleep_remaining
|
283
|
+
now = Core::Utils::Time.get_time
|
284
|
+
@sleep_remaining = if last_sent
|
285
|
+
[last_sent + min_send_interval - now, 0].max
|
286
|
+
else
|
287
|
+
0
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
291
|
def maybe_send
|
292
292
|
rv = maybe_send_status
|
293
293
|
maybe_send_snapshot || rv
|
data/lib/datadog/di/remote.rb
CHANGED
@@ -15,12 +15,13 @@ module Datadog
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class Transport
|
18
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
18
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
19
19
|
|
20
|
-
def initialize(apis, default_api)
|
20
|
+
def initialize(apis, default_api, logger:)
|
21
21
|
@apis = apis
|
22
|
+
@logger = logger
|
22
23
|
|
23
|
-
@client = HTTP::Client.new(current_api)
|
24
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
24
25
|
end
|
25
26
|
|
26
27
|
def current_api
|
@@ -21,13 +21,13 @@ module Datadog
|
|
21
21
|
|
22
22
|
def defaults
|
23
23
|
Datadog::Core::Transport::HTTP::API::Map[
|
24
|
-
DIAGNOSTICS => Spec.new do |s|
|
24
|
+
DIAGNOSTICS => Diagnostics::API::Spec.new do |s|
|
25
25
|
s.diagnostics = Diagnostics::API::Endpoint.new(
|
26
26
|
'/debugger/v1/diagnostics',
|
27
27
|
Core::Encoding::JSONEncoder,
|
28
28
|
)
|
29
29
|
end,
|
30
|
-
INPUT => Spec.new do |s|
|
30
|
+
INPUT => Input::API::Spec.new do |s|
|
31
31
|
s.input = Input::API::Endpoint.new(
|
32
32
|
'/debugger/v1/input',
|
33
33
|
Core::Encoding::JSONEncoder,
|
@@ -35,16 +35,6 @@ module Datadog
|
|
35
35
|
end,
|
36
36
|
]
|
37
37
|
end
|
38
|
-
|
39
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
40
|
-
include Diagnostics::API::Instance
|
41
|
-
include Input::API::Instance
|
42
|
-
end
|
43
|
-
|
44
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
45
|
-
include Diagnostics::API::Spec
|
46
|
-
include Input::API::Spec
|
47
|
-
end
|
48
38
|
end
|
49
39
|
end
|
50
40
|
end
|
@@ -14,10 +14,11 @@ module Datadog
|
|
14
14
|
module HTTP
|
15
15
|
# Routes, encodes, and sends DI data to the trace agent via HTTP.
|
16
16
|
class Client
|
17
|
-
attr_reader :api
|
17
|
+
attr_reader :api, :logger
|
18
18
|
|
19
|
-
def initialize(api)
|
19
|
+
def initialize(api, logger:)
|
20
20
|
@api = api
|
21
|
+
@logger = logger
|
21
22
|
end
|
22
23
|
|
23
24
|
def send_request(request, &block)
|
@@ -31,7 +32,7 @@ module Datadog
|
|
31
32
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
32
33
|
"Location: #{Array(e.backtrace).first}"
|
33
34
|
|
34
|
-
|
35
|
+
logger.debug(message)
|
35
36
|
|
36
37
|
Datadog::Core::Transport::InternalErrorResponse.new(e)
|
37
38
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../../core/transport/http/api/instance'
|
4
|
+
require_relative '../../../core/transport/http/api/spec'
|
3
5
|
require_relative 'client'
|
4
6
|
|
5
7
|
module Datadog
|
@@ -16,55 +18,26 @@ module Datadog
|
|
16
18
|
end
|
17
19
|
|
18
20
|
module API
|
19
|
-
|
21
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
20
22
|
def send_diagnostics(env)
|
21
|
-
raise
|
23
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('diagnostics', self) unless spec.is_a?(Diagnostics::API::Spec)
|
22
24
|
|
23
25
|
spec.send_diagnostics(env) do |request_env|
|
24
26
|
call(request_env)
|
25
27
|
end
|
26
28
|
end
|
27
|
-
|
28
|
-
class DiagnosticsNotSupportedError < StandardError
|
29
|
-
attr_reader :spec
|
30
|
-
|
31
|
-
def initialize(spec)
|
32
|
-
super
|
33
|
-
|
34
|
-
@spec = spec
|
35
|
-
end
|
36
|
-
|
37
|
-
def message
|
38
|
-
'Diagnostics not supported for this API!'
|
39
|
-
end
|
40
|
-
end
|
41
29
|
end
|
42
30
|
|
43
|
-
|
31
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
44
32
|
attr_accessor :diagnostics
|
45
33
|
|
46
34
|
def send_diagnostics(env, &block)
|
47
|
-
raise
|
35
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('diagnostics', self) if diagnostics.nil?
|
48
36
|
|
49
37
|
diagnostics.call(env, &block)
|
50
38
|
end
|
51
|
-
|
52
|
-
class NoDiagnosticsEndpointDefinedError < StandardError
|
53
|
-
attr_reader :spec
|
54
|
-
|
55
|
-
def initialize(spec)
|
56
|
-
super
|
57
|
-
|
58
|
-
@spec = spec
|
59
|
-
end
|
60
|
-
|
61
|
-
def message
|
62
|
-
'No diagnostics endpoint is defined for API specification!'
|
63
|
-
end
|
64
|
-
end
|
65
39
|
end
|
66
40
|
|
67
|
-
# Endpoint for negotiation
|
68
41
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
69
42
|
attr_reader :encoder
|
70
43
|
|
@@ -79,7 +52,7 @@ module Datadog
|
|
79
52
|
)
|
80
53
|
env.form = {'event' => event_payload}
|
81
54
|
|
82
|
-
super
|
55
|
+
super
|
83
56
|
end
|
84
57
|
end
|
85
58
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../../core/transport/http/api/instance'
|
4
|
+
require_relative '../../../core/transport/http/api/spec'
|
3
5
|
require_relative 'client'
|
4
6
|
|
5
7
|
module Datadog
|
@@ -16,55 +18,26 @@ module Datadog
|
|
16
18
|
end
|
17
19
|
|
18
20
|
module API
|
19
|
-
|
21
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
20
22
|
def send_input(env)
|
21
|
-
raise
|
23
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('input', self) unless spec.is_a?(Input::API::Spec)
|
22
24
|
|
23
25
|
spec.send_input(env) do |request_env|
|
24
26
|
call(request_env)
|
25
27
|
end
|
26
28
|
end
|
27
|
-
|
28
|
-
class InputNotSupportedError < StandardError
|
29
|
-
attr_reader :spec
|
30
|
-
|
31
|
-
def initialize(spec)
|
32
|
-
super
|
33
|
-
|
34
|
-
@spec = spec
|
35
|
-
end
|
36
|
-
|
37
|
-
def message
|
38
|
-
'Input not supported for this API!'
|
39
|
-
end
|
40
|
-
end
|
41
29
|
end
|
42
30
|
|
43
|
-
|
31
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
44
32
|
attr_accessor :input
|
45
33
|
|
46
34
|
def send_input(env, &block)
|
47
|
-
raise
|
35
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('input', self) if input.nil?
|
48
36
|
|
49
37
|
input.call(env, &block)
|
50
38
|
end
|
51
|
-
|
52
|
-
class NoInputEndpointDefinedError < StandardError
|
53
|
-
attr_reader :spec
|
54
|
-
|
55
|
-
def initialize(spec)
|
56
|
-
super
|
57
|
-
|
58
|
-
@spec = spec
|
59
|
-
end
|
60
|
-
|
61
|
-
def message
|
62
|
-
'No input endpoint is defined for API specification!'
|
63
|
-
end
|
64
|
-
end
|
65
39
|
end
|
66
40
|
|
67
|
-
# Endpoint for negotiation
|
68
41
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
69
42
|
HEADER_CONTENT_TYPE = 'Content-Type'
|
70
43
|
|
@@ -81,7 +54,7 @@ module Datadog
|
|
81
54
|
env.headers[HEADER_CONTENT_TYPE] = encoder.content_type
|
82
55
|
env.body = env.request.parcel.data
|
83
56
|
|
84
|
-
super
|
57
|
+
super
|
85
58
|
end
|
86
59
|
end
|
87
60
|
end
|
@@ -1,15 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
|
-
|
5
|
-
require_relative '../../core/environment/container'
|
6
|
-
require_relative '../../core/environment/ext'
|
7
|
-
require_relative '../../core/transport/ext'
|
8
3
|
require_relative 'diagnostics'
|
9
4
|
require_relative 'input'
|
10
5
|
require_relative 'http/api'
|
11
6
|
require_relative '../../core/transport/http'
|
12
|
-
require_relative '../../../datadog/version'
|
13
7
|
|
14
8
|
module Datadog
|
15
9
|
module DI
|
@@ -18,86 +12,44 @@ module Datadog
|
|
18
12
|
module HTTP
|
19
13
|
module_function
|
20
14
|
|
21
|
-
# Builds a new Transport::HTTP::Client
|
22
|
-
def new(klass, &block)
|
23
|
-
Core::Transport::HTTP.build(
|
24
|
-
api_instance_class: API::Instance, &block
|
25
|
-
).to_transport(klass)
|
26
|
-
end
|
27
|
-
|
28
15
|
# Builds a new Transport::HTTP::Client with default settings
|
29
16
|
# Pass a block to override any settings.
|
30
17
|
def diagnostics(
|
31
18
|
agent_settings:,
|
32
|
-
|
19
|
+
logger:,
|
20
|
+
api_version: nil,
|
21
|
+
headers: nil
|
33
22
|
)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
23
|
+
Core::Transport::HTTP.build(api_instance_class: Diagnostics::API::Instance,
|
24
|
+
logger: logger,
|
25
|
+
agent_settings: agent_settings, api_version: api_version, headers: headers) do |transport|
|
38
26
|
apis = API.defaults
|
39
27
|
|
40
28
|
transport.api API::DIAGNOSTICS, apis[API::DIAGNOSTICS]
|
41
29
|
|
42
|
-
# Apply any settings given by options
|
43
|
-
unless options.empty?
|
44
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
45
|
-
transport.headers options[:headers] if options.key?(:headers)
|
46
|
-
end
|
47
|
-
|
48
30
|
# Call block to apply any customization, if provided
|
49
31
|
yield(transport) if block_given?
|
50
|
-
end
|
32
|
+
end.to_transport(DI::Transport::Diagnostics::Transport)
|
51
33
|
end
|
52
34
|
|
53
35
|
# Builds a new Transport::HTTP::Client with default settings
|
54
36
|
# Pass a block to override any settings.
|
55
37
|
def input(
|
56
38
|
agent_settings:,
|
57
|
-
|
39
|
+
logger:,
|
40
|
+
api_version: nil,
|
41
|
+
headers: nil
|
58
42
|
)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
43
|
+
Core::Transport::HTTP.build(api_instance_class: Input::API::Instance,
|
44
|
+
logger: logger,
|
45
|
+
agent_settings: agent_settings, api_version: api_version, headers: headers) do |transport|
|
63
46
|
apis = API.defaults
|
64
47
|
|
65
48
|
transport.api API::INPUT, apis[API::INPUT]
|
66
49
|
|
67
|
-
# Apply any settings given by options
|
68
|
-
unless options.empty?
|
69
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
70
|
-
transport.headers options[:headers] if options.key?(:headers)
|
71
|
-
end
|
72
|
-
|
73
50
|
# Call block to apply any customization, if provided
|
74
51
|
yield(transport) if block_given?
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def default_headers
|
79
|
-
{
|
80
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
81
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
82
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
83
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
84
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
85
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
86
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
87
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
88
|
-
}.tap do |headers|
|
89
|
-
# Add container ID, if present.
|
90
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
91
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
92
|
-
# Pretend that stats computation are already done by the client
|
93
|
-
if Datadog.configuration.appsec.standalone.enabled
|
94
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def default_adapter
|
100
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
52
|
+
end.to_transport(DI::Transport::Input::Transport)
|
101
53
|
end
|
102
54
|
end
|
103
55
|
end
|
@@ -15,12 +15,13 @@ module Datadog
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class Transport
|
18
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
18
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
19
19
|
|
20
|
-
def initialize(apis, default_api)
|
20
|
+
def initialize(apis, default_api, logger:)
|
21
21
|
@apis = apis
|
22
|
+
@logger = logger
|
22
23
|
|
23
|
-
@client = HTTP::Client.new(current_api)
|
24
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
24
25
|
end
|
25
26
|
|
26
27
|
def current_api
|