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
@@ -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
|
@@ -14,13 +14,16 @@ module Datadog
|
|
14
14
|
module Runtime
|
15
15
|
# For generating runtime metrics
|
16
16
|
class Metrics < Core::Metrics::Client
|
17
|
-
def initialize(**options)
|
17
|
+
def initialize(telemetry:, **options)
|
18
18
|
super
|
19
19
|
|
20
20
|
# Initialize service list
|
21
21
|
@services = Set.new(options.fetch(:services, []))
|
22
22
|
@service_tags = nil
|
23
23
|
compile_service_tags!
|
24
|
+
|
25
|
+
# Initialize the collection of runtime-id
|
26
|
+
@runtime_id_enabled = options.fetch(:experimental_runtime_id_enabled, false)
|
24
27
|
end
|
25
28
|
|
26
29
|
# Associate service with runtime metrics
|
@@ -93,7 +96,7 @@ module Datadog
|
|
93
96
|
|
94
97
|
def try_flush
|
95
98
|
yield
|
96
|
-
rescue
|
99
|
+
rescue => e
|
97
100
|
Datadog.logger.warn("Error while sending runtime metric. Cause: #{e.class.name} #{e.message}")
|
98
101
|
end
|
99
102
|
|
@@ -105,6 +108,9 @@ module Datadog
|
|
105
108
|
|
106
109
|
# Add services dynamically because they might change during runtime.
|
107
110
|
options[:tags].concat(service_tags) unless service_tags.nil?
|
111
|
+
|
112
|
+
# Add runtime-id dynamically because it might change during runtime.
|
113
|
+
options[:tags].concat(["runtime-id:#{Core::Environment::Identity.id}"]) if @runtime_id_enabled
|
108
114
|
end
|
109
115
|
end
|
110
116
|
|
@@ -112,7 +118,8 @@ module Datadog
|
|
112
118
|
|
113
119
|
attr_reader \
|
114
120
|
:service_tags,
|
115
|
-
:services
|
121
|
+
:services,
|
122
|
+
:runtime_id_enabled
|
116
123
|
|
117
124
|
def compile_service_tags!
|
118
125
|
@service_tags = services.to_a.collect do |service|
|
@@ -140,7 +147,7 @@ module Datadog
|
|
140
147
|
gauge(metric_name, metric_value) if metric_value
|
141
148
|
end
|
142
149
|
|
143
|
-
#
|
150
|
+
# standard:disable Metrics/MethodLength
|
144
151
|
def flush_yjit_stats
|
145
152
|
# Only on Ruby >= 3.2
|
146
153
|
try_flush do
|
@@ -188,7 +195,7 @@ module Datadog
|
|
188
195
|
end
|
189
196
|
end
|
190
197
|
end
|
191
|
-
#
|
198
|
+
# standard:enable Metrics/MethodLength
|
192
199
|
end
|
193
200
|
end
|
194
201
|
end
|