Sha256: 8d29ab6e5369002c393a214cabe062718c6f49f59be0ad735e8f97e1ad533042
Contents?: true
Size: 1.78 KB
Versions: 2
Compression:
Stored size: 1.78 KB
Contents
require 'ddtrace/utils/database' module Datadog # Utils contains low-level utilities, typically to provide pseudo-random trace IDs. module Utils EMPTY_STRING = ''.encode(::Encoding::UTF_8).freeze # We use a custom random number generator because we want no interference # with the default one. Using the default prng, we could break code that # would rely on srand/rand sequences. # Return a span id def self.next_id reset! if was_forked? @rnd.rand(Datadog::Span::RUBY_MAX_ID) end def self.reset! @pid = Process.pid @rnd = Random.new end def self.was_forked? Process.pid != @pid end private_class_method :reset!, :was_forked? reset! 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 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 elsif str.empty? # DEV Optimization as `nil.to_s` is a very common source for an empty string, # DEV but it comes encoded as US_ASCII. EMPTY_STRING else str.encode(::Encoding::UTF_8) end rescue => e Datadog.logger.debug("Error encoding string in UTF-8: #{e}") options.fetch(:placeholder, EMPTY_STRING) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ddtrace-0.42.0 | lib/ddtrace/utils.rb |
ddtrace-0.41.0 | lib/ddtrace/utils.rb |