datadog 2.20.0 → 2.26.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 +212 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +93 -23
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +21 -5
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +9 -4
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +1 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +12 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +4 -0
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
- data/ext/libdatadog_api/ddsketch.c +106 -0
- data/ext/libdatadog_api/feature_flags.c +554 -0
- data/ext/libdatadog_api/feature_flags.h +5 -0
- data/ext/libdatadog_api/init.c +5 -0
- data/ext/libdatadog_api/library_config.c +34 -25
- data/ext/libdatadog_api/process_discovery.c +24 -18
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/ai_guard/api_client.rb +82 -0
- data/lib/datadog/ai_guard/component.rb +42 -0
- data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
- data/lib/datadog/ai_guard/configuration/settings.rb +98 -0
- data/lib/datadog/ai_guard/configuration.rb +11 -0
- data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +34 -0
- data/lib/datadog/ai_guard/evaluation/request.rb +81 -0
- data/lib/datadog/ai_guard/evaluation/result.rb +43 -0
- data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
- data/lib/datadog/ai_guard/evaluation.rb +72 -0
- data/lib/datadog/ai_guard/ext.rb +16 -0
- data/lib/datadog/ai_guard.rb +153 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +26 -5
- data/lib/datadog/appsec/api_security/sampler.rb +7 -4
- data/lib/datadog/appsec/assets/blocked.html +8 -0
- data/lib/datadog/appsec/assets/blocked.json +1 -1
- data/lib/datadog/appsec/assets/blocked.text +3 -1
- data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +359 -4
- data/lib/datadog/appsec/assets/waf_rules/strict.json +43 -2
- data/lib/datadog/appsec/assets.rb +1 -1
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/compressed_json.rb +1 -1
- data/lib/datadog/appsec/configuration/settings.rb +9 -0
- data/lib/datadog/appsec/context.rb +2 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +3 -2
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +3 -1
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +3 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +9 -4
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -1
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +3 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -4
- data/lib/datadog/appsec/event.rb +12 -14
- data/lib/datadog/appsec/metrics/collector.rb +19 -3
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +2 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -4
- data/lib/datadog/appsec/remote.rb +34 -25
- data/lib/datadog/appsec/response.rb +18 -4
- data/lib/datadog/appsec/security_engine/engine.rb +3 -3
- data/lib/datadog/appsec/security_engine/result.rb +29 -9
- data/lib/datadog/appsec/security_engine/runner.rb +19 -9
- data/lib/datadog/appsec/security_event.rb +5 -7
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -4
- data/lib/datadog/core/configuration/components.rb +59 -11
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +0 -1
- data/lib/datadog/core/configuration/option.rb +38 -43
- data/lib/datadog/core/configuration/option_definition.rb +4 -11
- data/lib/datadog/core/configuration/options.rb +9 -10
- data/lib/datadog/core/configuration/settings.rb +38 -9
- data/lib/datadog/core/configuration/stable_config.rb +10 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +373 -0
- data/lib/datadog/core/configuration.rb +2 -2
- data/lib/datadog/core/ddsketch.rb +19 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/environment/cgroup.rb +52 -25
- data/lib/datadog/core/environment/container.rb +140 -46
- data/lib/datadog/core/environment/ext.rb +7 -2
- data/lib/datadog/core/environment/git.rb +2 -2
- data/lib/datadog/core/environment/process.rb +87 -0
- data/lib/datadog/core/environment/variable_helpers.rb +3 -3
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +6 -6
- data/lib/datadog/core/feature_flags.rb +61 -0
- data/lib/datadog/core/metrics/client.rb +2 -2
- data/lib/datadog/core/pin.rb +8 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +2 -4
- data/lib/datadog/core/process_discovery.rb +48 -23
- data/lib/datadog/core/rate_limiter.rb +9 -1
- data/lib/datadog/core/remote/client/capabilities.rb +7 -0
- data/lib/datadog/core/remote/client.rb +14 -6
- data/lib/datadog/core/remote/component.rb +10 -10
- data/lib/datadog/core/remote/configuration/content.rb +15 -2
- data/lib/datadog/core/remote/configuration/digest.rb +14 -7
- data/lib/datadog/core/remote/configuration/repository.rb +1 -1
- data/lib/datadog/core/remote/configuration/target.rb +13 -6
- data/lib/datadog/core/remote/transport/config.rb +4 -25
- data/lib/datadog/core/remote/transport/http/config.rb +10 -50
- data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
- data/lib/datadog/core/remote/transport/http.rb +15 -24
- data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
- data/lib/datadog/core/remote/worker.rb +25 -37
- data/lib/datadog/core/runtime/ext.rb +0 -1
- data/lib/datadog/core/runtime/metrics.rb +11 -1
- data/lib/datadog/core/semaphore.rb +1 -4
- data/lib/datadog/core/tag_builder.rb +0 -4
- data/lib/datadog/core/tag_normalizer.rb +84 -0
- data/lib/datadog/core/telemetry/component.rb +69 -15
- data/lib/datadog/core/telemetry/emitter.rb +6 -6
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +89 -51
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
- data/lib/datadog/core/telemetry/event.rb +1 -0
- data/lib/datadog/core/telemetry/logger.rb +2 -2
- data/lib/datadog/core/telemetry/logging.rb +2 -8
- data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
- data/lib/datadog/core/telemetry/request.rb +17 -3
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +3 -34
- data/lib/datadog/core/telemetry/transport/http.rb +21 -16
- data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -11
- data/lib/datadog/core/telemetry/worker.rb +88 -32
- data/lib/datadog/core/transport/ext.rb +2 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
- data/lib/datadog/core/transport/http/api/instance.rb +4 -21
- data/lib/datadog/core/transport/http/builder.rb +9 -5
- data/lib/datadog/core/transport/http/client.rb +80 -0
- data/lib/datadog/core/transport/http.rb +22 -19
- data/lib/datadog/core/transport/response.rb +15 -1
- data/lib/datadog/core/transport/transport.rb +90 -0
- data/lib/datadog/core/utils/array.rb +29 -0
- data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
- data/lib/datadog/core/utils/network.rb +22 -1
- data/lib/datadog/core/utils/only_once_successful.rb +8 -2
- data/lib/datadog/core/utils/safe_dup.rb +2 -2
- data/lib/datadog/core/utils/sequence.rb +2 -0
- data/lib/datadog/core/utils/time.rb +1 -1
- data/lib/datadog/core/utils.rb +2 -0
- data/lib/datadog/core/workers/async.rb +10 -1
- data/lib/datadog/core/workers/interval_loop.rb +44 -3
- data/lib/datadog/core/workers/polling.rb +2 -0
- data/lib/datadog/core/workers/queue.rb +100 -1
- data/lib/datadog/core.rb +2 -0
- data/lib/datadog/data_streams/configuration/settings.rb +49 -0
- data/lib/datadog/data_streams/configuration.rb +11 -0
- data/lib/datadog/data_streams/ext.rb +11 -0
- data/lib/datadog/data_streams/extensions.rb +16 -0
- data/lib/datadog/data_streams/pathway_context.rb +169 -0
- data/lib/datadog/data_streams/processor.rb +509 -0
- data/lib/datadog/data_streams/transport/http/stats.rb +52 -0
- data/lib/datadog/data_streams/transport/http.rb +40 -0
- data/lib/datadog/data_streams/transport/stats.rb +46 -0
- data/lib/datadog/data_streams.rb +100 -0
- data/lib/datadog/di/boot.rb +7 -3
- data/lib/datadog/di/component.rb +14 -16
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/contrib/active_record.rb +30 -5
- data/lib/datadog/di/el/compiler.rb +168 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +34 -0
- data/lib/datadog/di/instrumenter.rb +189 -55
- data/lib/datadog/di/logger.rb +2 -2
- data/lib/datadog/di/probe.rb +55 -15
- data/lib/datadog/di/probe_builder.rb +41 -2
- data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
- data/lib/datadog/di/probe_file_loader.rb +1 -1
- data/lib/datadog/di/probe_manager.rb +50 -35
- data/lib/datadog/di/probe_notification_builder.rb +121 -70
- data/lib/datadog/di/probe_notifier_worker.rb +5 -5
- data/lib/datadog/di/proc_responder.rb +32 -0
- data/lib/datadog/di/remote.rb +89 -84
- data/lib/datadog/di/serializer.rb +151 -7
- data/lib/datadog/di/transport/diagnostics.rb +8 -36
- data/lib/datadog/di/transport/http/diagnostics.rb +1 -33
- data/lib/datadog/di/transport/http/input.rb +1 -33
- data/lib/datadog/di/transport/http.rb +32 -17
- data/lib/datadog/di/transport/input.rb +67 -34
- data/lib/datadog/di.rb +61 -5
- data/lib/datadog/error_tracking/filters.rb +2 -2
- data/lib/datadog/kit/appsec/events/v2.rb +2 -3
- data/lib/datadog/open_feature/component.rb +60 -0
- data/lib/datadog/open_feature/configuration.rb +27 -0
- data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
- data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
- data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
- data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
- data/lib/datadog/open_feature/exposures/event.rb +60 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
- data/lib/datadog/open_feature/exposures/worker.rb +116 -0
- data/lib/datadog/open_feature/ext.rb +14 -0
- data/lib/datadog/open_feature/native_evaluator.rb +38 -0
- data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
- data/lib/datadog/open_feature/provider.rb +141 -0
- data/lib/datadog/open_feature/remote.rb +67 -0
- data/lib/datadog/open_feature/resolution_details.rb +35 -0
- data/lib/datadog/open_feature/transport.rb +70 -0
- data/lib/datadog/open_feature.rb +19 -0
- data/lib/datadog/opentelemetry/api/baggage.rb +1 -1
- data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
- data/lib/datadog/opentelemetry/metrics.rb +117 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +26 -2
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +35 -0
- data/lib/datadog/opentelemetry.rb +3 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +41 -7
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +3 -2
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +6 -5
- data/lib/datadog/profiling/component.rb +12 -11
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +18 -0
- data/lib/datadog/profiling/ext.rb +2 -1
- data/lib/datadog/profiling/http_transport.rb +5 -2
- data/lib/datadog/profiling/profiler.rb +4 -0
- data/lib/datadog/profiling/tag_builder.rb +36 -3
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling.rb +1 -2
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/tracing/component.rb +6 -17
- data/lib/datadog/tracing/configuration/dynamic.rb +2 -2
- data/lib/datadog/tracing/configuration/ext.rb +9 -3
- data/lib/datadog/tracing/configuration/settings.rb +89 -10
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
- data/lib/datadog/tracing/contrib/component.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/extensions.rb +10 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -43
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
- data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +35 -4
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
- data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +9 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +3 -1
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
- data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
- data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop.rb +41 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +3 -2
- data/lib/datadog/tracing/metadata/ext.rb +9 -1
- data/lib/datadog/tracing/remote.rb +1 -9
- data/lib/datadog/tracing/sampling/priority_sampler.rb +3 -1
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_event.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +20 -9
- data/lib/datadog/tracing/trace_operation.rb +44 -6
- data/lib/datadog/tracing/tracer.rb +42 -16
- data/lib/datadog/tracing/transport/http/client.rb +12 -26
- data/lib/datadog/tracing/transport/http/traces.rb +2 -50
- data/lib/datadog/tracing/transport/http.rb +15 -9
- data/lib/datadog/tracing/transport/io/client.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
- data/lib/datadog/tracing/transport/traces.rb +9 -71
- data/lib/datadog/tracing/workers/trace_writer.rb +5 -0
- data/lib/datadog/tracing/writer.rb +1 -0
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +3 -0
- metadata +110 -24
- data/ext/libdatadog_api/macos_development.md +0 -26
- data/lib/datadog/core/remote/transport/http/api.rb +0 -53
- data/lib/datadog/core/remote/transport/http/client.rb +0 -49
- data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
- data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
- data/lib/datadog/core/transport/http/api/spec.rb +0 -36
- data/lib/datadog/di/transport/http/api.rb +0 -42
- data/lib/datadog/di/transport/http/client.rb +0 -47
- data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
- data/lib/datadog/tracing/transport/http/api.rb +0 -44
|
@@ -8,8 +8,18 @@ module Datadog
|
|
|
8
8
|
module Event
|
|
9
9
|
# Telemetry class for the 'app-started' event
|
|
10
10
|
class AppStarted < Base
|
|
11
|
-
def initialize(
|
|
12
|
-
|
|
11
|
+
def initialize(components:)
|
|
12
|
+
# To not hold a reference to the component tree, generate
|
|
13
|
+
# the event payload here in the constructor.
|
|
14
|
+
#
|
|
15
|
+
# Important: do not store data that contains (or is derived from)
|
|
16
|
+
# the runtime_id or sequence numbers.
|
|
17
|
+
# This event is reused when a process forks, but in the
|
|
18
|
+
# child process the runtime_id would be different and sequence
|
|
19
|
+
# number is reset.
|
|
20
|
+
@configuration = configuration(components.settings, components.agent_settings)
|
|
21
|
+
@install_signature = install_signature(components.settings)
|
|
22
|
+
@products = products(components)
|
|
13
23
|
end
|
|
14
24
|
|
|
15
25
|
def type
|
|
@@ -18,27 +28,37 @@ module Datadog
|
|
|
18
28
|
|
|
19
29
|
def payload
|
|
20
30
|
{
|
|
21
|
-
products: products,
|
|
22
|
-
configuration: configuration,
|
|
23
|
-
install_signature: install_signature,
|
|
31
|
+
products: @products,
|
|
32
|
+
configuration: @configuration,
|
|
33
|
+
install_signature: @install_signature,
|
|
24
34
|
# DEV: Not implemented yet
|
|
25
35
|
# error: error, # Start-up errors
|
|
26
36
|
}
|
|
27
37
|
end
|
|
28
38
|
|
|
39
|
+
# Whether the event is actually the app-started event.
|
|
40
|
+
# For the app-started event we follow up by sending
|
|
41
|
+
# app-dependencies-loaded, if the event is
|
|
42
|
+
# app-client-configuration-change we don't send
|
|
43
|
+
# app-dependencies-loaded.
|
|
44
|
+
def app_started?
|
|
45
|
+
true
|
|
46
|
+
end
|
|
47
|
+
|
|
29
48
|
private
|
|
30
49
|
|
|
31
|
-
def products
|
|
32
|
-
# @type var products:
|
|
50
|
+
def products(components)
|
|
51
|
+
# @type var products: telemetry_products
|
|
33
52
|
products = {
|
|
34
53
|
appsec: {
|
|
35
|
-
|
|
54
|
+
# TODO take appsec status out of component tree?
|
|
55
|
+
enabled: components.settings.appsec.enabled,
|
|
36
56
|
},
|
|
37
57
|
profiler: {
|
|
38
|
-
enabled:
|
|
58
|
+
enabled: !!components.profiler&.enabled?,
|
|
39
59
|
},
|
|
40
60
|
dynamic_instrumentation: {
|
|
41
|
-
enabled:
|
|
61
|
+
enabled: !!components.dynamic_instrumentation,
|
|
42
62
|
}
|
|
43
63
|
}
|
|
44
64
|
|
|
@@ -73,12 +93,11 @@ module Datadog
|
|
|
73
93
|
|
|
74
94
|
# standard:disable Metrics/AbcSize
|
|
75
95
|
# standard:disable Metrics/MethodLength
|
|
76
|
-
def configuration
|
|
77
|
-
config = Datadog.configuration
|
|
96
|
+
def configuration(settings, agent_settings)
|
|
78
97
|
seq_id = Event.configuration_sequence.next
|
|
79
98
|
|
|
80
99
|
# tracing.writer_options.buffer_size and tracing.writer_options.flush_interval have the same origin.
|
|
81
|
-
writer_option_origin = get_telemetry_origin(
|
|
100
|
+
writer_option_origin = get_telemetry_origin(settings, 'tracing.writer_options')
|
|
82
101
|
|
|
83
102
|
list = [
|
|
84
103
|
# Only set using env var as of June 2025
|
|
@@ -100,59 +119,78 @@ module Datadog
|
|
|
100
119
|
),
|
|
101
120
|
|
|
102
121
|
# Mix of env var, programmatic and default config, so we use unknown
|
|
103
|
-
conf_value('DD_AGENT_TRANSPORT', agent_transport, seq_id, 'unknown'),
|
|
122
|
+
conf_value('DD_AGENT_TRANSPORT', agent_transport(agent_settings), seq_id, 'unknown'), # rubocop:disable CustomCops/EnvStringValidationCop
|
|
104
123
|
|
|
105
124
|
# writer_options is defined as an option that has a Hash value.
|
|
106
125
|
conf_value(
|
|
107
126
|
'tracing.writer_options.buffer_size',
|
|
108
|
-
to_value(
|
|
127
|
+
to_value(settings.tracing.writer_options[:buffer_size]),
|
|
109
128
|
seq_id,
|
|
110
129
|
writer_option_origin
|
|
111
130
|
),
|
|
112
131
|
conf_value(
|
|
113
132
|
'tracing.writer_options.flush_interval',
|
|
114
|
-
to_value(
|
|
133
|
+
to_value(settings.tracing.writer_options[:flush_interval]),
|
|
115
134
|
seq_id,
|
|
116
135
|
writer_option_origin
|
|
117
136
|
),
|
|
118
137
|
|
|
119
|
-
conf_value('DD_AGENT_HOST',
|
|
138
|
+
conf_value('DD_AGENT_HOST', settings.agent.host, seq_id, get_telemetry_origin(settings, 'agent.host')),
|
|
120
139
|
conf_value(
|
|
121
140
|
'DD_TRACE_SAMPLE_RATE',
|
|
122
|
-
to_value(
|
|
141
|
+
to_value(settings.tracing.sampling.default_rate),
|
|
123
142
|
seq_id,
|
|
124
|
-
get_telemetry_origin(
|
|
143
|
+
get_telemetry_origin(settings, 'tracing.sampling.default_rate')
|
|
125
144
|
),
|
|
126
145
|
conf_value(
|
|
127
146
|
'DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED',
|
|
128
|
-
|
|
147
|
+
settings.tracing.contrib.global_default_service_name.enabled,
|
|
129
148
|
seq_id,
|
|
130
|
-
get_telemetry_origin(
|
|
149
|
+
get_telemetry_origin(settings, 'tracing.contrib.global_default_service_name.enabled')
|
|
131
150
|
),
|
|
132
151
|
conf_value(
|
|
133
152
|
'DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED',
|
|
134
|
-
|
|
153
|
+
settings.tracing.contrib.peer_service_defaults,
|
|
135
154
|
seq_id,
|
|
136
|
-
get_telemetry_origin(
|
|
155
|
+
get_telemetry_origin(settings, 'tracing.contrib.peer_service_defaults')
|
|
137
156
|
),
|
|
138
157
|
conf_value(
|
|
139
158
|
'DD_TRACE_DEBUG',
|
|
140
|
-
|
|
159
|
+
settings.diagnostics.debug,
|
|
141
160
|
seq_id,
|
|
142
|
-
get_telemetry_origin(
|
|
161
|
+
get_telemetry_origin(settings, 'diagnostics.debug')
|
|
143
162
|
)
|
|
144
163
|
]
|
|
145
164
|
|
|
146
165
|
peer_service_mapping_str = ''
|
|
147
|
-
unless
|
|
148
|
-
peer_service_mapping =
|
|
166
|
+
unless settings.tracing.contrib.peer_service_mapping.empty?
|
|
167
|
+
peer_service_mapping = settings.tracing.contrib.peer_service_mapping
|
|
149
168
|
peer_service_mapping_str = peer_service_mapping.map { |key, value| "#{key}:#{value}" }.join(',')
|
|
150
169
|
end
|
|
151
170
|
list << conf_value(
|
|
152
171
|
'DD_TRACE_PEER_SERVICE_MAPPING',
|
|
153
172
|
peer_service_mapping_str,
|
|
154
173
|
seq_id,
|
|
155
|
-
get_telemetry_origin(
|
|
174
|
+
get_telemetry_origin(settings, 'tracing.contrib.peer_service_mapping')
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
# OpenTelemetry configuration options (using environment variable names)
|
|
178
|
+
otel_exporter_headers_string = settings.opentelemetry.exporter.headers&.map { |key, value| "#{key}=#{value}" }&.join(',')
|
|
179
|
+
otel_exporter_metrics_headers_string = settings.opentelemetry.metrics.headers&.map { |key, value| "#{key}=#{value}" }&.join(',')
|
|
180
|
+
list.push(
|
|
181
|
+
conf_value('OTEL_EXPORTER_OTLP_ENDPOINT', settings.opentelemetry.exporter.endpoint, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.endpoint')),
|
|
182
|
+
conf_value('OTEL_EXPORTER_OTLP_HEADERS', otel_exporter_headers_string, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.headers')),
|
|
183
|
+
conf_value('OTEL_EXPORTER_OTLP_PROTOCOL', settings.opentelemetry.exporter.protocol, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.protocol')),
|
|
184
|
+
conf_value('OTEL_EXPORTER_OTLP_TIMEOUT', settings.opentelemetry.exporter.timeout_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.timeout_millis')),
|
|
185
|
+
conf_value('DD_METRICS_OTEL_ENABLED', settings.opentelemetry.metrics.enabled, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.enabled')),
|
|
186
|
+
conf_value('OTEL_METRICS_EXPORTER', settings.opentelemetry.metrics.exporter, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.exporter')),
|
|
187
|
+
conf_value('OTEL_EXPORTER_OTLP_METRICS_ENDPOINT', settings.opentelemetry.metrics.endpoint, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.endpoint')),
|
|
188
|
+
conf_value('OTEL_EXPORTER_OTLP_METRICS_HEADERS', otel_exporter_metrics_headers_string, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.headers')),
|
|
189
|
+
conf_value('OTEL_EXPORTER_OTLP_METRICS_PROTOCOL', settings.opentelemetry.metrics.protocol, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.protocol')),
|
|
190
|
+
conf_value('OTEL_EXPORTER_OTLP_METRICS_TIMEOUT', settings.opentelemetry.metrics.timeout_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.timeout_millis')),
|
|
191
|
+
conf_value('OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE', settings.opentelemetry.metrics.temporality_preference, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.temporality_preference')),
|
|
192
|
+
conf_value('OTEL_METRIC_EXPORT_INTERVAL', settings.opentelemetry.metrics.export_interval_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.export_interval_millis')),
|
|
193
|
+
conf_value('OTEL_METRIC_EXPORT_TIMEOUT', settings.opentelemetry.metrics.export_timeout_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.export_timeout_millis')),
|
|
156
194
|
)
|
|
157
195
|
|
|
158
196
|
# Whitelist of configuration options to send in additional payload object
|
|
@@ -160,9 +198,9 @@ module Datadog
|
|
|
160
198
|
split_option = option_path.split('.')
|
|
161
199
|
list << conf_value(
|
|
162
200
|
option_path,
|
|
163
|
-
to_value(
|
|
201
|
+
to_value(settings.dig(*split_option)),
|
|
164
202
|
seq_id,
|
|
165
|
-
get_telemetry_origin(
|
|
203
|
+
get_telemetry_origin(settings, option_path)
|
|
166
204
|
)
|
|
167
205
|
end
|
|
168
206
|
|
|
@@ -177,38 +215,38 @@ module Datadog
|
|
|
177
215
|
list.push(
|
|
178
216
|
conf_value('instrumentation_source', instrumentation_source, seq_id, 'code'),
|
|
179
217
|
conf_value('DD_INJECT_FORCE', Core::Environment::VariableHelpers.env_to_bool('DD_INJECT_FORCE', false), seq_id, 'env_var'),
|
|
180
|
-
conf_value('DD_INJECTION_ENABLED',
|
|
218
|
+
conf_value('DD_INJECTION_ENABLED', DATADOG_ENV['DD_INJECTION_ENABLED'] || '', seq_id, 'env_var'),
|
|
181
219
|
)
|
|
182
220
|
|
|
183
221
|
# Add some more custom additional payload values here
|
|
184
|
-
if
|
|
222
|
+
if settings.logger.instance
|
|
185
223
|
list << conf_value(
|
|
186
224
|
'logger.instance',
|
|
187
|
-
|
|
225
|
+
settings.logger.instance.class.to_s,
|
|
188
226
|
seq_id,
|
|
189
|
-
get_telemetry_origin(
|
|
227
|
+
get_telemetry_origin(settings, 'logger.instance')
|
|
190
228
|
)
|
|
191
229
|
end
|
|
192
|
-
if
|
|
230
|
+
if settings.respond_to?('appsec')
|
|
193
231
|
list << conf_value(
|
|
194
232
|
'appsec.enabled',
|
|
195
|
-
|
|
233
|
+
settings.dig('appsec', 'enabled'),
|
|
196
234
|
seq_id,
|
|
197
|
-
get_telemetry_origin(
|
|
235
|
+
get_telemetry_origin(settings, 'appsec.enabled')
|
|
198
236
|
)
|
|
199
237
|
list << conf_value(
|
|
200
238
|
'appsec.sca_enabled',
|
|
201
|
-
|
|
239
|
+
settings.dig('appsec', 'sca_enabled'),
|
|
202
240
|
seq_id,
|
|
203
|
-
get_telemetry_origin(
|
|
241
|
+
get_telemetry_origin(settings, 'appsec.sca_enabled')
|
|
204
242
|
)
|
|
205
243
|
end
|
|
206
|
-
if
|
|
244
|
+
if settings.respond_to?('ci')
|
|
207
245
|
list << conf_value(
|
|
208
246
|
'ci.enabled',
|
|
209
|
-
|
|
247
|
+
settings.dig('ci', 'enabled'),
|
|
210
248
|
seq_id,
|
|
211
|
-
get_telemetry_origin(
|
|
249
|
+
get_telemetry_origin(settings, 'ci.enabled')
|
|
212
250
|
)
|
|
213
251
|
end
|
|
214
252
|
|
|
@@ -218,8 +256,8 @@ module Datadog
|
|
|
218
256
|
# standard:enable Metrics/AbcSize
|
|
219
257
|
# standard:enable Metrics/MethodLength
|
|
220
258
|
|
|
221
|
-
def agent_transport
|
|
222
|
-
adapter =
|
|
259
|
+
def agent_transport(agent_settings)
|
|
260
|
+
adapter = agent_settings.adapter
|
|
223
261
|
if adapter == Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
|
224
262
|
'UDS'
|
|
225
263
|
else
|
|
@@ -239,6 +277,7 @@ module Datadog
|
|
|
239
277
|
# - `default`: set when the user has not set any configuration for the key (defaults to a value)
|
|
240
278
|
# - `unknown`: set for cases where it is difficult/not possible to determine the source of a config.
|
|
241
279
|
def conf_value(name, value, seq_id, origin)
|
|
280
|
+
# @type var result: telemetry_configuration
|
|
242
281
|
result = {name: name, value: value, origin: origin, seq_id: seq_id}
|
|
243
282
|
if origin == 'fleet_stable_config'
|
|
244
283
|
fleet_id = Core::Configuration::StableConfig.configuration.dig(:fleet, :id)
|
|
@@ -260,23 +299,22 @@ module Datadog
|
|
|
260
299
|
end
|
|
261
300
|
end
|
|
262
301
|
|
|
263
|
-
def install_signature
|
|
264
|
-
config = Datadog.configuration
|
|
302
|
+
def install_signature(settings)
|
|
265
303
|
{
|
|
266
|
-
install_id:
|
|
267
|
-
install_type:
|
|
268
|
-
install_time:
|
|
304
|
+
install_id: settings.dig('telemetry', 'install_id'),
|
|
305
|
+
install_type: settings.dig('telemetry', 'install_type'),
|
|
306
|
+
install_time: settings.dig('telemetry', 'install_time'),
|
|
269
307
|
}
|
|
270
308
|
end
|
|
271
309
|
|
|
272
|
-
def get_telemetry_origin(
|
|
310
|
+
def get_telemetry_origin(settings, config_path)
|
|
273
311
|
split_option = config_path.split('.')
|
|
274
312
|
option_name = split_option.pop
|
|
275
313
|
return 'unknown' if option_name.nil?
|
|
276
314
|
|
|
277
315
|
# @type var parent_setting: Core::Configuration::Options
|
|
278
316
|
# @type var option: Core::Configuration::Option
|
|
279
|
-
parent_setting =
|
|
317
|
+
parent_setting = settings.dig(*split_option)
|
|
280
318
|
option = parent_setting.send(:resolve_option, option_name.to_sym)
|
|
281
319
|
option.precedence_set&.origin || 'unknown'
|
|
282
320
|
end
|
|
@@ -28,13 +28,36 @@ module Datadog
|
|
|
28
28
|
# and app-closing events.
|
|
29
29
|
class SynthAppClientConfigurationChange < AppStarted
|
|
30
30
|
def type
|
|
31
|
-
|
|
31
|
+
if reset?
|
|
32
|
+
super
|
|
33
|
+
else
|
|
34
|
+
'app-client-configuration-change'
|
|
35
|
+
end
|
|
32
36
|
end
|
|
33
37
|
|
|
34
38
|
def payload
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
if reset?
|
|
40
|
+
super
|
|
41
|
+
else
|
|
42
|
+
{
|
|
43
|
+
configuration: @configuration,
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def app_started?
|
|
49
|
+
reset?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Revert this event to a "regular" AppStarted event.
|
|
53
|
+
#
|
|
54
|
+
# Used in after_fork to send the AppStarted event in child processes.
|
|
55
|
+
def reset!
|
|
56
|
+
@reset = true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def reset?
|
|
60
|
+
defined?(@reset) && !!@reset
|
|
38
61
|
end
|
|
39
62
|
end
|
|
40
63
|
end
|
|
@@ -26,6 +26,7 @@ require_relative 'event/base'
|
|
|
26
26
|
require_relative 'event/app_client_configuration_change'
|
|
27
27
|
require_relative 'event/app_closing'
|
|
28
28
|
require_relative 'event/app_dependencies_loaded'
|
|
29
|
+
require_relative 'event/app_endpoints_loaded'
|
|
29
30
|
require_relative 'event/app_heartbeat'
|
|
30
31
|
require_relative 'event/app_integrations_change'
|
|
31
32
|
require_relative 'event/app_started'
|
|
@@ -14,8 +14,8 @@ module Datadog
|
|
|
14
14
|
# read: lib/datadog/core/telemetry/logging.rb
|
|
15
15
|
module Logger
|
|
16
16
|
class << self
|
|
17
|
-
def report(exception, level: :error, description: nil
|
|
18
|
-
instance&.report(exception, level: level, description: description
|
|
17
|
+
def report(exception, level: :error, description: nil)
|
|
18
|
+
instance&.report(exception, level: level, description: description)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def error(description)
|
|
@@ -45,17 +45,11 @@ module Datadog
|
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
def report(exception, level: :error, description: nil
|
|
48
|
+
def report(exception, level: :error, description: nil)
|
|
49
49
|
# Anonymous exceptions to be logged as <Class:0x00007f8b1c0b3b40>
|
|
50
50
|
message = +"#{exception.class.name || exception.class.inspect}" # standard:disable Style/RedundantInterpolation
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if description || exception_message
|
|
55
|
-
message << ':'
|
|
56
|
-
message << " #{description}" if description
|
|
57
|
-
message << " (#{exception.message})" if exception_message
|
|
58
|
-
end
|
|
52
|
+
message << ": #{description}" if description
|
|
59
53
|
|
|
60
54
|
event = Event::Log.new(
|
|
61
55
|
message: message,
|
|
@@ -6,8 +6,11 @@ module Datadog
|
|
|
6
6
|
module Core
|
|
7
7
|
module Telemetry
|
|
8
8
|
# MetricsManager aggregates and flushes metrics and distributions
|
|
9
|
+
#
|
|
10
|
+
# @api private
|
|
9
11
|
class MetricsManager
|
|
10
12
|
attr_reader :enabled
|
|
13
|
+
attr_reader :collections
|
|
11
14
|
|
|
12
15
|
def initialize(aggregation_interval:, enabled:)
|
|
13
16
|
@interval = aggregation_interval
|
|
@@ -68,6 +71,12 @@ module Datadog
|
|
|
68
71
|
@enabled = false
|
|
69
72
|
end
|
|
70
73
|
|
|
74
|
+
def clear
|
|
75
|
+
@mutex.synchronize do
|
|
76
|
+
@collections = {}
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
71
80
|
private
|
|
72
81
|
|
|
73
82
|
def fetch_or_create_collection(namespace)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative '../environment/platform'
|
|
4
|
+
require_relative '../environment/process'
|
|
4
5
|
require_relative '../utils/hash'
|
|
5
6
|
|
|
6
7
|
module Datadog
|
|
@@ -11,9 +12,9 @@ module Datadog
|
|
|
11
12
|
class << self
|
|
12
13
|
using Core::Utils::Hash::Refinement
|
|
13
14
|
|
|
14
|
-
def build_payload(event, seq_id,
|
|
15
|
+
def build_payload(event, seq_id, debug: false)
|
|
15
16
|
hash = {
|
|
16
|
-
api_version:
|
|
17
|
+
api_version: 'v2',
|
|
17
18
|
application: application,
|
|
18
19
|
debug: debug,
|
|
19
20
|
host: host,
|
|
@@ -43,7 +44,7 @@ module Datadog
|
|
|
43
44
|
tracer_version = "#{tracer_version}-ci-#{::Datadog::CI::VERSION::STRING}"
|
|
44
45
|
end
|
|
45
46
|
|
|
46
|
-
{
|
|
47
|
+
app = {
|
|
47
48
|
env: config.env,
|
|
48
49
|
language_name: Core::Environment::Ext::LANG,
|
|
49
50
|
language_version: Core::Environment::Ext::LANG_VERSION,
|
|
@@ -53,6 +54,10 @@ module Datadog
|
|
|
53
54
|
service_version: config.version,
|
|
54
55
|
tracer_version: tracer_version
|
|
55
56
|
}
|
|
57
|
+
|
|
58
|
+
tag_process_tags!(app, config)
|
|
59
|
+
|
|
60
|
+
app
|
|
56
61
|
end
|
|
57
62
|
|
|
58
63
|
def host
|
|
@@ -64,6 +69,15 @@ module Datadog
|
|
|
64
69
|
kernel_version: Core::Environment::Platform.kernel_version
|
|
65
70
|
}
|
|
66
71
|
end
|
|
72
|
+
|
|
73
|
+
def tag_process_tags!(app, config)
|
|
74
|
+
return unless config.experimental_propagate_process_tags_enabled
|
|
75
|
+
|
|
76
|
+
process_tags = Core::Environment::Process.serialized
|
|
77
|
+
return if process_tags.empty?
|
|
78
|
+
|
|
79
|
+
app[:process_tags] = process_tags
|
|
80
|
+
end
|
|
67
81
|
end
|
|
68
82
|
end
|
|
69
83
|
end
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative '../../../transport/http/api/endpoint'
|
|
4
4
|
require_relative '../../../transport/http/api/instance'
|
|
5
|
-
require_relative '../../../transport/http/
|
|
5
|
+
require_relative '../../../transport/http/client'
|
|
6
6
|
require_relative '../../../transport/request'
|
|
7
|
-
require_relative 'client'
|
|
8
7
|
|
|
9
8
|
module Datadog
|
|
10
9
|
module Core
|
|
@@ -12,35 +11,7 @@ module Datadog
|
|
|
12
11
|
module Transport
|
|
13
12
|
module HTTP
|
|
14
13
|
module Telemetry
|
|
15
|
-
module Client
|
|
16
|
-
def send_telemetry_payload(request)
|
|
17
|
-
send_request(request) do |api, env| # steep:ignore
|
|
18
|
-
api.send_telemetry(env)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
14
|
module API
|
|
24
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
|
25
|
-
def send_telemetry(env)
|
|
26
|
-
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('telemetry', self) unless spec.is_a?(Telemetry::API::Spec)
|
|
27
|
-
|
|
28
|
-
spec.send_telemetry(env) do |request_env|
|
|
29
|
-
call(request_env)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
|
35
|
-
attr_accessor :telemetry
|
|
36
|
-
|
|
37
|
-
def send_telemetry(env, &block)
|
|
38
|
-
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('telemetry', self) if telemetry.nil?
|
|
39
|
-
|
|
40
|
-
telemetry.call(env, &block)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
15
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
45
16
|
HEADER_CONTENT_TYPE = 'Content-Type'
|
|
46
17
|
|
|
@@ -64,12 +35,12 @@ module Datadog
|
|
|
64
35
|
super
|
|
65
36
|
end
|
|
66
37
|
|
|
67
|
-
def headers(request_type:, api_key
|
|
38
|
+
def headers(request_type:, api_key:)
|
|
68
39
|
{
|
|
69
40
|
Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST => '1',
|
|
70
41
|
# Provided by encoder
|
|
71
42
|
# 'Content-Type' => 'application/json',
|
|
72
|
-
'DD-Telemetry-API-Version' =>
|
|
43
|
+
'DD-Telemetry-API-Version' => 'v2',
|
|
73
44
|
'DD-Telemetry-Request-Type' => request_type,
|
|
74
45
|
'DD-Client-Library-Language' => Core::Environment::Ext::LANG,
|
|
75
46
|
'DD-Client-Library-Version' => Core::Environment::Identity.gem_datadog_version_semver2,
|
|
@@ -83,8 +54,6 @@ module Datadog
|
|
|
83
54
|
end
|
|
84
55
|
end
|
|
85
56
|
end
|
|
86
|
-
|
|
87
|
-
HTTP::Client.include(Telemetry::Client)
|
|
88
57
|
end
|
|
89
58
|
end
|
|
90
59
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative 'http/api'
|
|
3
|
+
require_relative '../../encoding'
|
|
5
4
|
require_relative '../../transport/http'
|
|
5
|
+
require_relative 'telemetry'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Core
|
|
@@ -10,6 +10,16 @@ module Datadog
|
|
|
10
10
|
module Transport
|
|
11
11
|
# Namespace for HTTP transport components
|
|
12
12
|
module HTTP
|
|
13
|
+
AGENT_TELEMETRY = Telemetry::API::Endpoint.new(
|
|
14
|
+
'/telemetry/proxy/api/v2/apmtelemetry',
|
|
15
|
+
Core::Encoding::JSONEncoder,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
AGENTLESS_TELEMETRY = Telemetry::API::Endpoint.new(
|
|
19
|
+
'/api/v2/apmtelemetry',
|
|
20
|
+
Core::Encoding::JSONEncoder,
|
|
21
|
+
)
|
|
22
|
+
|
|
13
23
|
module_function
|
|
14
24
|
|
|
15
25
|
# Builds a new Transport::HTTP::Client with default settings
|
|
@@ -18,18 +28,14 @@ module Datadog
|
|
|
18
28
|
agent_settings:,
|
|
19
29
|
logger:,
|
|
20
30
|
api_key: nil,
|
|
21
|
-
api_version: nil,
|
|
22
31
|
headers: nil
|
|
23
32
|
)
|
|
24
|
-
Core::Transport::HTTP.build(
|
|
33
|
+
Core::Transport::HTTP.build(
|
|
25
34
|
logger: logger,
|
|
26
35
|
agent_settings: agent_settings,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
transport.api API::AGENTLESS_TELEMETRY, apis[API::AGENTLESS_TELEMETRY]
|
|
32
|
-
|
|
36
|
+
headers: headers
|
|
37
|
+
) do |transport|
|
|
38
|
+
transport.api 'agentless_telemetry', AGENTLESS_TELEMETRY
|
|
33
39
|
# Call block to apply any customization, if provided
|
|
34
40
|
yield(transport) if block_given?
|
|
35
41
|
end.to_transport(Core::Telemetry::Transport::Telemetry::Transport).tap do |transport|
|
|
@@ -42,15 +48,14 @@ module Datadog
|
|
|
42
48
|
def agent_telemetry(
|
|
43
49
|
agent_settings:,
|
|
44
50
|
logger:,
|
|
45
|
-
api_version: nil,
|
|
46
51
|
headers: nil
|
|
47
52
|
)
|
|
48
|
-
Core::Transport::HTTP.build(
|
|
53
|
+
Core::Transport::HTTP.build(
|
|
49
54
|
logger: logger,
|
|
50
|
-
agent_settings: agent_settings,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
transport.api
|
|
55
|
+
agent_settings: agent_settings,
|
|
56
|
+
headers: headers
|
|
57
|
+
) do |transport|
|
|
58
|
+
transport.api 'agent_telemetry', AGENT_TELEMETRY
|
|
54
59
|
|
|
55
60
|
# Call block to apply any customization, if provided
|
|
56
61
|
yield(transport) if block_given?
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative '../../transport/parcel'
|
|
4
|
-
require_relative '
|
|
4
|
+
require_relative '../../transport/transport'
|
|
5
5
|
require_relative 'http/telemetry'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
@@ -24,23 +24,15 @@ module Datadog
|
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
class Transport
|
|
28
|
-
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
|
27
|
+
class Transport < Core::Transport::Transport
|
|
29
28
|
attr_accessor :api_key
|
|
30
29
|
|
|
31
|
-
def initialize(apis, default_api, logger:)
|
|
32
|
-
@apis = apis
|
|
33
|
-
@logger = logger
|
|
34
|
-
|
|
35
|
-
@client = HTTP::Client.new(@apis[default_api], logger: logger)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
30
|
def send_telemetry(request_type:, payload:)
|
|
39
31
|
json = JSON.dump(payload)
|
|
40
32
|
parcel = EncodedParcel.new(json)
|
|
41
33
|
request = Request.new(request_type, parcel, api_key)
|
|
42
34
|
|
|
43
|
-
@client.
|
|
35
|
+
@client.send_request(:telemetry, request)
|
|
44
36
|
# Perform no error checking here
|
|
45
37
|
end
|
|
46
38
|
end
|