Skip to content

Commit d7c708e

Browse files
authored
Merge pull request #411 from zendesk/dasch/datadog-3.0
Make ruby-kafka compatible with dogstatsd-ruby v3
2 parents 9c906f4 + ce688e0 commit d7c708e

File tree

5 files changed

+81
-17
lines changed

5 files changed

+81
-17
lines changed

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ GEM
2121
docker-api (1.32.1)
2222
excon (>= 0.38.0)
2323
json
24-
dogstatsd-ruby (2.1.0)
24+
dogstatsd-ruby (3.0.0)
2525
dotenv (2.1.0)
2626
excon (0.54.0)
2727
ffi (1.9.18)
@@ -87,7 +87,7 @@ DEPENDENCIES
8787
bundler (>= 1.9.5)
8888
colored
8989
docker-api
90-
dogstatsd-ruby (>= 2.0.0)
90+
dogstatsd-ruby (>= 3.0.0)
9191
dotenv
9292
gssapi (>= 1.2.0)
9393
pry

lib/kafka/datadog.rb

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,53 @@ module Kafka
2727
module Datadog
2828
STATSD_NAMESPACE = "ruby_kafka"
2929

30-
def self.statsd
31-
@statsd ||= ::Datadog::Statsd.new(::Datadog::Statsd::DEFAULT_HOST, ::Datadog::Statsd::DEFAULT_PORT, namespace: STATSD_NAMESPACE)
32-
end
30+
class << self
31+
def statsd
32+
@statsd ||= ::Datadog::Statsd.new(host, port, namespace: namespace, tags: tags)
33+
end
3334

34-
def self.host=(host)
35-
statsd.host = host
36-
end
35+
def host
36+
@host ||= ::Datadog::Statsd::DEFAULT_HOST
37+
end
3738

38-
def self.port=(port)
39-
statsd.port = port
40-
end
39+
def host=(host)
40+
@host = host
41+
clear
42+
end
4143

42-
def self.namespace=(namespace)
43-
statsd.namespace = namespace
44-
end
44+
def port
45+
@port ||= ::Datadog::Statsd::DEFAULT_PORT
46+
end
4547

46-
def self.tags=(tags)
47-
statsd.tags = tags
48+
def port=(port)
49+
@port = port
50+
clear
51+
end
52+
53+
def namespace
54+
@namespace ||= STATSD_NAMESPACE
55+
end
56+
57+
def namespace=(namespace)
58+
@namespace = namespace
59+
clear
60+
end
61+
62+
def tags
63+
@tags ||= []
64+
end
65+
66+
def tags=(tags)
67+
@tags = tags
68+
clear
69+
end
70+
71+
private
72+
73+
def clear
74+
@statsd && @statsd.close
75+
@statsd = nil
76+
end
4877
end
4978

5079
class StatsdSubscriber < ActiveSupport::Subscriber

ruby-kafka.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
3737
spec.add_development_dependency "snappy"
3838
spec.add_development_dependency "colored"
3939
spec.add_development_dependency "rspec_junit_formatter", "0.2.2"
40-
spec.add_development_dependency "dogstatsd-ruby", ">= 2.0.0"
40+
spec.add_development_dependency "dogstatsd-ruby", ">= 3.0.0"
4141
spec.add_development_dependency "statsd-ruby"
4242
spec.add_development_dependency "ruby-prof"
4343
spec.add_development_dependency "timecop"

spec/datadog_spec.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
require "kafka/datadog"
2+
require "fake_datadog_agent"
3+
4+
describe Kafka::Datadog do
5+
let(:agent) { FakeDatadogAgent.new }
6+
7+
before do
8+
agent.start
9+
end
10+
11+
after do
12+
agent.stop
13+
end
14+
15+
it "emits metrics to the Datadog agent" do
16+
Kafka::Datadog.host = agent.host
17+
Kafka::Datadog.port = agent.port
18+
19+
client = Kafka::Datadog.statsd
20+
21+
client.increment("greetings")
22+
23+
agent.wait_for_metrics
24+
25+
expect(agent.metrics.count).to eq 1
26+
27+
metric = agent.metrics.first
28+
29+
expect(metric).to eq "ruby_kafka.greetings"
30+
end
31+
end

spec/fake_datadog_agent.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ def start
1818
@thread.abort_on_exception = true
1919
end
2020

21+
def stop
22+
@thread.kill
23+
end
24+
2125
def wait_for_metrics(count: 1)
2226
deadline = Time.now + 10
2327

0 commit comments

Comments
 (0)