Class: SplitIoClient::Cache::Repositories::Impressions::MemoryRepository

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb

Instance Method Summary collapse

Constructor Details

#initialize(adapter) ⇒ MemoryRepository

Returns a new instance of MemoryRepository.



7
8
9
# File 'lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb', line 7

def initialize(adapter)
  @adapter = adapter
end

Instance Method Details

#add(split_name, data) ⇒ Object

Store impression data in the selected adapter



12
13
14
15
16
17
18
19
# File 'lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb', line 12

def add(split_name, data)
  @adapter.add_to_queue(feature: split_name, impressions: data)
rescue ThreadError # queue is full
  if random_sampler.rand(1..1000) <= 2 # log only 0.2 % of the time
    SplitIoClient.configuration.logger.warn("Dropping impressions. Current size is #{SplitIoClient.configuration.impressions_queue_size}. " \
                        "Consider increasing impressions_queue_size")
  end
end

#add_bulk(key, bucketing_key, treatments, time) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb', line 21

def add_bulk(key, bucketing_key, treatments, time)
  treatments.each do |split_name, treatment|
    add(
      split_name,
      'keyName' => key,
      'bucketingKey' => bucketing_key,
      'treatment' => treatment[:treatment],
      'label' => SplitIoClient.configuration.labels_enabled ? treatment[:label] : nil,
      'changeNumber' => treatment[:change_number],
      'time' => time
    )
  end
end

#get_batch ⇒ Object



35
36
37
38
39
40
# File 'lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb', line 35

def get_batch
  return [] if SplitIoClient.configuration.impressions_bulk_size == 0
  @adapter.get_batch(SplitIoClient.configuration.impressions_bulk_size).map do |impression|
    impression.update(ip: SplitIoClient.configuration.machine_ip)
  end
end