Skip to content

Commit 2a4e711

Browse files
authored
DEBUG-3700 Inject telemetry into metrics client (#4641)
1 parent d01791a commit 2a4e711

File tree

11 files changed

+43
-36
lines changed

11 files changed

+43
-36
lines changed

lib/datadog/core/configuration/components.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ class Components
2727
class << self
2828
include Datadog::Tracing::Component
2929

30-
def build_health_metrics(settings, logger)
30+
def build_health_metrics(settings, logger, telemetry)
3131
settings = settings.health_metrics
3232
options = { enabled: settings.enabled }
3333
options[:statsd] = settings.statsd unless settings.statsd.nil?
3434

35-
Core::Diagnostics::Health::Metrics.new(logger: logger, **options)
35+
Core::Diagnostics::Health::Metrics.new(telemetry: telemetry, logger: logger, **options)
3636
end
3737

3838
def build_logger(settings)
@@ -42,24 +42,24 @@ def build_logger(settings)
4242
logger
4343
end
4444

45-
def build_runtime_metrics(settings, logger)
45+
def build_runtime_metrics(settings, logger, telemetry)
4646
options = { enabled: settings.runtime_metrics.enabled }
4747
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
4848
options[:services] = [settings.service] unless settings.service.nil?
4949
options[:experimental_runtime_id_enabled] = settings.runtime_metrics.experimental_runtime_id_enabled
5050

51-
Core::Runtime::Metrics.new(logger: logger, **options)
51+
Core::Runtime::Metrics.new(logger: logger, telemetry: telemetry, **options)
5252
end
5353

54-
def build_runtime_metrics_worker(settings, logger)
54+
def build_runtime_metrics_worker(settings, logger, telemetry)
5555
# NOTE: Should we just ignore building the worker if its not enabled?
5656
options = settings.runtime_metrics.opts.merge(
5757
enabled: settings.runtime_metrics.enabled,
58-
metrics: build_runtime_metrics(settings, logger),
58+
metrics: build_runtime_metrics(settings, logger, telemetry),
5959
logger: logger,
6060
)
6161

62-
Core::Workers::RuntimeMetrics.new(options)
62+
Core::Workers::RuntimeMetrics.new(telemetry: telemetry, **options)
6363
end
6464

6565
def build_telemetry(settings, agent_settings, logger)
@@ -119,8 +119,8 @@ def initialize(settings)
119119
)
120120
@environment_logger_extra.merge!(profiler_logger_extra) if profiler_logger_extra
121121

122-
@runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger)
123-
@health_metrics = self.class.build_health_metrics(settings, @logger)
122+
@runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger, telemetry)
123+
@health_metrics = self.class.build_health_metrics(settings, @logger, telemetry)
124124
@appsec = Datadog::AppSec::Component.build_appsec_component(settings, telemetry: telemetry)
125125
@dynamic_instrumentation = Datadog::DI::Component.build(settings, agent_settings, @logger, telemetry: telemetry)
126126
@environment_logger_extra[:dynamic_instrumentation_enabled] = !!@dynamic_instrumentation

lib/datadog/core/metrics/client.rb

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ class Client
2121
extend Options
2222
extend Helpers
2323

24-
attr_reader :statsd, :logger
24+
attr_reader :statsd, :logger, :telemetry
2525

26-
def initialize(logger: Datadog.logger, statsd: nil, enabled: true, **_)
26+
def initialize(telemetry:, logger: Datadog.logger, statsd: nil, enabled: true, **_)
27+
@telemetry = telemetry
2728
@logger = logger
2829
@statsd =
2930
if supported?
@@ -102,7 +103,7 @@ def count(stat, value = nil, options = nil, &block)
102103
logger.error(
103104
"Failed to send count stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
104105
)
105-
Telemetry::Logger.report(e, description: 'Failed to send count stat')
106+
telemetry.report(e, description: 'Failed to send count stat')
106107
end
107108

108109
def distribution(stat, value = nil, options = nil, &block)
@@ -116,7 +117,7 @@ def distribution(stat, value = nil, options = nil, &block)
116117
logger.error(
117118
"Failed to send distribution stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
118119
)
119-
Telemetry::Logger.report(e, description: 'Failed to send distribution stat')
120+
telemetry.report(e, description: 'Failed to send distribution stat')
120121
end
121122

