module Util

Utilities for epsagon opentelemetry solution

Public Class Methods

epsagon_query_attributes(query_string) click to toggle source
# File lib/util.rb, line 11
def self.epsagon_query_attributes(query_string)
  if query_string&.include? '='
    { 'http.request.query_params' => CGI.parse(query_string).to_json }
  else
    { 'http.request.query' => query_string }
  end
end
prepare_attr(key, value, max_size, excluded_keys) click to toggle source
# File lib/util.rb, line 30
def self.prepare_attr(key, value, max_size, excluded_keys)
  return nil if excluded_keys.include? key
  return self.trim_attr(value, max_size) unless value.instance_of? Hash
  value = value.dup
  excluded_keys.each do |ekey|
    if ekey.start_with? (key + '.')
      rest_of_key = ekey[key.size + 1..-1]
      self.remove_key_recursive(value, rest_of_key)
    end
  end
  return self.trim_attr(JSON.dump(value), max_size)
end
redis_default_url() click to toggle source
# File lib/util.rb, line 62
def self.redis_default_url
  @@redis_default_url ||= "#{Redis::Client::DEFAULTS[:scheme]}://#{Redis::Client::DEFAULTS[:host]}:#{Redis::Client::DEFAULTS[:port]}/#{Redis::Client::DEFAULTS[:db]}"
end
remove_key_recursive(h, key) click to toggle source
# File lib/util.rb, line 20
def self.remove_key_recursive(h, key) 
  dot_idx = key.index('.')
  if not dot_idx.nil?
    next_hash = h[key[0..dot_idx - 1]]
    self.remove_key_recursive(next_hash, key[dot_idx + 1..-1]) if next_hash
  else
    h.delete(key)
  end
end
trim_attr(value, max_size) click to toggle source
# File lib/util.rb, line 43
def self.trim_attr(value, max_size)
      if value.instance_of? Array then 
              current_size = 2
              value.each_with_index do |el, i|
                      el_size =  el.to_s.size + (i==0 ? 0 : 2)
                      if current_size + el_size > max_size then 
                              return value[0,i] + [Util.trim_attr(el, max_size - current_size)]
                      else 
                              current_size += el_size
                      end
              end
              return value
      elsif value.instance_of? String then
              (value.frozen? ? value.dup : value).force_encoding('utf-8')[0, max_size]
      else
              value
      end
end
untraced(&block) click to toggle source
# File lib/util.rb, line 66
def self.untraced(&block)
        OpenTelemetry::Trace.with_span(OpenTelemetry::Trace::Span.new, &block)
      end
validate_value(h, k, message) { |h| ... } click to toggle source
# File lib/util.rb, line 7
def self.validate_value(h, k, message, &block)
  raise ArgumentError.new( "#{k} #{message}. Got #{h[k].class}: #{h[k]}" ) unless yield(h[k])
end