Module: Datadog::Utils
- Extended by:
- Forking
- Defined in:
- lib/ddtrace/utils.rb,
lib/ddtrace/utils/time.rb,
lib/ddtrace/utils/forking.rb,
lib/ddtrace/utils/database.rb,
lib/ddtrace/utils/sequence.rb,
lib/ddtrace/utils/only_once.rb,
lib/ddtrace/utils/object_set.rb,
lib/ddtrace/utils/compression.rb,
lib/ddtrace/utils/string_table.rb
Overview
Utils contains low-level utilities, typically to provide pseudo-random trace IDs.
Defined Under Namespace
Modules: Compression, Database, Forking, Time Classes: ObjectSet, OnlyOnce, Sequence, StringTable
Constant Summary collapse
- EMPTY_STRING =
''.encode(::Encoding::UTF_8).freeze
Class Method Summary collapse
-
.next_id ⇒ Object
Return a randomly generated integer, valid as a Span ID or Trace ID.
-
.truncate(value, size, omission = '...'.freeze) ⇒ Object
Stringifies
valueand ensures the outcome is string is no longer thansize. -
.utf8_encode(str, options = {}) ⇒ Object
Ensure
stris a valid UTF-8, ready to be sent through the tracer transport.
Methods included from Forking
after_fork!, extended, fork_pid, forked?, included, update_fork_pid!
Class Method Details
.next_id ⇒ Object
Return a randomly generated integer, valid as a Span ID or Trace ID. This method is thread-safe and fork-safe.
17 18 19 20 |
# File 'lib/ddtrace/utils.rb', line 17 def self.next_id after_fork! { reset! } id_rng.rand(Datadog::Span::RUBY_MAX_ID) # TODO: This should never return zero end |
.truncate(value, size, omission = '...'.freeze) ⇒ Object
Stringifies value and ensures the outcome is
string is no longer than size.
omission replaces the end of the output if
value.to_s does not fit in size, to signify
truncation.
If omission.size is larger than size, the output
will still be omission.size in length.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ddtrace/utils.rb', line 40 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 = {}) ⇒ Object
Ensure str is a valid UTF-8, ready to be
sent through the tracer transport.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ddtrace/utils.rb', line 58 def self.utf8_encode(str, = {}) str = str.to_s if [: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}") .fetch(:placeholder, EMPTY_STRING) end |