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(http_transport: Datadog::Core::Telemetry::Http::Transport.new) ⇒ Emitter

Returns a new instance of Emitter.

Parameters:



18
19
20
# File 'lib/datadog/core/telemetry/emitter.rb', line 18

def initialize(http_transport: Datadog::Core::Telemetry::Http::Transport.new)
  @http_transport = http_transport
end

Instance Attribute Details

#http_transportObject (readonly)

Returns the value of attribute http_transport.



11
12
13
# File 'lib/datadog/core/telemetry/emitter.rb', line 11

def http_transport
  @http_transport
end

Class Method Details

.sequenceObject

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



39
40
41
42
# File 'lib/datadog/core/telemetry/emitter.rb', line 39

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

Instance Method Details

#request(request_type) ⇒ Object

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

Parameters:

  • request_type (String)

    the type of telemetry request to collect data for



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/datadog/core/telemetry/emitter.rb', line 24

def request(request_type)
  begin
    request = Datadog::Core::Telemetry::Event.new.telemetry_request(
      request_type: request_type,
      seq_id: self.class.sequence.next
    ).to_h
    @http_transport.request(request_type: request_type.to_s, payload: request.to_json)
  rescue StandardError => e
    Datadog.logger.debug("Unable to send telemetry request for event `#{request_type}`: #{e}")
    Telemetry::Http::InternalErrorResponse.new(e)
  end
end