Class: Multiplayer::Utils::TraceIdRatioBasedSampler

Inherits:
OpenTelemetry::SDK::Trace::Samplers::TraceIdRatioBased
  • Object
show all
Defined in:
lib/multiplayer/utils/trace_id_ratio_based_sampler.rb

Instance Method Summary collapse

Constructor Details

#initialize(ratio = 0) ⇒ TraceIdRatioBasedSampler

Returns a new instance of TraceIdRatioBasedSampler.



6
7
8
9
10
# File 'lib/multiplayer/utils/trace_id_ratio_based_sampler.rb', line 6

def initialize(ratio = 0)
  @ratio = normalize(ratio)
  @upper_bound = (@ratio * 0xffffffff).floor
  super(@ratio)
end

Instance Method Details

#descriptionObject



27
28
29
# File 'lib/multiplayer/utils/trace_id_ratio_based_sampler.rb', line 27

def description
  "MultiplayerTraceIdRatioBasedSampler#{@ratio}"
end

#is_mp_trace_id?(trace_id) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
25
# File 'lib/multiplayer/utils/trace_id_ratio_based_sampler.rb', line 21

def is_mp_trace_id?(trace_id)
  trace_id.start_with?(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
    trace_id.start_with?(MULTIPLAYER_TRACE_DOC_PREFIX) ||
    (self.valid_trace_id?(trace_id) && self.accumulate(trace_id) < @upper_bound)
end

#should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
# File 'lib/multiplayer/utils/trace_id_ratio_based_sampler.rb', line 12

def should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:)
  tracestate = OpenTelemetry::Trace.current_span(parent_context).context.tracestate
  if self.is_mp_trace_id?(trace_id.unpack1("H*"))
    OpenTelemetry::SDK::Trace::Samplers::Result.new(decision: OpenTelemetry::SDK::Trace::Samplers::Decision::RECORD_AND_SAMPLE, tracestate: tracestate)
  else
    OpenTelemetry::SDK::Trace::Samplers::Result.new(decision: OpenTelemetry::SDK::Trace::Samplers::Decision::DROP, tracestate: tracestate)
  end
end