Class: SplitIoClient::Cache::Repositories::Impressions::RedisRepository
- Inherits:
-
SplitIoClient::Cache::Repository
- Object
- SplitIoClient::Cache::Repository
- SplitIoClient::Cache::Repositories::Impressions::RedisRepository
- Defined in:
- lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb
Constant Summary collapse
- IMPRESSIONS_SLICE =
1000
Instance Method Summary collapse
-
#add(split_name, data) ⇒ Object
Store impression data in Redis.
- #add_bulk(key, bucketing_key, treatments_labels_change_numbers, time) ⇒ Object
-
#clear ⇒ Object
Get random impressions from redis in batches of size @config.impressions_queue_size, delete fetched impressions afterwards.
-
#initialize(adapter, config) ⇒ RedisRepository
constructor
A new instance of RedisRepository.
Methods inherited from SplitIoClient::Cache::Repository
Constructor Details
#initialize(adapter, config) ⇒ RedisRepository
Returns a new instance of RedisRepository.
8 9 10 11 |
# File 'lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb', line 8 def initialize(adapter, config) @adapter = adapter @config = config end |
Instance Method Details
#add(split_name, data) ⇒ Object
Store impression data in Redis
14 15 16 17 18 19 |
# File 'lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb', line 14 def add(split_name, data) @adapter.add_to_set( impressions_metrics_key("impressions.#{split_name}"), data.to_json ) end |
#add_bulk(key, bucketing_key, treatments_labels_change_numbers, time) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb', line 21 def add_bulk(key, bucketing_key, treatments_labels_change_numbers, time) @adapter.redis.pipelined do treatments_labels_change_numbers.each_slice(IMPRESSIONS_SLICE) do |treatments_labels_change_numbers_slice| treatments_labels_change_numbers_slice.each do |split_name, treatment_label_change_number| add(split_name, 'keyName' => key, 'bucketingKey' => bucketing_key, 'treatment' => treatment_label_change_number[:treatment], 'label' => @config.labels_enabled ? treatment_label_change_number[:label] : nil, 'changeNumber' => treatment_label_change_number[:change_number], 'time' => time) end end end end |
#clear ⇒ Object
Get random impressions from redis in batches of size @config.impressions_queue_size, delete fetched impressions afterwards
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb', line 39 def clear impressions = impression_keys.each_with_object([]) do |key, memo| ip = key.split('/')[-2] # 'prefix/sdk_lang/ip/impressions.name' -> ip if ip.nil? @config.logger.warn("Impressions IP parse error for key: #{key}") next end split_name = key.split('.').last members = @adapter.random_set_elements(key, @config.impressions_queue_size) members.each do |impression| parsed_impression = JSON.parse(impression) memo << { feature: split_name, impressions: parsed_impression, ip: ip } end @adapter.delete_from_set(key, members) end impressions rescue StandardError => e @config.logger.error("Exception while clearing impressions cache: #{e}") end |