Class: Datadog::Core::Telemetry::Emitter

Inherits:
Object
  • Object
show all
Extended by:
Utils::Forking
Defined in:
lib/datadog/core/telemetry/emitter.rb

Overview

Class that emits telemetry events

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Utils::Forking

after_fork!, extended, fork_pid, forked?, included, update_fork_pid!

Constructor Details

#initialize(transport, logger: Datadog.logger, debug: false) ⇒ Emitter

Returns a new instance of Emitter.

Parameters:

[View source]

19
20
21
22
23
# File 'lib/datadog/core/telemetry/emitter.rb', line 19

def initialize(transport, logger: Datadog.logger, debug: false)
  @transport = transport
  @logger = logger
  @debug = !!debug
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.


13
14
15
# File 'lib/datadog/core/telemetry/emitter.rb', line 13

def logger
  @logger
end

#transportObject (readonly)

Returns the value of attribute transport.


13
14
15
# File 'lib/datadog/core/telemetry/emitter.rb', line 13

def transport
  @transport
end

Class Method Details

.sequenceObject

Initializes a Sequence object to track seq_id if not already initialized; else returns stored Sequence object

[View source]

49
50
51
52
# File 'lib/datadog/core/telemetry/emitter.rb', line 49

def self.sequence
  after_fork! { @sequence = Datadog::Core::Utils::Sequence.new(1) }
  @sequence ||= Datadog::Core::Utils::Sequence.new(1)
end

Instance Method Details

#debug?Boolean

Returns:

  • (Boolean)
[View source]

25
26
27
# File 'lib/datadog/core/telemetry/emitter.rb', line 25

def debug?
  @debug
end

#request(event) ⇒ Object

Retrieves and emits a TelemetryRequest object based on the request type specified

[View source]

30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/datadog/core/telemetry/emitter.rb', line 30

def request(event)
  seq_id = self.class.sequence.next
  payload = Request.build_payload(event, seq_id, debug: debug?)
  res = @transport.send_telemetry(request_type: event.type, payload: payload)
  logger.debug { "Telemetry sent for event `#{event.type}` (response code: #{res.code})" }
  res
rescue => e
  logger.debug {
    "Unable to send telemetry request for event `#{begin
      event.type
    rescue
      "unknown"
    end}`: #{e}"
  }
  Core::Transport::InternalErrorResponse.new(e)
end