-
Notifications
You must be signed in to change notification settings - Fork 386
/
Copy pathemitter.rb
45 lines (39 loc) · 1.58 KB
/
emitter.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# frozen_string_literal: true
require_relative 'request'
require_relative 'http/transport'
require_relative '../transport/response'
require_relative '../utils/sequence'
require_relative '../utils/forking'
module Datadog
module Core
module Telemetry
# Class that emits telemetry events
class Emitter
attr_reader :http_transport
extend Core::Utils::Forking
# @param http_transport [Datadog::Core::Telemetry::Http::Transport] Transport object that can be used to send
# telemetry requests via the agent
def initialize(http_transport:)
@http_transport = http_transport
end
# Retrieves and emits a TelemetryRequest object based on the request type specified
def request(event)
seq_id = self.class.sequence.next
payload = Request.build_payload(event, seq_id)
res = @http_transport.request(request_type: event.type, payload: payload.to_json)
Datadog.logger.debug { "Telemetry sent for event `#{event.type}` (response: #{res})" }
res
rescue => e
Datadog.logger.debug("Unable to send telemetry request for event `#{event.type rescue 'unknown'}`: #{e}")
Core::Transport::InternalErrorResponse.new(e)
end
# Initializes a Sequence object to track seq_id if not already initialized; else returns stored
# Sequence object
def self.sequence
after_fork! { @sequence = Datadog::Core::Utils::Sequence.new(1) }
@sequence ||= Datadog::Core::Utils::Sequence.new(1)
end
end
end
end
end