Skip to content

Commit ca84bc6

Browse files
Merge pull request #3411 from newrelic/move-span-status-to-agent-attrs
Move span status to agent attributes
2 parents 534283c + ae4c04b commit ca84bc6

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

lib/new_relic/agent/opentelemetry/trace/span.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ def status=(new_status)
6363
attrs = {'status.code' => new_status.code}
6464
attrs['status.description'] = new_status.description unless new_status.description.empty?
6565

66-
NewRelic::Agent.add_custom_span_attributes(attrs)
66+
txn = finishable.is_a?(Transaction) ? finishable : finishable.transaction
67+
attrs.each { |k, v| txn.add_agent_attribute(k, v, AttributeFilter::DST_SPAN_EVENTS) }
6768
end
6869

6970
INVALID = new(span_context: ::OpenTelemetry::Trace::SpanContext::INVALID)

test/multiverse/suites/hybrid_agent/span_test.rb

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,39 +160,71 @@ def test_message_logged_when_name_called_but_span_is_finished
160160
def test_status_works_with_description
161161
span = @tracer.start_span('oops', kind: :server)
162162
span.status = ::OpenTelemetry::Trace::Status.error('Something went wrong')
163-
span.finishable.stubs(:sampled?).returns(true)
163+
txn = span.finishable
164+
165+
txn.stubs(:sampled?).returns(true)
164166
span.finish
165167

166168
# error is code 2
167169
expected = {'status.code' => 2, 'status.description' => 'Something went wrong'}
168170

169-
assert_equal expected, last_span_event[1]
171+
segment_attrs = txn.segments.first.attributes
172+
segment_agent_attrs = segment_attrs.instance_variable_get(:@agent_attributes)
173+
174+
assert_equal expected['status.code'], segment_agent_attrs['status.code']
175+
assert_equal expected['status.description'], segment_agent_attrs['status.description']
176+
177+
# index 2 of the last_span_event array is for agent attributes
178+
last_span_agent_attrs = last_span_event[2]
179+
180+
assert_equal expected['status.code'], last_span_agent_attrs['status.code']
181+
assert_equal expected['status.description'], last_span_agent_attrs['status.description']
170182
end
171183

172184
def test_status_works_without_description
173185
span = @tracer.start_span('sleepy puppy', kind: :server)
186+
txn = span.finishable
174187
span.status = ::OpenTelemetry::Trace::Status.ok
175-
span.finishable.stubs(:sampled?).returns(true)
188+
189+
txn.stubs(:sampled?).returns(true)
176190
span.finish
177191

178192
# ok is status code 0
179193
expected = {'status.code' => 0}
180194

181-
assert_equal expected, last_span_event[1]
195+
segment_attrs = txn.segments.first.attributes
196+
segment_agent_attrs = segment_attrs.instance_variable_get(:@agent_attributes)
197+
198+
assert_equal expected['status.code'], segment_agent_attrs['status.code']
199+
200+
# index 2 of the last_span_event array is for agent attributes
201+
last_span_agent_attrs = last_span_event[2]
202+
203+
assert_equal expected['status.code'], last_span_agent_attrs['status.code']
182204
end
183205

184206
def test_default_status_is_unset
185207
span = @tracer.start_span('advil', kind: :server)
208+
txn = span.finishable
186209

187210
assert_instance_of(::OpenTelemetry::Trace::Status, span.status)
188211
# unset is status code 1
189212
assert_equal(1, span.status.code)
190213

214+
txn.stubs(:sampled?).returns(true)
191215
span.finish
192216

193217
expected = {'status.code' => 1}
194218

195-
assert_equal expected, last_span_event[1]
219+
segment_attrs = txn.segments.first.attributes
220+
segment_agent_attrs = segment_attrs.instance_variable_get(:@agent_attributes)
221+
222+
assert_equal expected['status.code'], segment_agent_attrs['status.code']
223+
224+
# index 2 of the last_span_event array is for agent attributes
225+
last_span_agent_attrs = last_span_event[2]
226+
227+
assert_equal expected['status.code'], last_span_agent_attrs['status.code']
196228
end
197229
end
198230
end

0 commit comments

Comments
 (0)