Class: Trevosdk::ExposureDeduper

Inherits:
Object
  • Object
show all
Defined in:
lib/trevosdk/core.rb

Overview

Dedup semantics are corpus-frozen; the eviction strategy under memory pressure is not.

Instance Method Summary collapse

Constructor Details

#initialize(max_keys = Core::EXPOSURE_DEDUP_MAX_KEYS) ⇒ ExposureDeduper

Returns a new instance of ExposureDeduper.



136
137
138
139
# File 'lib/trevosdk/core.rb', line 136

def initialize(max_keys = Core::EXPOSURE_DEDUP_MAX_KEYS)
  @seen = {}
  @max_keys = max_keys
end

Instance Method Details

#clearObject



155
156
157
# File 'lib/trevosdk/core.rb', line 155

def clear
  @seen.clear
end

#should_log?(identity, experiment_key, variant_name, now_ms) ⇒ Boolean

Returns:

  • (Boolean)


141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/trevosdk/core.rb', line 141

def should_log?(identity, experiment_key, variant_name, now_ms)
  if @seen.length >= @max_keys
    @seen.delete_if { |_, ts| now_ms - ts >= Core::EXPOSURE_DEDUP_WINDOW_MS }
    @seen.clear if @seen.length >= @max_keys
  end

  key = "#{identity}:#{experiment_key}:#{variant_name}"
  last = @seen[key]
  return false if !last.nil? && now_ms - last < Core::EXPOSURE_DEDUP_WINDOW_MS

  @seen[key] = now_ms
  true
end