Skip to content

Commit b9e1364

Browse files
authored
Merge pull request #4599 from nvh0412/chore/fix-empty-hash-karafka
[karafka] Fix intermittent loading order error with Karafka constant
2 parents 19100f6 + 75a6d8a commit b9e1364

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

lib/datadog/tracing/contrib/karafka/monitor.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module Monitor
1515
worker.processed
1616
].freeze
1717

18-
def instrument(event_id, payload = EMPTY_HASH, &block)
18+
def instrument(event_id, payload = {}, &block)
1919
return super unless TRACEABLE_EVENTS.include?(event_id)
2020

2121
Datadog::Tracing.trace(Ext::SPAN_WORKER_PROCESS) do |span|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# frozen_string_literal: true
2+
3+
require 'datadog/tracing/contrib/support/spec_helper'
4+
5+
require 'karafka'
6+
require 'datadog'
7+
8+
RSpec.describe 'Karafka monitor' do
9+
before do
10+
Datadog.configure do |c|
11+
c.tracing.instrument :karafka, { distributed_tracing: true }
12+
end
13+
end
14+
15+
around do |example|
16+
# Reset before and after each example; don't allow global state to linger.
17+
Datadog.registry[:karafka].reset_configuration!
18+
example.run
19+
Datadog.registry[:karafka].reset_configuration!
20+
end
21+
22+
describe '.instrument' do
23+
context 'when the event is not traceable' do
24+
it 'does not create a trace' do
25+
Karafka.monitor.instrument('worker.completed')
26+
27+
# NOTE: This helper doesn't workt with `change` matcher well.
28+
expect(traces).to have(0).items
29+
expect(spans).to have(0).items
30+
end
31+
end
32+
33+
context 'when the event is traceable' do
34+
let(:job) do
35+
instance_double(Karafka::Processing::Jobs::Consume, class: Class.new, executor: executor, messages: messages)
36+
end
37+
let(:executor) { instance_double(Karafka::Processing::Executor, topic: topic, partition: 1) }
38+
let(:topic) { instance_double(Karafka::Routing::Topic, consumer: 'Consumer', name: 'topic_name') }
39+
let(:messages) { [instance_double(Karafka::Messages::Messages, metadata: metadata)] }
40+
let(:metadata) { instance_double(Karafka::Messages::Metadata, offset: 42) }
41+
42+
it 'traces a consumer job' do
43+
Karafka.monitor.instrument('worker.processed', { job: job })
44+
45+
expect(traces).to have(1).item
46+
expect(spans).to have(1).item
47+
48+
expect(spans[0].resource).to eq('Consumer#consume')
49+
expect(spans[0].tags).to include(
50+
Datadog::Tracing::Contrib::Karafka::Ext::TAG_MESSAGE_COUNT => 1,
51+
Datadog::Tracing::Contrib::Karafka::Ext::TAG_PARTITION => 1,
52+
Datadog::Tracing::Contrib::Karafka::Ext::TAG_OFFSET => 42,
53+
Datadog::Tracing::Contrib::Karafka::Ext::TAG_CONSUMER => 'Consumer',
54+
'messaging.destination' => 'topic_name',
55+
'messaging.system' => Datadog::Tracing::Contrib::Karafka::Ext::TAG_SYSTEM
56+
)
57+
end
58+
end
59+
end
60+
end

0 commit comments

Comments
 (0)