Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions lib/datadog/core/configuration/components.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ class Components
class << self
include Datadog::Tracing::Component

def build_health_metrics(settings)
def build_health_metrics(settings, logger)
settings = settings.health_metrics
options = { enabled: settings.enabled }
options[:statsd] = settings.statsd unless settings.statsd.nil?

Core::Diagnostics::Health::Metrics.new(**options)
Core::Diagnostics::Health::Metrics.new(logger: logger, **options)
end

def build_logger(settings)
Expand All @@ -41,19 +41,20 @@ def build_logger(settings)
logger
end

def build_runtime_metrics(settings)
def build_runtime_metrics(settings, logger)
options = { enabled: settings.runtime_metrics.enabled }
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
options[:services] = [settings.service] unless settings.service.nil?

Core::Runtime::Metrics.new(**options)
Core::Runtime::Metrics.new(logger: logger, **options)
end

def build_runtime_metrics_worker(settings)
def build_runtime_metrics_worker(settings, logger)
# NOTE: Should we just ignore building the worker if its not enabled?
options = settings.runtime_metrics.opts.merge(
enabled: settings.runtime_metrics.enabled,
metrics: build_runtime_metrics(settings)
metrics: build_runtime_metrics(settings, logger),
logger: logger,
)

Core::Workers::RuntimeMetrics.new(options)
Expand Down Expand Up @@ -116,8 +117,8 @@ def initialize(settings)
)
@environment_logger_extra.merge!(profiler_logger_extra) if profiler_logger_extra

@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
@health_metrics = self.class.build_health_metrics(settings)
@runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger)
@health_metrics = self.class.build_health_metrics(settings, @logger)
@appsec = Datadog::AppSec::Component.build_appsec_component(settings, telemetry: telemetry)
@dynamic_instrumentation = Datadog::DI::Component.build(settings, agent_settings, @logger, telemetry: telemetry)
@environment_logger_extra[:dynamic_instrumentation_enabled] = !!@dynamic_instrumentation
Expand Down
17 changes: 9 additions & 8 deletions lib/datadog/core/metrics/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ class Client
extend Options
extend Helpers

attr_reader :statsd
attr_reader :statsd, :logger

def initialize(statsd: nil, enabled: true, **_)
def initialize(logger:, statsd: nil, enabled: true, **_)
@logger = logger
@statsd =
if supported?
statsd || default_statsd_client
Expand Down Expand Up @@ -98,7 +99,7 @@ def count(stat, value = nil, options = nil, &block)

