module Datadog::Utils

Utils contains low-level utilities, typically to provide pseudo-random trace IDs.

Constants

STRING_PLACEHOLDER

Public Class Methods

next_id() click to toggle source

Return a span id

# File lib/ddtrace/utils.rb, line 12
def self.next_id
  reset! if was_forked?

  @rnd.rand(Datadog::Span::MAX_ID)
end
truncate(value, size, omission = '...'.freeze) click to toggle source
# File lib/ddtrace/utils.rb, line 31
def self.truncate(value, size, omission = '...'.freeze)
  string = value.to_s

  return string if string.size <= size

  string = string.slice(0, size - 1)

  if size < omission.size
    string[0, size] = omission
  else
    string[size - omission.size, size] = omission
  end

  string
end
utf8_encode(str, options = {}) click to toggle source
# File lib/ddtrace/utils.rb, line 47
def self.utf8_encode(str, options = {})
  str = str.to_s

  if options[:binary]
    # This option is useful for "gracefully" displaying binary data that
    # often contains text such as marshalled objects
    str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
  elsif str.encoding == ::Encoding::UTF_8
    str
  else
    str.encode(::Encoding::UTF_8)
  end
rescue => e
  Datadog.logger.debug("Error encoding string in UTF-8: #{e}")

  options.fetch(:placeholder, STRING_PLACEHOLDER)
end

Private Class Methods

reset!() click to toggle source
# File lib/ddtrace/utils.rb, line 18
def self.reset!
  @pid = Process.pid
  @rnd = Random.new
end
was_forked?() click to toggle source
# File lib/ddtrace/utils.rb, line 23
def self.was_forked?
  Process.pid != @pid
end