class Sentry::Utils::SampleRand
def self.format(value)
def self.format(value) return unless value truncated = (value * PRECISION).floor / PRECISION "%.#{FORMAT_PRECISION}f" % truncated end
def self.valid?(value)
def self.valid?(value) return false unless value value >= 0.0 && value < 1.0 end
def fallback_generation
def fallback_generation if @trace_id (random_from_trace_id * PRECISION).floor / PRECISION else format_random(Random.rand(1.0)) end end
def format_random(value)
def format_random(value) truncated = (value * PRECISION).floor / PRECISION ("%.#{FORMAT_PRECISION}f" % truncated).to_f end
def generate_based_on_sampling(sampled, sample_rate)
def generate_based_on_sampling(sampled, sample_rate) random = random_from_trace_id result = if sampled random * sample_rate elsif sample_rate == 1.0 random else sample_rate + random * (1.0 - sample_rate) end format_random(result) end
def generate_from_sampling_decision(sampled, sample_rate)
def generate_from_sampling_decision(sampled, sample_rate) if invalid_sample_rate?(sample_rate) fallback_generation else generate_based_on_sampling(sampled, sample_rate) end end
def generate_from_trace_id
def generate_from_trace_id (random_from_trace_id * PRECISION).floor / PRECISION end
def generate_from_value(sample_rand_value)
def generate_from_value(sample_rand_value) parsed_value = parse_value(sample_rand_value) if self.class.valid?(parsed_value) parsed_value else fallback_generation end end
def initialize(trace_id: nil)
def initialize(trace_id: nil) @trace_id = trace_id end
def invalid_sample_rate?(sample_rate)
def invalid_sample_rate?(sample_rate) sample_rate.nil? || sample_rate <= 0.0 || sample_rate > 1.0 end
def parse_value(sample_rand_value)
def parse_value(sample_rand_value) Float(sample_rand_value) rescue ArgumentError nil end
def random_from_trace_id
def random_from_trace_id if @trace_id Random.new(@trace_id[0, 16].to_i(16)) else Random.new end.rand(1.0) end