Class: Multiplayer::Utils::IdGenerator

Inherits:
Object
  • Object
show all
Includes:
OpenTelemetry::Trace
Defined in:
lib/multiplayer/utils/id_generator.rb

Constant Summary collapse

SHARED_CHAR_CODES_ARRAY =
Array.new(32)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(auto_doc_traces_ratio = 0) ⇒ IdGenerator



11
12
13
14
15
# File 'lib/multiplayer/utils/id_generator.rb', line 11

def initialize(auto_doc_traces_ratio = 0)
  @debug_session_short_id = nil
  @id_generator = IdGenerator.get_id_generator(16)
  @sampler = TraceIdRatioBasedSampler.new(auto_doc_traces_ratio)
end

Instance Attribute Details

#debug_session_short_idObject

Returns the value of attribute debug_session_short_id.



7
8
9
# File 'lib/multiplayer/utils/id_generator.rb', line 7

def debug_session_short_id
  @debug_session_short_id
end

#id_generatorObject

Returns the value of attribute id_generator.



7
8
9
# File 'lib/multiplayer/utils/id_generator.rb', line 7

def id_generator
  @id_generator
end

#samplerObject

Returns the value of attribute sampler.



7
8
9
# File 'lib/multiplayer/utils/id_generator.rb', line 7

def sampler
  @sampler
end

Class Method Details

.get_id_generator(bytes) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/multiplayer/utils/id_generator.rb', line 28

def self.get_id_generator(bytes)
  lambda do
    (0...(bytes * 2)).each do |i|
      SHARED_CHAR_CODES_ARRAY[i] = rand(16) + 48
      # valid hex characters in the range 48-57 and 97-102
      if SHARED_CHAR_CODES_ARRAY[i] >= 58
        SHARED_CHAR_CODES_ARRAY[i] += 39
      end
    end
    SHARED_CHAR_CODES_ARRAY[0...(bytes * 2)].map(&:chr).join
  end
end

Instance Method Details

#generate_trace_idObject



17
18
19
20
21
22
23
24
25
26
# File 'lib/multiplayer/utils/id_generator.rb', line 17

def generate_trace_id
  trace_id = @id_generator.call
  if @debug_session_short_id
    prefix = "#{MULTIPLAYER_TRACE_DEBUG_PREFIX}#{@debug_session_short_id}"
    trace_id = "#{prefix}#{trace_id[prefix.length..-1]}"
  elsif @sampler.is_mp_trace_id?(trace_id)
    trace_id = "#{MULTIPLAYER_TRACE_DOC_PREFIX}#{trace_id[MULTIPLAYER_TRACE_DOC_PREFIX.length..-1]}"
  end
  [ trace_id ].pack("H*")
end