statsd.count(stat, value, metric_options(options))
rescue StandardError => e
Datadog.logger.error(
logger.error(
"Failed to send count stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
)
Telemetry::Logger.report(e, description: 'Failed to send count stat')
Expand All @@ -112,7 +113,7 @@ def distribution(stat, value = nil, options = nil, &block)

statsd.distribution(stat, value, metric_options(options))
rescue StandardError => e
Datadog.logger.error(
logger.error(
"Failed to send distribution stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
)
Telemetry::Logger.report(e, description: 'Failed to send distribution stat')
Expand All @@ -125,7 +126,7 @@ def increment(stat, options = nil)

statsd.increment(stat, metric_options(options))
rescue StandardError => e
Datadog.logger.error(
logger.error(
"Failed to send increment stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
)
Telemetry::Logger.report(e, description: 'Failed to send increment stat')
Expand All @@ -139,7 +140,7 @@ def gauge(stat, value = nil, options = nil, &block)

statsd.gauge(stat, value, metric_options(options))
rescue StandardError => e
Datadog.logger.error(
logger.error(
"Failed to send gauge stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
)
Telemetry::Logger.report(e, description: 'Failed to send gauge stat')
Expand All @@ -159,7 +160,7 @@ def time(stat, options = nil)
end
rescue StandardError => e
# TODO: Likely to be redundant, since `distribution` handles its own errors.
Datadog.logger.error(
logger.error(
"Failed to send time stat. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
)
Telemetry::Logger.report(e, description: 'Failed to send time stat')
Expand Down Expand Up @@ -194,7 +195,7 @@ def dogstatsd_version

def ignored_statsd_warning
IGNORED_STATSD_ONLY_ONCE.run do
Datadog.logger.warn(
logger.warn(
'Ignoring user-supplied statsd instance as currently-installed version of dogstastd-ruby is incompatible. ' \
"To fix this, ensure that you have `gem 'dogstatsd-ruby', '~> 5.3'` on your Gemfile or gems.rb file."
)
Expand Down
9 changes: 5 additions & 4 deletions lib/datadog/core/remote/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ class Client
class TransportError < StandardError; end
class SyncError < StandardError; end

attr_reader :transport, :repository, :id, :dispatcher
attr_reader :transport, :repository, :id, :dispatcher, :logger

def initialize(transport, capabilities, repository: Configuration::Repository.new)
def initialize(transport, capabilities, logger:, repository: Configuration::Repository.new)
@transport = transport
@logger = logger

@repository = repository
@id = SecureRandom.uuid
Expand All @@ -40,7 +41,7 @@ def sync
def process_response(response)
# when response is completely empty, do nothing as in: leave as is
if response.empty?
Datadog.logger.debug { 'remote: empty response => NOOP' }
logger.debug { 'remote: empty response => NOOP' }

return
end
Expand Down Expand Up @@ -112,7 +113,7 @@ def apply_config(paths, targets, contents)
end

if changes.empty?
Datadog.logger.debug { 'remote: no changes' }
logger.debug { 'remote: no changes' }
else
dispatcher.dispatch(changes, repository)
end
Expand Down
4 changes: 2 additions & 2 deletions lib/datadog/core/remote/component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def initialize(settings, capabilities, agent_settings, logger:)

@barrier = Barrier.new(settings.remote.boot_timeout_seconds)

@client = Client.new(transport_v7, capabilities)
@client = Client.new(transport_v7, capabilities, logger: logger)
@healthy = false
logger.debug { "new remote configuration client: #{@client.id}" }

Expand Down Expand Up @@ -58,7 +58,7 @@ def initialize(settings, capabilities, agent_settings, logger:)
end

# client state is unknown, state might be corrupted
@client = Client.new(transport_v7, capabilities)
@client = Client.new(transport_v7, capabilities, logger: logger)
@healthy = false
logger.debug { "new remote configuration client: #{@client.id}" }

Expand Down
2 changes: 1 addition & 1 deletion lib/datadog/core/workers/runtime_metrics.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class RuntimeMetrics < Worker
:metrics

def initialize(options = {})
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new }
@metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger]) }

# Workers::Async::Thread settings
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
Expand Down
4 changes: 2 additions & 2 deletions sig/datadog/core/configuration/components.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ module Datadog

def self.build_logger: (untyped settings) -> untyped

def self.build_runtime_metrics: (untyped settings) -> untyped
def self.build_runtime_metrics: (untyped settings, Core::Logger logger) -> untyped

def self.build_runtime_metrics_worker: (untyped settings) -> untyped
def self.build_runtime_metrics_worker: (untyped settings, Core::Logger logger) -> untyped

def self.build_tracer: (untyped settings, untyped agent_settings) -> untyped

Expand Down
5 changes: 4 additions & 1 deletion sig/datadog/core/metrics/client.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ module Datadog
extend Options

extend Helpers

@logger: Core::Logger

attr_reader statsd: untyped
attr_reader logger: Core::Logger

def initialize: (?statsd: untyped?, ?enabled: bool, **untyped _) -> void
def initialize: (?statsd: untyped?, ?enabled: bool, logger: Core::Logger, **untyped _) -> void

def supported?: () -> untyped

Expand Down
5 changes: 4 additions & 1 deletion sig/datadog/core/remote/client.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ module Datadog
attr_reader dispatcher: Remote::Dispatcher

attr_reader capabilities: Capabilities

attr_reader logger: Core::Logger

def initialize: (Datadog::Core::Remote::Transport::Config::Transport transport, Capabilities capabilities, ?repository: Configuration::Repository) -> void
def initialize: (Datadog::Core::Remote::Transport::Config::Transport transport, Capabilities capabilities, ?repository: Configuration::Repository, logger: Core::Logger) -> void

def sync: () -> void

Expand All @@ -28,6 +30,7 @@ module Datadog
@native_platform: ::String
@ruby_engine_version: ::String
@tracer_version: ::String
@logger: Core::Logger

def payload: () -> ::Hash[Symbol, untyped]
def service_name: () -> ::String
Expand Down
8 changes: 4 additions & 4 deletions sig/datadog/core/remote/component.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ module Datadog
attr_reader client: Datadog::Core::Remote::Client
attr_reader worker: Datadog::Core::Remote::Worker
attr_reader healthy: bool
attr_reader logger: ::Logger
attr_reader logger: Core::Logger

@barrier: Barrier
@logger: ::Logger
@logger: Core::Logger

def initialize: (untyped settings, Datadog::Core::Remote::Client::Capabilities capabilities, Datadog::Core::Configuration::AgentSettingsResolver::AgentSettings agent_settings, logger: ::Logger) -> void
def initialize: (untyped settings, Datadog::Core::Remote::Client::Capabilities capabilities, Datadog::Core::Configuration::AgentSettingsResolver::AgentSettings agent_settings, logger: Core::Logger) -> void

def start: -> void

Expand All @@ -27,7 +27,7 @@ module Datadog
def self.build: (
untyped settings,
Datadog::Core::Configuration::AgentSettingsResolver::AgentSettings agent_settings,
logger: ::Logger,
logger: Core::Logger,
telemetry: Datadog::Core::Telemetry::Component
) -> Datadog::Core::Remote::Component?

Expand Down
18 changes: 9 additions & 9 deletions spec/datadog/core/configuration/components_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@
).and_return([profiler, environment_logger_extra])

expect(described_class).to receive(:build_runtime_metrics_worker)
.with(settings)
.with(settings, logger)
.and_return(runtime_metrics)

expect(described_class).to receive(:build_health_metrics)
.with(settings)
.with(settings, logger)
.and_return(health_metrics)
end

Expand Down Expand Up @@ -155,7 +155,7 @@
end

describe '::build_health_metrics' do
subject(:build_health_metrics) { described_class.build_health_metrics(settings) }
subject(:build_health_metrics) { described_class.build_health_metrics(settings, logger) }

context 'given settings' do
shared_examples_for 'new health metrics' do
Expand All @@ -165,7 +165,7 @@

before do
expect(Datadog::Core::Diagnostics::Health::Metrics).to receive(:new)
.with(default_options.merge(options))
.with(default_options.merge(options).merge(logger: logger))
.and_return(health_metrics)
end

Expand Down Expand Up @@ -386,7 +386,7 @@
end

describe '::build_runtime_metrics' do
subject(:build_runtime_metrics) { described_class.build_runtime_metrics(settings) }
subject(:build_runtime_metrics) { described_class.build_runtime_metrics(settings, logger) }

context 'given settings' do
shared_examples_for 'new runtime metrics' do
Expand All @@ -396,7 +396,7 @@

before do
expect(Datadog::Core::Runtime::Metrics).to receive(:new)
.with(default_options.merge(options))
.with(default_options.merge(options).merge(logger: logger))
.and_return(runtime_metrics)
end

Expand Down Expand Up @@ -452,7 +452,7 @@
end

describe '::build_runtime_metrics_worker' do
subject(:build_runtime_metrics_worker) { described_class.build_runtime_metrics_worker(settings) }
subject(:build_runtime_metrics_worker) { described_class.build_runtime_metrics_worker(settings, logger) }

context 'given settings' do
shared_examples_for 'new runtime metrics worker' do
Expand All @@ -468,11 +468,11 @@

before do
allow(described_class).to receive(:build_runtime_metrics)
.with(settings)
.with(settings, logger)
.and_return(runtime_metrics)

expect(Datadog::Core::Workers::RuntimeMetrics).to receive(:new)
.with(default_options.merge(options))
.with(default_options.merge(options).merge(logger: logger))
.and_return(runtime_metrics_worker)
end

Expand Down
17 changes: 9 additions & 8 deletions spec/datadog/core/metrics/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@
RSpec.describe Datadog::Core::Metrics::Client do
include_context 'metrics'

subject(:metrics) { described_class.new(**options) }
after { metrics.close }

let(:logger) { Logger.new($stderr) }
let(:options) { { statsd: statsd } }

subject(:metrics) { described_class.new(logger: logger, **options) }
after { metrics.close }

it { is_expected.to have_attributes(statsd: statsd) }

shared_examples_for 'logs an error without raising' do |action|
it do
expect(Datadog.logger).to receive(:error).with(
expect(logger).to receive(:error).with(
/Failed to send #{action} stat/
)
expect(Datadog::Core::Telemetry::Logger).to receive(:report).with(
Expand Down Expand Up @@ -75,15 +76,15 @@

before do
described_class.const_get('IGNORED_STATSD_ONLY_ONCE').send(:reset_ran_once_state_for_tests)
allow(Datadog.logger).to receive(:warn)
allow(logger).to receive(:warn)
end

it 'does not use the provided instance' do
expect(metrics.statsd).to be nil
end

it 'logs a warning' do
expect(Datadog.logger).to receive(:warn).with(/Ignoring .* statsd instance/)
expect(logger).to receive(:warn).with(/Ignoring .* statsd instance/)

metrics
end
Expand Down Expand Up @@ -713,7 +714,7 @@
# Expect the given block to raise its errors through

it do
expect(Datadog.logger).not_to receive(:error)
expect(logger).not_to receive(:error)
expect { time }.to raise_error(error)
end
end
Expand Down Expand Up @@ -757,7 +758,7 @@
context 'which raises an error' do
before do
expect(statsd).to receive(:distribution).and_raise(StandardError)
expect(Datadog.logger).to receive(:error)
expect(logger).to receive(:error)
end

it { expect { time }.to_not raise_error }
Expand Down
2 changes: 1 addition & 1 deletion spec/datadog/core/metrics/logging_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def have_received_json_metric(expected_hash)
end

context 'when used in Datadog::Metrics' do
subject(:metrics) { Datadog::Core::Metrics::Client.new(statsd: adapter) }
subject(:metrics) { Datadog::Core::Metrics::Client.new(statsd: adapter, logger: logger) }

describe 'and #count is sent' do
subject(:count) { metrics.count(stat, value, options) }
Expand Down
4 changes: 3 additions & 1 deletion spec/datadog/core/remote/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,9 @@
capabilities
end

subject(:client) { described_class.new(transport, capabilities, repository: repository) }
let(:logger) { logger_allowing_debug }

subject(:client) { described_class.new(transport, capabilities, repository: repository, logger: logger) }

describe '#sync' do
include_context 'HTTP connection stub'
Expand Down
Loading
Loading