Module: Mixpanel::Flags::Utils
- Defined in:
- lib/mixpanel-ruby/flags/utils.rb
Constant Summary collapse
- EXPOSURE_EVENT =
'$experiment_started'.freeze
Class Method Summary collapse
-
.fnv1a_64(data) ⇒ Integer
FNV-1a 64-bit hash implementation Used for consistent variant assignment.
-
.generate_traceparent ⇒ String
Generate W3C traceparent header for distributed tracing Format: 00-trace-id-parent-id-trace-flags.
-
.normalized_hash(key, salt) ⇒ Float
Normalized hash for variant assignment Returns a float in the range [0.0, 1.0) for rollout percentage matching.
-
.prepare_common_query_params(token, lib_version) ⇒ Hash
Prepare common query parameters for flags API.
Class Method Details
.fnv1a_64(data) ⇒ Integer
FNV-1a 64-bit hash implementation Used for consistent variant assignment
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/mixpanel-ruby/flags/utils.rb', line 13 def self.fnv1a_64(data) fnv_prime = 0x100000001b3 hash_value = 0xcbf29ce484222325 data.bytes.each do |byte| hash_value ^= byte hash_value *= fnv_prime hash_value &= 0xffffffffffffffff # Keep 64-bit end hash_value end |
.generate_traceparent ⇒ String
Generate W3C traceparent header for distributed tracing Format: 00-trace-id-parent-id-trace-flags
55 56 57 58 59 60 61 62 |
# File 'lib/mixpanel-ruby/flags/utils.rb', line 55 def self.generate_traceparent version = '00' trace_id = SecureRandom.hex(16) parent_id = SecureRandom.hex(8) trace_flags = '01' # sampled "#{version}-#{trace_id}-#{parent_id}-#{trace_flags}" end |
.normalized_hash(key, salt) ⇒ Float
Normalized hash for variant assignment Returns a float in the range [0.0, 1.0) for rollout percentage matching
32 33 34 35 36 |
# File 'lib/mixpanel-ruby/flags/utils.rb', line 32 def self.normalized_hash(key, salt) combined = key.to_s + salt.to_s hash_value = fnv1a_64(combined) (hash_value % 100) / 100.0 end |
.prepare_common_query_params(token, lib_version) ⇒ Hash
Prepare common query parameters for flags API
43 44 45 46 47 48 49 |
# File 'lib/mixpanel-ruby/flags/utils.rb', line 43 def self.prepare_common_query_params(token, lib_version) { 'mp_lib' => 'ruby', '$lib_version' => lib_version, 'token' => token } end |