Skip to content

Commit 42ba8f3

Browse files
committed
Add default Telemetry SDK resource create method
The specification requires a Telemetry::SDK resource, this adds a method for create it directly from the resource class. This also initializes it by default on the configurator. The resource setter on the configurator class will merge the default resource with the one provided.
1 parent 5fa5ac0 commit 42ba8f3

4 files changed

Lines changed: 42 additions & 3 deletions

File tree

sdk/lib/opentelemetry/sdk/configurator.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Configurator # rubocop:disable Metrics/ClassLength
1616
private_constant :USE_MODE_UNSPECIFIED, :USE_MODE_ONE, :USE_MODE_ALL
1717

1818
attr_writer :logger, :http_extractors, :http_injectors, :text_extractors,
19-
:text_injectors, :resource
19+
:text_injectors
2020

2121
def initialize
2222
@adapter_names = []
@@ -27,13 +27,17 @@ def initialize
2727
@text_injectors = nil
2828
@span_processors = []
2929
@use_mode = USE_MODE_UNSPECIFIED
30-
@resource = OpenTelemetry::SDK::Resources::Resource.create
30+
@resource = Resources::Resource.telemetry_sdk
3131
end
3232

3333
def logger
3434
@logger ||= Logger.new(STDOUT)
3535
end
3636

37+
def resource=(new_resource)
38+
@resource = @resource.merge(new_resource)
39+
end
40+
3741
# Install an instrumentation adapter with specificied optional +config+.
3842
# Use can be called multiple times to install multiple instrumentation
3943
# adapters. Only +use+ or +use_all+, but not both when installing

sdk/lib/opentelemetry/sdk/resources/resource.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module Resources
1111
# for which telemetry (metrics or traces) is reported.
1212
class Resource
1313
class << self
14-
private :new # rubocop:disable Style/AccessModifierDeclarations
14+
private :new
1515

1616
# Returns a newly created {Resource} with the specified labels
1717
#
@@ -29,6 +29,14 @@ def create(labels = {})
2929

3030
new(frozen_labels)
3131
end
32+
33+
def telemetry_sdk
34+
create(
35+
Constants::TELEMETRY_SDK_RESOURCE[:name] => 'opentelemetry',
36+
Constants::TELEMETRY_SDK_RESOURCE[:language] => 'ruby',
37+
Constants::TELEMETRY_SDK_RESOURCE[:version] => "semver:#{OpenTelemetry::SDK::VERSION}"
38+
)
39+
end
3240
end
3341

3442
# @api private

sdk/test/opentelemetry/sdk/configurator_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,24 @@
1515
end
1616
end
1717

18+
describe '#resource=' do
19+
let(:configurator_resource) { configurator.instance_variable_get(:@resource) }
20+
let(:configurator_resource_labels) { configurator_resource.label_enumerator.to_h }
21+
let(:expected_resource_labels) do
22+
{
23+
'telemetry.sdk.name' => 'opentelemetry',
24+
'telemetry.sdk.language' => 'ruby',
25+
'telemetry.sdk.version' => "semver:#{OpenTelemetry::SDK::VERSION}",
26+
'test_key' => 'test_value'
27+
}
28+
end
29+
30+
it 'merges the resource' do
31+
configurator.resource = OpenTelemetry::SDK::Resources::Resource.create('test_key' => 'test_value')
32+
_(configurator_resource_labels).must_equal(expected_resource_labels)
33+
end
34+
end
35+
1836
describe '#use' do
1937
it 'can be called multiple times' do
2038
configurator.use('TestAdapter', enabled: true)

sdk/test/opentelemetry/sdk/resources/resource_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@
4141
end
4242
end
4343

44+
describe '.telemetry_sdk' do
45+
it 'returns a resource for the telemetry sdk' do
46+
resource_labels = Resource.telemetry_sdk.label_enumerator.to_h
47+
_(resource_labels['telemetry.sdk.name']).must_equal('opentelemetry')
48+
_(resource_labels['telemetry.sdk.language']).must_equal('ruby')
49+
_(resource_labels['telemetry.sdk.version']).must_match(/semver:\b\d{1,3}\.\d{1,3}\.\d{1,3}/)
50+
end
51+
end
52+
4453
describe '#merge' do
4554
it 'merges two resources into a third' do
4655
res1 = Resource.create('k1' => 'v1', 'k2' => 'v2')

0 commit comments

Comments
 (0)