Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion lib/datadog/core/diagnostics/environment_logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,10 @@ def collect_config!
tags: tags,
runtime_metrics_enabled: runtime_metrics_enabled,
vm: vm,
health_metrics_enabled: health_metrics_enabled
health_metrics_enabled: health_metrics_enabled,
otlp_traces_export_enabled: otlp_traces_export_enabled,
otlp_metrics_export_enabled: otlp_metrics_export_enabled,
otlp_logs_export_enabled: otlp_logs_export_enabled
}
end

Expand Down Expand Up @@ -159,8 +162,34 @@ def health_metrics_enabled
!!Datadog.configuration.health_metrics.enabled
end

# @return [Boolean] whether the tracer exports traces over OTLP.
# Always false: Ruby exports spans in Datadog's native format and has no OTLP trace exporter.
def otlp_traces_export_enabled
false
end

# @return [Boolean] whether the tracer exports metrics over OTLP
def otlp_metrics_export_enabled
!!opentelemetry_settings&.metrics&.enabled
end

# @return [Boolean] whether the tracer exports logs over OTLP
def otlp_logs_export_enabled
!!opentelemetry_settings&.logs&.enabled
end

private

# The `opentelemetry` settings namespace is registered by core configuration, but access it
# defensively so a missing/unregistered namespace defaults to `false` rather than raising.
def opentelemetry_settings
return unless Datadog.configuration.respond_to?(:opentelemetry)

Datadog.configuration.opentelemetry
rescue
nil
end

# Outputs "k1:v1,k2:v2,..."
def hash_serializer(h)
h.map { |k, v| "#{k}:#{v}" }.join(",")
Expand Down
6 changes: 5 additions & 1 deletion sig/datadog/core/diagnostics/environment_logger.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ module Datadog
def self.collect_and_log!: (?Hash[Symbol, untyped]? extra_fields) -> void
end
module EnvironmentCollector
def self.collect_config!: () -> { date: untyped, os_name: untyped, version: untyped, lang: untyped, lang_version: untyped, env: untyped, service: untyped, dd_version: untyped, debug: untyped, tags: untyped, runtime_metrics_enabled: untyped, vm: untyped, health_metrics_enabled: untyped }
def self.collect_config!: () -> { date: untyped, os_name: untyped, version: untyped, lang: untyped, lang_version: untyped, env: untyped, service: untyped, dd_version: untyped, debug: untyped, tags: untyped, runtime_metrics_enabled: untyped, vm: untyped, health_metrics_enabled: untyped, otlp_traces_export_enabled: bool, otlp_metrics_export_enabled: bool, otlp_logs_export_enabled: bool }

def self.date: () -> untyped
def self.os_name: () -> untyped
Expand All @@ -32,8 +32,12 @@ module Datadog
def self.runtime_metrics_enabled: () -> untyped
def self.vm: () -> ::String
def self.health_metrics_enabled: () -> untyped
def self.otlp_traces_export_enabled: () -> bool
def self.otlp_metrics_export_enabled: () -> bool
def self.otlp_logs_export_enabled: () -> bool

private
def self.opentelemetry_settings: () -> untyped
def self.hash_serializer: (untyped h) -> untyped
end
end
Expand Down
43 changes: 42 additions & 1 deletion spec/datadog/core/diagnostics/environment_logger_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@
Datadog.configuration.reset!
end

# The dev shell may export OTLP-related env vars; clear them so "default"-state
# assertions are deterministic regardless of the surrounding environment.
around do |example|
ClimateControl.modify(
"DD_METRICS_OTEL_ENABLED" => nil,
"DD_LOGS_OTEL_ENABLED" => nil,
) do
example.run
end
end

describe "#collect_and_log!" do
include_context "non-development execution environment"

Expand All @@ -38,6 +49,9 @@
"runtime_metrics_enabled" => false,
"vm" => be_a(String),
"health_metrics_enabled" => false,
"otlp_traces_export_enabled" => false,
"otlp_metrics_export_enabled" => false,
"otlp_logs_export_enabled" => false,
}
end

Expand Down Expand Up @@ -134,7 +148,10 @@
tags: nil,
runtime_metrics_enabled: false,
vm: be_a(String),
health_metrics_enabled: false
health_metrics_enabled: false,
otlp_traces_export_enabled: false,
otlp_metrics_export_enabled: false,
otlp_logs_export_enabled: false
)
end

Expand Down Expand Up @@ -206,6 +223,30 @@

it { is_expected.to include health_metrics_enabled: true }
end

context "with OTLP metrics export enabled" do
before { expect(Datadog.configuration.opentelemetry.metrics).to receive(:enabled).and_return(true) }

it { is_expected.to include otlp_metrics_export_enabled: true }
end

context "with OTLP logs export enabled" do
before { expect(Datadog.configuration.opentelemetry.logs).to receive(:enabled).and_return(true) }

it { is_expected.to include otlp_logs_export_enabled: true }
end

context "when the opentelemetry settings namespace is unavailable" do
before { allow(Datadog.configuration).to receive(:respond_to?).with(:opentelemetry).and_return(false) }

it do
is_expected.to include(
otlp_traces_export_enabled: false,
otlp_metrics_export_enabled: false,
otlp_logs_export_enabled: false,
)
end
end
end
end
end
Loading