Class: SplitIoClient::Engine::Common::ImpressionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/engine/common/impressions_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(config, impressions_repository, impression_counter, telemetry_runtime_producer) ⇒ ImpressionManager

Returns a new instance of ImpressionManager.



7
8
9
10
11
12
13
# File 'lib/splitclient-rb/engine/common/impressions_manager.rb', line 7

def initialize(config, impressions_repository, impression_counter, telemetry_runtime_producer)
  @config = config
  @impressions_repository = impressions_repository
  @impression_counter = impression_counter
  @impression_observer = SplitIoClient::Observers::ImpressionObserver.new
  @telemetry_runtime_producer = telemetry_runtime_producer
end

Instance Method Details

#build_impression(matching_key, bucketing_key, split_name, treatment, params = {}) ⇒ Object

added param time for test



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/splitclient-rb/engine/common/impressions_manager.rb', line 16

def build_impression(matching_key, bucketing_key, split_name, treatment, params = {})
  impression_data = impression_data(matching_key, bucketing_key, split_name, treatment, params[:time])

  impression_data[:pt] = @impression_observer.test_and_set(impression_data) unless redis?

  @impression_counter.inc(split_name, impression_data[:m]) if optimized? && !redis?

  impression(impression_data, params[:attributes])
rescue StandardError => e
  @config.log_found_exception(__method__.to_s, e)
end

#track(impressions) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/splitclient-rb/engine/common/impressions_manager.rb', line 28

def track(impressions)
  return if impressions.empty?

  impression_router.add_bulk(impressions)

  dropped = 0
  queued = 0
  dedupe = 0

  if optimized? && !redis?
    optimized_impressions = impressions.select { |imp| should_queue_impression?(imp[:i]) }

    unless optimized_impressions.empty?
      dropped = @impressions_repository.add_bulk(optimized_impressions)
      dedupe = impressions.length - optimized_impressions.length
      queued = optimized_impressions.length - dropped
    end
  else
    dropped = @impressions_repository.add_bulk(impressions)
    queued = impressions.length - dropped
  end

  record_stats(queued, dropped, dedupe)
rescue StandardError => e
  @config.log_found_exception(__method__.to_s, e)
end