Sha256: 8ffaf4549c57f86e25b6d9fad5eae187e12f8ebad615a2eade99565c86bf51d2

Contents?: true

Size: 1.29 KB

Versions: 4

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module Jaeger
  module TraceId
    MAX_64BIT_SIGNED_INT = (1 << 63) - 1
    MAX_64BIT_UNSIGNED_INT = (1 << 64) - 1
    MAX_128BIT_UNSIGNED_INT = (1 << 128) - 1
    TRACE_ID_UPPER_BOUND = MAX_64BIT_UNSIGNED_INT + 1

    def self.generate
      rand(TRACE_ID_UPPER_BOUND)
    end

    def self.base16_hex_id_to_uint64(id)
      return nil unless id

      value = id.to_i(16)
      value > MAX_64BIT_UNSIGNED_INT || value.negative? ? 0 : value
    end

    def self.base16_hex_id_to_uint128(id)
      return nil unless id

      value = id.to_i(16)
      value > MAX_128BIT_UNSIGNED_INT || value.negative? ? 0 : value
    end

    # Thrift defines ID fields as i64, which is signed, therefore we convert
    # large IDs (> 2^63) to negative longs
    def self.uint64_id_to_int64(id)
      id > MAX_64BIT_SIGNED_INT ? id - MAX_64BIT_UNSIGNED_INT - 1 : id
    end

    # Convert an integer id into a 0 padded hex string.
    # If the string is shorter than 16 characters, it will be padded to 16.
    # If it is longer than 16 characters, it is padded to 32.
    def self.to_hex(id)
      hex_str = id.to_s(16)

      # pad the string with '0's to 16 or 32 characters
      if hex_str.length > 16
        hex_str.rjust(32, '0')
      else
        hex_str.rjust(16, '0')
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 3 rubygems

Version Path
dox-jaeger-client-2.0.0 lib/jaeger/trace_id.rb
jaeger-client-with-ruby-32-support-2.0.0 lib/jaeger/trace_id.rb
jaeger-client-1.3.0 lib/jaeger/trace_id.rb
jaeger-client-1.2.0 lib/jaeger/trace_id.rb