122123
def increment(stat, options = nil)
@@ -129,7 +130,7 @@ def increment(stat, options = nil)
129130
logger.error(
130131
"Failed to send increment stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
131132
)
132-
Telemetry::Logger.report(e, description: 'Failed to send increment stat')
133+
telemetry.report(e, description: 'Failed to send increment stat')
133134
end
134135

135136
def gauge(stat, value = nil, options = nil, &block)
@@ -143,7 +144,7 @@ def gauge(stat, value = nil, options = nil, &block)
143144
logger.error(
144145
"Failed to send gauge stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
145146
)
146-
Telemetry::Logger.report(e, description: 'Failed to send gauge stat')
147+
telemetry.report(e, description: 'Failed to send gauge stat')
147148
end
148149

149150
def time(stat, options = nil)
@@ -163,7 +164,7 @@ def time(stat, options = nil)
163164
logger.error(
164165
"Failed to send time stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
165166
)
166-
Telemetry::Logger.report(e, description: 'Failed to send time stat')
167+
telemetry.report(e, description: 'Failed to send time stat')
167168
end
168169
end
169170

lib/datadog/core/runtime/metrics.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module Core
1414
module Runtime
1515
# For generating runtime metrics
1616
class Metrics < Core::Metrics::Client
17-
def initialize(**options)
17+
def initialize(telemetry:, **options)
1818
super
1919

2020
# Initialize service list

lib/datadog/core/workers/runtime_metrics.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ class RuntimeMetrics < Worker
2020
attr_reader \
2121
:metrics
2222

23-
def initialize(options = {})
24-
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger]) }
23+
def initialize(telemetry:, **options)
24+
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger], telemetry: telemetry) }
2525

2626
# Workers::Async::Thread settings
2727
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)

sig/datadog/core/metrics/client.rbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module Datadog
1313
attr_reader statsd: untyped
1414
attr_reader logger: Core::Logger
1515

16-
def initialize: (?statsd: untyped?, ?enabled: bool, logger: Core::Logger, **untyped _) -> void
16+
def initialize: (telemetry: Core::Telemetry::Component, ?statsd: untyped?, ?enabled: bool, logger: Core::Logger, **untyped _) -> void
1717

1818
def supported?: () -> untyped
1919

spec/datadog/core/configuration/components_spec.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@
8282
).and_return([profiler, environment_logger_extra])
8383

8484
expect(described_class).to receive(:build_runtime_metrics_worker)
85-
.with(settings, logger)
85+
.with(settings, logger, telemetry)
8686
.and_return(runtime_metrics)
8787

8888
expect(described_class).to receive(:build_health_metrics)
89-
.with(settings, logger)
89+
.with(settings, logger, telemetry)
9090
.and_return(health_metrics)
9191
end
9292

@@ -155,7 +155,7 @@
155155
end
156156

157157
describe '::build_health_metrics' do
158-
subject(:build_health_metrics) { described_class.build_health_metrics(settings, logger) }
158+
subject(:build_health_metrics) { described_class.build_health_metrics(settings, logger, telemetry) }
159159

160160
context 'given settings' do
161161
shared_examples_for 'new health metrics' do
@@ -165,7 +165,7 @@
165165

166166
before do
167167
expect(Datadog::Core::Diagnostics::Health::Metrics).to receive(:new)
168-
.with(default_options.merge(options).merge(logger: logger))
168+
.with(default_options.merge(options).merge(logger: logger, telemetry: telemetry))
169169
.and_return(health_metrics)
170170
end
171171

@@ -291,7 +291,7 @@
291291
end
292292

293293
describe '::build_runtime_metrics' do
294-
subject(:build_runtime_metrics) { described_class.build_runtime_metrics(settings, logger) }
294+
subject(:build_runtime_metrics) { described_class.build_runtime_metrics(settings, logger, telemetry) }
295295

296296
context 'given settings' do
297297
shared_examples_for 'new runtime metrics' do
@@ -305,7 +305,7 @@
305305

306306
before do
307307
expect(Datadog::Core::Runtime::Metrics).to receive(:new)
308-
.with(default_options.merge(options).merge(logger: logger))
308+
.with(**default_options.merge(options).merge(logger: logger, telemetry: telemetry))
309309
.and_return(runtime_metrics)
310310
end
311311

@@ -375,7 +375,7 @@
375375
end
376376

377377
describe '::build_runtime_metrics_worker' do
378-
subject(:build_runtime_metrics_worker) { described_class.build_runtime_metrics_worker(settings, logger) }
378+
subject(:build_runtime_metrics_worker) { described_class.build_runtime_metrics_worker(settings, logger, telemetry) }
379379

