diff --git a/lib/datadog/tracing/transport/serializable_trace.rb b/lib/datadog/tracing/transport/serializable_trace.rb index 3dc7070292d..73dd0216957 100644 --- a/lib/datadog/tracing/transport/serializable_trace.rb +++ b/lib/datadog/tracing/transport/serializable_trace.rb @@ -73,7 +73,7 @@ def to_msgpack(packer = nil) end # convert span events to tags - span.set_tag('events', span.events.map(&:to_hash).to_json) if span.events.count + span.set_tag('events', span.events.map(&:to_hash).to_json) if span.events.count > 0 # DEV: We use strings as keys here, instead of symbols, as # DEV: MessagePack will ultimately convert them to strings. diff --git a/spec/datadog/tracing/span_spec.rb b/spec/datadog/tracing/span_spec.rb index 0c6bca7f3f0..ef026564d05 100644 --- a/spec/datadog/tracing/span_spec.rb +++ b/spec/datadog/tracing/span_spec.rb @@ -245,6 +245,7 @@ meta: {}, metrics: {}, span_links: [], + span_events: [], error: 0 ) end diff --git a/spec/datadog/tracing/transport/serializable_trace_spec.rb b/spec/datadog/tracing/transport/serializable_trace_spec.rb index 3a016e43894..9c63687cf8c 100644 --- a/spec/datadog/tracing/transport/serializable_trace_spec.rb +++ b/spec/datadog/tracing/transport/serializable_trace_spec.rb @@ -128,6 +128,52 @@ ) end end + + context 'when given span events' do + subject(:unpacked_trace) { MessagePack.unpack(to_msgpack) } + + let(:spans) do + Array.new(3) do |_i| + Datadog::Tracing::Span.new( + 'dummy', + events: [ + Datadog::Tracing::SpanEvent.new( + 'event1', + time_unix_nano: 1862312345678901234, + ), + Datadog::Tracing::SpanEvent.new( + 'event2', + time_unix_nano: 23243675464378901235, + attributes: { 'event.attr' => 'some_val1', 'event.attr2' => 'some_val2' } + ) + ], + ) + end + end + + it 'serializes span events' do + expect( + unpacked_trace.map do |s| + s['meta']['events'] + end + ).to all( + eq( + [ + { + 'name' => 1, + 'time_unix_nano' => 0xffffffffffffffff, + 'attributes' => { 'link.name' => 'test_link' } + }, + { + 'name' => 1, + 'time_unix_nano' => 0xffffffffffffffff, + 'attributes' => { 'link.name' => 'test_link' } + }, + ] + ) + ) + end + end end describe '#to_json' do