Skip to content
Merged
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
8 changes: 7 additions & 1 deletion lib/new_relic/agent/configuration/default_source.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2556,8 +2556,14 @@ def self.convert_to_constant_list(raw_value)
:allowed_from_server => true,
:description => 'Number of seconds betwixt connections to the New Relic span event collection services.'
},
# TODO: Sync with the other agents to see what the config should be named, how it should be enabled, how it should be described
:'opentelemetry.enabled' => {
:default => false,
:public => false,
:type => Boolean,
:allowed_from_server => false,
:description => 'A global configuration option for disabling all OpenTelemetry signals sent through New Relic. If false, no OpenTelemetry signals will be sent to New Relic. If true, the signal-specific enabled config option (e.g. opentelemetry.traces.enabled) determines whether telemetry of that signal type will be reported to New Relic.'
},
:'opentelemetry.traces.enabled' => {
:default => false,
:public => false,
:type => Boolean,
Expand Down
13 changes: 8 additions & 5 deletions lib/new_relic/agent/opentelemetry_bridge.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ module NewRelic
module Agent
class OpenTelemetryBridge
def initialize
# no-op without OpenTelemetry API & config
return unless defined?(OpenTelemetry) &&
NewRelic::Agent.config[:'opentelemetry.enabled']

OpenTelemetryBridge.install
# currently, we only have support for traces
# this method should change when we add support for metrics and logs.
if defined?(OpenTelemetry) && Agent.config[:'opentelemetry.enabled'] && Agent.config[:'opentelemetry.traces.enabled']
OpenTelemetryBridge.install
NewRelic::Agent.record_metric('Supportability/Tracing/Ruby/OpenTelemetryBridge/enabled', 0.0)
else
NewRelic::Agent.record_metric('Supportability/Tracing/Ruby/OpenTelemetryBridge/disabled', 0.0)
end
end

private
Expand Down
4 changes: 3 additions & 1 deletion test/multiverse/suites/hybrid_agent/config/newrelic.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ development:
stack_trace_threshold: 0.5
transaction_threshold: 1.0
capture_params: false
opentelemetry.enabled: true
opentelemetry:
enabled: true
traces.enabled: true
58 changes: 50 additions & 8 deletions test/new_relic/agent/opentelemetry_bridge_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,71 @@ module Agent
class OpenTelemetryBridgeTest < Minitest::Test
class BridgeInstallationError < StandardError; end

def setup
@config = {
:'opentelemetry.enabled' => true,
:'opentelemetry.traces.enabled' => true
}
NewRelic::Agent.config.add_config_for_testing(@config)
end

def teardown
NewRelic::Agent.config.reset_to_defaults
end

def test_does_not_run_requires_without_opentelemetry_api_gem
with_config(:'opentelemetry.enabled' => true) do
assert NewRelic::Agent::OpenTelemetryBridge.new
assert NewRelic::Agent::OpenTelemetryBridge.new
end

def test_does_not_install_if_overall_flag_off_but_traces_on
with_config(:'opentelemetry.enabled' => false, :'opentelemetry.traces.enabled' => true) do
NewRelic::Agent::OpenTelemetryBridge.stub(:install, -> { raise BridgeInstallationError.new }) do
refute_raises(BridgeInstallationError) { NewRelic::Agent::OpenTelemetryBridge.new }
end
end
end

def test_does_not_install_if_overall_flag_on_but_traces_off
with_config(:'opentelemetry.enabled' => true, :'opentelemetry.traces.enabled' => false) do
NewRelic::Agent::OpenTelemetryBridge.stub(:install, -> { raise BridgeInstallationError.new }) do
refute_raises(BridgeInstallationError) { NewRelic::Agent::OpenTelemetryBridge.new }
end
end
end

def test_does_not_run_requires_without_config
with_config(:'opentelemetry.enabled' => false) do
Object.stub_const(:OpenTelemetry, nil) do
Object.stub_const(:OpenTelemetry, nil) do # pretend like the opentelemetry-api gem is installed
assert NewRelic::Agent::OpenTelemetryBridge.new
end
end
end

def test_installs_bridge_when_configured
with_config(:'opentelemetry.enabled' => true) do
Object.stub_const(:OpenTelemetry, nil) do
NewRelic::Agent::OpenTelemetryBridge.stub(:install, -> { raise BridgeInstallationError.new }) do
assert_raises(BridgeInstallationError) { NewRelic::Agent::OpenTelemetryBridge.new }
end
Object.stub_const(:OpenTelemetry, nil) do # pretend like the opentelemetry-api gem is installed
NewRelic::Agent::OpenTelemetryBridge.stub(:install, -> { raise BridgeInstallationError.new }) do
assert_raises(BridgeInstallationError) { NewRelic::Agent::OpenTelemetryBridge.new }
end
end
end

def test_adds_supportability_metric_when_opentelemetry_enabled
Object.stub_const(:OpenTelemetry, nil) do # pretend like the opentelemetry-api gem is installed
NewRelic::Agent::OpenTelemetryBridge.stub(:install, -> { nil }) do
NewRelic::Agent::OpenTelemetryBridge.new

assert_metrics_recorded('Supportability/Tracing/Ruby/OpenTelemetryBridge/enabled')
end
end
end

def test_adds_supportability_metric_when_opentelemetry_disabled
with_config(:'opentelemetry.enabled' => false) do
NewRelic::Agent::OpenTelemetryBridge.new

assert_metrics_recorded('Supportability/Tracing/Ruby/OpenTelemetryBridge/disabled')
end
end
end
end
end
Loading