380380
context 'given settings' do
381381
shared_examples_for 'new runtime metrics worker' do
@@ -391,11 +391,11 @@
391391

392392
before do
393393
allow(described_class).to receive(:build_runtime_metrics)
394-
.with(settings, logger)
394+
.with(settings, logger, telemetry)
395395
.and_return(runtime_metrics)
396396

397397
expect(Datadog::Core::Workers::RuntimeMetrics).to receive(:new)
398-
.with(default_options.merge(options).merge(logger: logger))
398+
.with(**default_options.merge(options).merge(logger: logger, telemetry: telemetry))
399399
.and_return(runtime_metrics_worker)
400400
end
401401

spec/datadog/core/metrics/client_spec.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
include_context 'metrics'
88

99
let(:logger) { Logger.new($stderr) }
10+
let(:telemetry) { double(Datadog::Core::Telemetry::Component) }
1011
let(:options) { { statsd: statsd } }
1112

12-
subject(:metrics) { described_class.new(logger: logger, **options) }
13+
subject(:metrics) { described_class.new(telemetry: telemetry, logger: logger, **options) }
1314
after { metrics.close }
1415

1516
it { is_expected.to have_attributes(statsd: statsd) }
@@ -19,7 +20,7 @@
1920
expect(logger).to receive(:error).with(
2021
/Failed to send #{action} stat/
2122
)
22-
expect(Datadog::Core::Telemetry::Logger).to receive(:report).with(
23+
expect(telemetry).to receive(:report).with(
2324
a_kind_of(StandardError),
2425
description: "Failed to send #{action} stat"
2526
)
@@ -758,6 +759,7 @@
758759
context 'which raises an error' do
759760
before do
760761
expect(statsd).to receive(:distribution).and_raise(StandardError)
762+
expect(telemetry).to receive(:report)
761763
expect(logger).to receive(:error)
762764
end
763765

spec/datadog/core/metrics/logging_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
subject(:adapter) { described_class.new(logger) }
1111

1212
let(:logger) { instance_double(Logger) }
13+
let(:telemetry) { double(Datadog::Core::Telemetry::Component) }
1314

1415
def have_received_json_metric(expected_hash)
1516
have_received(:info) do |msg|
@@ -121,7 +122,7 @@ def have_received_json_metric(expected_hash)
121122
end
122123

123124
context 'when used in Datadog::Metrics' do
124-
subject(:metrics) { Datadog::Core::Metrics::Client.new(statsd: adapter, logger: logger) }
125+
subject(:metrics) { Datadog::Core::Metrics::Client.new(statsd: adapter, logger: logger, telemetry: telemetry) }
125126

126127
describe 'and #count is sent' do
127128
subject(:count) { metrics.count(stat, value, options) }

spec/datadog/core/runtime/metrics_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
RSpec.describe Datadog::Core::Runtime::Metrics do
77
let(:logger) { logger_allowing_debug }
8+
let(:telemetry) { double(Datadog::Core::Telemetry::Component) }
89
let(:options) { {} }
9-
subject(:runtime_metrics) { described_class.new(logger: logger, **options) }
10+
subject(:runtime_metrics) { described_class.new(logger: logger, telemetry: telemetry, **options) }
1011

1112
describe '::new' do
1213
context 'given :services' do

spec/datadog/core/workers/runtime_metrics_spec.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
require 'datadog/core/workers/runtime_metrics'
55

66
RSpec.describe Datadog::Core::Workers::RuntimeMetrics do
7-
subject(:worker) { described_class.new(options) }
7+
subject(:worker) { described_class.new(telemetry: telemetry, **options) }
88

99
let(:metrics) { instance_double(Datadog::Core::Runtime::Metrics, close: nil) }
1010
let(:options) { { metrics: metrics, enabled: true } }
1111

1212
let(:logger) { logger_allowing_debug }
13+
let(:telemetry) { double(Datadog::Core::Telemetry::Component) }
1314

1415
before { allow(metrics).to receive(:flush) }
1516

@@ -19,7 +20,7 @@
1920
it { expect(worker).to be_a_kind_of(Datadog::Core::Workers::Polling) }
2021

2122
context 'by default' do
22-
subject(:worker) { described_class.new(logger: logger) }
23+
subject(:worker) { described_class.new(logger: logger, telemetry: telemetry) }
2324

2425
it { expect(worker.enabled?).to be false }
2526
it { expect(worker.loop_base_interval).to eq 10 }

0 commit comments

Comments
 (0)