diff --git a/lib/datadog/opentelemetry/sdk/span_processor.rb b/lib/datadog/opentelemetry/sdk/span_processor.rb index f4c09b6f9fc..caa07e91930 100644 --- a/lib/datadog/opentelemetry/sdk/span_processor.rb +++ b/lib/datadog/opentelemetry/sdk/span_processor.rb @@ -136,7 +136,7 @@ def span_arguments(span, attributes) end attributes.flatten!(1) - kwargs[:tags] = attributes + kwargs[:tags] = attributes.to_h [name, kwargs] end diff --git a/spec/datadog/opentelemetry_spec.rb b/spec/datadog/opentelemetry_spec.rb index 54ced07cf46..bdc24bd455b 100644 --- a/spec/datadog/opentelemetry_spec.rb +++ b/spec/datadog/opentelemetry_spec.rb @@ -45,9 +45,11 @@ describe '#in_span' do context 'without an active span' do - subject!(:in_span) { otel_tracer.in_span('test', **span_options) {} } + subject(:in_span) { otel_tracer.in_span('test', **span_options) {} } it 'records a finished span' do + in_span + expect(span).to be_root_span expect(span.name).to eq('internal') expect(span.resource).to eq('test') @@ -57,6 +59,14 @@ context 'with attributes' do let(:span_options) { { attributes: attributes } } + before do + Datadog.configure do |c| + c.tags = { 'global' => 'global_tag' } + end + + in_span + end + [ [1, 1], [false, 'false'], @@ -69,6 +79,10 @@ it "sets tag #{expected}" do expect(span.get_tag('tag')).to eq(expected) end + + it 'keeps the global trace tags' do + expect(span.get_tag('global')).to eq('global_tag') + end end end @@ -208,6 +222,7 @@ let(:span_options) { { start_timestamp: start_timestamp } } let(:start_timestamp) { Time.utc(2023) } it do + in_span expect(span.start_time).to eq(start_timestamp) end end