Skip to content

Commit d01791a

Browse files
authored
DEBUG-3573 Implement debug flag for telemetry (#4648)
1 parent 3eb5760 commit d01791a

File tree

8 files changed

+59
-8
lines changed

8 files changed

+59
-8
lines changed

lib/datadog/core/configuration/settings.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,16 @@ def initialize(*_)
888888
o.env Core::Telemetry::Ext::ENV_LOG_COLLECTION
889889
o.default true
890890
end
891+
892+
# For internal use only.
893+
# Enables telemetry debugging through the Datadog platform.
894+
#
895+
# @default `false`.
896+
# @return [Boolean]
897+
option :debug do |o|
898+
o.type :bool
899+
o.default false
900+
end
891901
end
892902

893903
# Remote configuration

lib/datadog/core/telemetry/component.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ def initialize( # rubocop: disable Metrics/MethodLength
8484
enabled: @enabled,
8585
heartbeat_interval_seconds: settings.telemetry.heartbeat_interval_seconds,
8686
metrics_aggregation_interval_seconds: settings.telemetry.metrics_aggregation_interval_seconds,
87-
emitter: Emitter.new(@transport, logger: @logger),
87+
emitter: Emitter.new(
88+
@transport,
89+
logger: @logger,
90+
debug: settings.telemetry.debug,
91+
),
8892
metrics_manager: @metrics_manager,
8993
dependency_collection: settings.telemetry.dependency_collection,
9094
logger: logger,

lib/datadog/core/telemetry/emitter.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,20 @@ class Emitter
1616

1717
# @param transport [Datadog::Core::Telemetry::Transport::Telemetry::Transport]
1818
# Transport object that can be used to send telemetry requests
19-
def initialize(transport, logger: Datadog.logger)
19+
def initialize(transport, logger: Datadog.logger, debug: false)
2020
@transport = transport
2121
@logger = logger
22+
@debug = !!debug
23+
end
24+
25+
def debug?
26+
@debug
2227
end
2328

2429
# Retrieves and emits a TelemetryRequest object based on the request type specified
2530
def request(event)
2631
seq_id = self.class.sequence.next
27-
payload = Request.build_payload(event, seq_id)
32+
payload = Request.build_payload(event, seq_id, debug: debug?)
2833
res = @transport.send_telemetry(request_type: event.type, payload: payload)
2934
logger.debug { "Telemetry sent for event `#{event.type}` (response code: #{res.code})" }
3035
res

lib/datadog/core/telemetry/request.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ module Request
1111
class << self
1212
using Core::Utils::Hash::Refinement
1313

14-
def build_payload(event, seq_id, api_version: 'v2')
14+
def build_payload(event, seq_id, api_version: 'v2', debug: false)
1515
hash = {
1616
api_version: api_version,
1717
application: application,
18-
debug: false,
18+
debug: debug,
1919
host: host,
2020
payload: event.payload,
2121
request_type: event.type,

sig/datadog/core/telemetry/emitter.rbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ module Datadog
66

77
attr_reader transport: untyped
88
attr_reader logger: Core::Logger
9+
10+
def debug?: -> bool
911

1012
extend Core::Utils::Forking
11-
def initialize: (untyped transport, ?logger: Core::Logger) -> void
13+
def initialize: (untyped transport, ?logger: Core::Logger, ?debug: bool) -> void
1214
def request: (Datadog::Core::Telemetry::Event::Base event) -> (Datadog::Core::Transport::HTTP::Adapters::Net::Response | Datadog::Core::Transport::InternalErrorResponse)
1315
def self.sequence: () -> Datadog::Core::Utils::Sequence
1416
end

sig/datadog/core/telemetry/request.rbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module Datadog
22
module Core
33
module Telemetry
44
module Request
5-
def self.build_payload: (Event::Base event, int seq_id) -> ::Hash[Symbol, untyped]
5+
def self.build_payload: (Event::Base event, int seq_id, ?debug: bool) -> ::Hash[Symbol, untyped]
66

77
private
88

spec/datadog/core/telemetry/emitter_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
let(:payload) { { foo: 'bar' } }
8383

8484
it 'creates a telemetry event with data' do
85-
allow(Datadog::Core::Telemetry::Request).to receive(:build_payload).with(event, 1).and_return(payload)
85+
allow(Datadog::Core::Telemetry::Request).to receive(:build_payload).with(event, 1, debug: false).and_return(payload)
8686

8787
request
8888

spec/datadog/core/telemetry/integration/telemetry_spec.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,36 @@
210210
)
211211
end
212212
end
213+
214+
context 'when telemetry debugging is enabled in settings' do
215+
mark_telemetry_started
216+
217+
before do
218+
settings.telemetry.debug = true
219+
end
220+
221+
it 'sets debug to true in payload' do
222+
component.worker.send(:heartbeat!)
223+
component.worker.flush
224+
expect(sent_payloads.length).to eq 1
225+
226+
payload = sent_payloads[0]
227+
expect(payload.fetch(:payload)).to match(
228+
'api_version' => 'v2',
229+
'application' => expected_application_hash,
230+
'debug' => true,
231+
'host' => expected_host_hash,
232+
'payload' => {},
233+
'request_type' => 'app-heartbeat',
234+
'runtime_id' => String,
235+
'seq_id' => Integer,
236+
'tracer_time' => Integer,
237+
)
238+
expect(payload.fetch(:headers)).to include(
239+
expected_headers.merge('dd-telemetry-request-type' => %w[app-heartbeat])
240+
)
241+
end
242+
end
213243
end
214244

215245
let(:handler_proc) do

0 commit comments

Comments
 (0)