class Datadog::Statsd::Telemetry

Constants

MAX_TELEMETRY_MESSAGE_SIZE_WT_TAGS

Rough estimation of maximum telemetry message size without tags

Attributes

bytes_dropped[R]
bytes_dropped_queue[R]
bytes_dropped_writer[R]
bytes_sent[R]
events[R]
metrics[R]
packets_dropped[R]
packets_dropped_queue[R]
packets_dropped_writer[R]
packets_sent[R]
serialized_tags[R]
service_checks[R]

Public Class Methods

new(flush_interval, global_tags: [], transport_type: :udp) click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 22
def initialize(flush_interval, global_tags: [], transport_type: :udp)
  @flush_interval = flush_interval
  @global_tags = global_tags
  @transport_type = transport_type
  reset

  # TODO: Karim: I don't know why but telemetry tags are serialized
  # before global tags so by refactoring this, I am keeping the same behavior
  @serialized_tags = Serialization::TagSerializer.new(
    client: 'ruby',
    client_version: VERSION,
    client_transport: transport_type,
  ).format(global_tags)
end

Public Instance Methods

dropped_queue(bytes: 0, packets: 0) click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 65
def dropped_queue(bytes: 0, packets: 0)
  @bytes_dropped += bytes
  @bytes_dropped_queue += bytes
  @packets_dropped += packets
  @packets_dropped_queue += packets
end
dropped_writer(bytes: 0, packets: 0) click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 72
def dropped_writer(bytes: 0, packets: 0)
  @bytes_dropped += bytes
  @bytes_dropped_writer += bytes
  @packets_dropped += packets
  @packets_dropped_writer += packets
end
flush() click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 83
def flush
  [
    sprintf(pattern, 'metrics', @metrics),
    sprintf(pattern, 'events', @events),
    sprintf(pattern, 'service_checks', @service_checks),
    sprintf(pattern, 'bytes_sent', @bytes_sent),
    sprintf(pattern, 'bytes_dropped', @bytes_dropped),
    sprintf(pattern, 'bytes_dropped_queue', @bytes_dropped_queue),
    sprintf(pattern, 'bytes_dropped_writer', @bytes_dropped_writer),
    sprintf(pattern, 'packets_sent', @packets_sent),
    sprintf(pattern, 'packets_dropped', @packets_dropped),
    sprintf(pattern, 'packets_dropped_queue', @packets_dropped_queue),
    sprintf(pattern, 'packets_dropped_writer', @packets_dropped_writer),
  ]
end
reset() click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 41
def reset
  @metrics = 0
  @events = 0
  @service_checks = 0
  @bytes_sent = 0
  @bytes_dropped = 0
  @bytes_dropped_queue = 0
  @bytes_dropped_writer = 0
  @packets_sent = 0
  @packets_dropped = 0
  @packets_dropped_queue = 0
  @packets_dropped_writer = 0
  @next_flush_time = now_in_s + @flush_interval
end
sent(metrics: 0, events: 0, service_checks: 0, bytes: 0, packets: 0) click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 56
def sent(metrics: 0, events: 0, service_checks: 0, bytes: 0, packets: 0)
  @metrics += metrics
  @events += events
  @service_checks += service_checks

  @bytes_sent += bytes
  @packets_sent += packets
end
should_flush?() click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 79
def should_flush?
  @next_flush_time < now_in_s
end
would_fit_in?(max_buffer_payload_size) click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 37
def would_fit_in?(max_buffer_payload_size)
  MAX_TELEMETRY_MESSAGE_SIZE_WT_TAGS + serialized_tags.size < max_buffer_payload_size
end

Private Instance Methods

now_in_s() click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 107
def now_in_s
  Process.clock_gettime(Process::CLOCK_MONOTONIC, :second)
end
pattern() click to toggle source
# File lib/datadog/statsd/telemetry.rb, line 102
def pattern
  @pattern ||= "datadog.dogstatsd.client.%s:%d|#{COUNTER_TYPE}|##{serialized_tags}"
end