Module: OpenTelemetry::Common::Utilities

Extended by:
Utilities
Included in:
Utilities
Defined in:
lib/opentelemetry/common/utilities.rb

Overview

Utilities contains common helpers.

Constant Summary collapse

STRING_PLACEHOLDER =
''.encode(::Encoding::UTF_8).freeze

Instance Method Summary collapse

Instance Method Details

#cleanse_url(url) ⇒ String

Returns a URL string with userinfo removed.

Parameters:

  • url (String)

    The URL string to cleanse.

Returns:

  • (String)

    the cleansed URL.



116
117
118
119
120
121
122
123
# File 'lib/opentelemetry/common/utilities.rb', line 116

def cleanse_url(url)
  cleansed_url = URI.parse(url)
  cleansed_url.password = nil
  cleansed_url.user = nil
  cleansed_url.to_s
rescue URI::Error
  url
end

#config_opt(*env_vars, default: nil) ⇒ Object

Returns the first non nil environment variable requested, or the default value if provided.

Parameters:

  • env_vars (String)

    The environment variable(s) to retrieve

  • default (defaults to: nil)

    The fallback value to return if the requested env var(s) are not present



133
134
135
# File 'lib/opentelemetry/common/utilities.rb', line 133

def config_opt(*env_vars, default: nil)
  ENV.values_at(*env_vars).compact.fetch(0, default)
end

#maybe_timeout(timeout, start_time) ⇒ Numeric

Returns nil if timeout is nil, 0 if timeout has expired, or the remaining (positive) time left in seconds.

Parameters:

  • timeout (Numeric)

    The timeout in seconds. May be nil.

  • start_time (Numeric)

    Start time for timeout returned by #timeout_timestamp.

Returns:

  • (Numeric)

    remaining (positive) time left in seconds. May be nil.



29
30
31
32
33
34
# File 'lib/opentelemetry/common/utilities.rb', line 29

def maybe_timeout(timeout, start_time)
  return nil if timeout.nil?

  timeout -= (timeout_timestamp - start_time)
  timeout.positive? ? timeout : 0
end

#timeout_timestampNumeric

Returns a timestamp suitable to pass as the start_time argument to #maybe_timeout. This has no meaning outside of the current process.

Returns:

  • (Numeric)


41
42
43
# File 'lib/opentelemetry/common/utilities.rb', line 41

def timeout_timestamp
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

#truncate(string, size) ⇒ String

Truncates a string if it exceeds the size provided.

Parameters:

  • string (String)

    The string to be truncated

  • size (Integer)

    The max size of the string

Returns:

  • (String)


76
77
78
# File 'lib/opentelemetry/common/utilities.rb', line 76

def truncate(string, size)
  string.size > size ? "#{string[0...size - 3]}..." : string
end

#truncate_attribute_value(value, limit) ⇒ Object



80
81
82
83
84
85
86
87
88
89
# File 'lib/opentelemetry/common/utilities.rb', line 80

def truncate_attribute_value(value, limit)
  case value
  when Array
    value.map { |x| truncate_attribute_value(x, limit) }
  when String
    truncate(value, limit)
  else
    value
  end
end

#untraced(context = Context.current) ⇒ Object

Disables tracing within the provided block If no block is provided instead returns an untraced ctx.

Parameters:

  • context (optional Context) (defaults to: Context.current)

    Accepts an explicit context, defaults to current



96
97
98
99
100
101
102
103
# File 'lib/opentelemetry/common/utilities.rb', line 96

def untraced(context = Context.current)
  context = context.set_value(UNTRACED_KEY, true)
  if block_given?
    Context.with_current(context) { |ctx| yield ctx }
  else
    context
  end
end

#untraced?(context = nil) ⇒ Boolean

Detects whether the current context has been set to disable tracing.

Returns:

  • (Boolean)


106
107
108
109
# File 'lib/opentelemetry/common/utilities.rb', line 106

def untraced?(context = nil)
  context ||= Context.current
  !!context.value(UNTRACED_KEY)
end

#utf8_encode(string, binary: false, placeholder: STRING_PLACEHOLDER) ⇒ String

Encodes a string in utf8

Parameters:

  • string (String)

    The string to be utf8 encoded

  • binary (optional boolean) (defaults to: false)

    This option is for displaying binary data

  • placeholder (optional String) (defaults to: STRING_PLACEHOLDER)

    The fallback string to be used if encoding fails

Returns:

  • (String)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/opentelemetry/common/utilities.rb', line 52

def utf8_encode(string, binary: false, placeholder: STRING_PLACEHOLDER)
  string = string.to_s

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

  placeholder
end

#valid_exporter?(exporter) ⇒ Boolean

Returns true if exporter is a valid exporter.

Returns:

  • (Boolean)


152
153
154
# File 'lib/opentelemetry/common/utilities.rb', line 152

def valid_exporter?(exporter)
  exporter && %i[export shutdown force_flush].all? { |m| exporter.respond_to?(m) }
end

#valid_url?(url) ⇒ boolean

Returns a true if the provided url is valid

Parameters:

  • url (String)

    the URL string to test validity

Returns:

  • (boolean)


142
143
144
145
146
147
148
149
# File 'lib/opentelemetry/common/utilities.rb', line 142

def valid_url?(url)
  return false if url.nil? || url.strip.empty?

  URI(url)
  true
rescue URI::InvalidURIError
  false
end