splitclient-rb 7.1.4.pre.rc15 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGES.txt +5 -0
 - data/lib/splitclient-rb/cache/routers/impression_router.rb +17 -20
 - data/lib/splitclient-rb/engine/common/impressions_counter.rb +4 -4
 - data/lib/splitclient-rb/engine/common/impressions_manager.rb +17 -12
 - data/lib/splitclient-rb/version.rb +1 -1
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: d5a8bad0b7b72fba188bff72b10b5a0849bdadabdde484929b83071a51cfe715
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 27b74c33b6fbe6c87141bf163f1dbd8d37eaa586d8c60eb73319cbcb7e3cc85e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 0db37fb36974d3b177b3b4b08d35199bf828b8c4ebc508731e1255c44c08f9be2953174e6dbb3b1a2d514f880845b0abefd300061ad9b77e72745a867b930dc4
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 0d66fc9a82f117ed7ccc4e391aa59827ed024d34d3082472dab54d6c3cacd57357c01af6eb6becb69f8a0dabc12cc51258e0e7a852fbfc9c82d414eb1ad1d40b
         
     | 
    
        data/CHANGES.txt
    CHANGED
    
    | 
         @@ -1,5 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            CHANGES
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            7.2.0 (Sep 25, 2020)
         
     | 
| 
      
 4 
     | 
    
         
            +
            - Added deduplication logic for impressions data.
         
     | 
| 
      
 5 
     | 
    
         
            +
              - Now there are two modes for Impressions when the SDK is in standalone mode, OPTIMIZED (default) that only ships unique impressions and DEBUG for times where you need to send ALL impressions to debug an integration.
         
     | 
| 
      
 6 
     | 
    
         
            +
              - Impression listener remains unchanged and will still get all impressions.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       3 
8 
     | 
    
         
             
            7.1.3 (Jul 31, 2020)
         
     | 
| 
       4 
9 
     | 
    
         
             
            - Updated rake development dependency to ~> 12.3.3.
         
     | 
| 
       5 
10 
     | 
    
         | 
| 
         @@ -19,33 +19,30 @@ module SplitIoClient 
     | 
|
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                def add_bulk(impressions)
         
     | 
| 
       22 
     | 
    
         
            -
                  @config.logger.error("### ROUTER.IMPRESSIONS #{impressions.to_s}")
         
     | 
| 
       23 
     | 
    
         
            -
                  @config.logger.error("### LISTENER #{@listener.nil?}")
         
     | 
| 
       24 
     | 
    
         
            -
                  return unless @listener
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
22 
     | 
    
         
             
                  impressions.each do |impression|
         
     | 
| 
       27 
     | 
    
         
            -
                    enqueue(
         
     | 
| 
       28 
     | 
    
         
            -
                      split_name: impression[:i][:f],
         
     | 
| 
       29 
     | 
    
         
            -
                      matching_key: impression[:i][:k],
         
     | 
| 
       30 
     | 
    
         
            -
                      bucketing_key: impression[:i][:b],
         
     | 
| 
       31 
     | 
    
         
            -
                      time: impression[:i][:m],
         
     | 
| 
       32 
     | 
    
         
            -
                      treatment: {
         
     | 
| 
       33 
     | 
    
         
            -
                        label: impression[:i][:r],
         
     | 
| 
       34 
     | 
    
         
            -
                        treatment: impression[:i][:t],
         
     | 
| 
       35 
     | 
    
         
            -
                        change_number: impression[:i][:c]
         
     | 
| 
       36 
     | 
    
         
            -
                      },
         
     | 
| 
       37 
     | 
    
         
            -
                      previous_time: impression[:i][:pt],
         
     | 
| 
       38 
     | 
    
         
            -
                      attributes: impression[:attributes]
         
     | 
| 
       39 
     | 
    
         
            -
                    ) unless impression.nil?
         
     | 
| 
      
 23 
     | 
    
         
            +
                    enqueue(impression)
         
     | 
| 
       40 
24 
     | 
    
         
             
                  end
         
     | 
| 
       41 
     | 
    
         
            -
                rescue StandardError => error
         
     | 
| 
       42 
     | 
    
         
            -
                  @config.log_found_exception(__method__.to_s, error)
         
     | 
| 
       43 
25 
     | 
    
         
             
                end
         
     | 
| 
       44 
26 
     | 
    
         | 
| 
       45 
27 
     | 
    
         
             
                private
         
     | 
| 
       46 
28 
     | 
    
         | 
| 
       47 
29 
     | 
    
         
             
                def enqueue(impression)
         
     | 
| 
       48 
     | 
    
         
            -
                   
     | 
| 
      
 30 
     | 
    
         
            +
                  imp = {
         
     | 
| 
      
 31 
     | 
    
         
            +
                    split_name: impression[:i][:f],
         
     | 
| 
      
 32 
     | 
    
         
            +
                    matching_key: impression[:i][:k],
         
     | 
| 
      
 33 
     | 
    
         
            +
                    bucketing_key: impression[:i][:b],
         
     | 
| 
      
 34 
     | 
    
         
            +
                    time: impression[:i][:m],
         
     | 
| 
      
 35 
     | 
    
         
            +
                    treatment: {
         
     | 
| 
      
 36 
     | 
    
         
            +
                      label: impression[:i][:r],
         
     | 
| 
      
 37 
     | 
    
         
            +
                      treatment: impression[:i][:t],
         
     | 
| 
      
 38 
     | 
    
         
            +
                      change_number: impression[:i][:c]
         
     | 
| 
      
 39 
     | 
    
         
            +
                    },
         
     | 
| 
      
 40 
     | 
    
         
            +
                    previous_time: impression[:i][:pt],
         
     | 
| 
      
 41 
     | 
    
         
            +
                    attributes: impression[:attributes]
         
     | 
| 
      
 42 
     | 
    
         
            +
                  }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @queue.push(imp) if @listener
         
     | 
| 
      
 44 
     | 
    
         
            +
                rescue StandardError => error
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @config.log_found_exception(__method__.to_s, error)
         
     | 
| 
       49 
46 
     | 
    
         
             
                end
         
     | 
| 
       50 
47 
     | 
    
         | 
| 
       51 
48 
     | 
    
         
             
                def router_thread
         
     | 
| 
         @@ -32,12 +32,12 @@ module SplitIoClient 
     | 
|
| 
       32 
32 
     | 
    
         
             
                      to_return
         
     | 
| 
       33 
33 
     | 
    
         
             
                    end
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
                    def  
     | 
| 
       36 
     | 
    
         
            -
                       
     | 
| 
      
 35 
     | 
    
         
            +
                    def make_key(split_name, time_frame)
         
     | 
| 
      
 36 
     | 
    
         
            +
                      "#{split_name}::#{ImpressionCounter.truncate_time_frame(time_frame)}"
         
     | 
| 
       37 
37 
     | 
    
         
             
                    end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                    def  
     | 
| 
       40 
     | 
    
         
            -
                       
     | 
| 
      
 39 
     | 
    
         
            +
                    def self.truncate_time_frame(timestamp_ms)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      timestamp_ms - (timestamp_ms % TIME_INTERVAL_MS)
         
     | 
| 
       41 
41 
     | 
    
         
             
                    end
         
     | 
| 
       42 
42 
     | 
    
         
             
                  end
         
     | 
| 
       43 
43 
     | 
    
         
             
                end
         
     | 
| 
         @@ -8,7 +8,6 @@ module SplitIoClient 
     | 
|
| 
       8 
8 
     | 
    
         
             
                      @config = config
         
     | 
| 
       9 
9 
     | 
    
         
             
                      @impressions_repository = impressions_repository
         
     | 
| 
       10 
10 
     | 
    
         
             
                      @impression_counter = impression_counter
         
     | 
| 
       11 
     | 
    
         
            -
                      @impression_router = SplitIoClient::ImpressionRouter.new(@config)
         
     | 
| 
       12 
11 
     | 
    
         
             
                      @impression_observer = SplitIoClient::Observers::ImpressionObserver.new
         
     | 
| 
       13 
12 
     | 
    
         
             
                    end
         
     | 
| 
       14 
13 
     | 
    
         | 
| 
         @@ -18,7 +17,7 @@ module SplitIoClient 
     | 
|
| 
       18 
17 
     | 
    
         | 
| 
       19 
18 
     | 
    
         
             
                      impression_data[:pt] = @impression_observer.test_and_set(impression_data) unless redis?
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                       
     | 
| 
      
 20 
     | 
    
         
            +
                      @impression_counter.inc(split_name, impression_data[:m]) if optimized? && !redis?
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
22 
     | 
    
         
             
                      impression(impression_data, params[:attributes])
         
     | 
| 
       24 
23 
     | 
    
         
             
                    rescue StandardError => error
         
     | 
| 
         @@ -26,11 +25,16 @@ module SplitIoClient 
     | 
|
| 
       26 
25 
     | 
    
         
             
                    end
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
       28 
27 
     | 
    
         
             
                    def track(impressions)
         
     | 
| 
       29 
     | 
    
         
            -
                      @config.logger.error("### IMPRESSIONS #{impressions.to_s}")
         
     | 
| 
       30 
28 
     | 
    
         
             
                      return if impressions.empty?
         
     | 
| 
       31 
29 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                       
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
                      impression_router.add_bulk(impressions)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                      if optimized? && !redis?
         
     | 
| 
      
 33 
     | 
    
         
            +
                        optimized_impressions = impressions.select { |imp| should_queue_impression?(imp[:i]) }
         
     | 
| 
      
 34 
     | 
    
         
            +
                        @impressions_repository.add_bulk(optimized_impressions)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      else
         
     | 
| 
      
 36 
     | 
    
         
            +
                        @impressions_repository.add_bulk(impressions)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      end
         
     | 
| 
       34 
38 
     | 
    
         
             
                    rescue StandardError => error
         
     | 
| 
       35 
39 
     | 
    
         
             
                      @config.log_found_exception(__method__.to_s, error)
         
     | 
| 
       36 
40 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -67,14 +71,9 @@ module SplitIoClient 
     | 
|
| 
       67 
71 
     | 
    
         
             
                      @config.impressions_mode == :optimized
         
     | 
| 
       68 
72 
     | 
    
         
             
                    end
         
     | 
| 
       69 
73 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                    def impression_optimized(split_name, impression_data, attributes)
         
     | 
| 
       71 
     | 
    
         
            -
                      @impression_counter.inc(split_name, impression_data[:m])
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                      impression(impression_data, attributes) if should_queue_impression?(impression_data)
         
     | 
| 
       74 
     | 
    
         
            -
                    end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
74 
     | 
    
         
             
                    def should_queue_impression?(impression)
         
     | 
| 
       77 
     | 
    
         
            -
                      impression[:pt].nil? || 
     | 
| 
      
 75 
     | 
    
         
            +
                      impression[:pt].nil? ||
         
     | 
| 
      
 76 
     | 
    
         
            +
                        (ImpressionCounter.truncate_time_frame(impression[:pt]) != ImpressionCounter.truncate_time_frame(impression[:m]))
         
     | 
| 
       78 
77 
     | 
    
         
             
                    end
         
     | 
| 
       79 
78 
     | 
    
         | 
| 
       80 
79 
     | 
    
         
             
                    def impression(impression_data, attributes)
         
     | 
| 
         @@ -84,6 +83,12 @@ module SplitIoClient 
     | 
|
| 
       84 
83 
     | 
    
         
             
                    def redis?
         
     | 
| 
       85 
84 
     | 
    
         
             
                      @config.impressions_adapter.class.to_s == 'SplitIoClient::Cache::Adapters::RedisAdapter'
         
     | 
| 
       86 
85 
     | 
    
         
             
                    end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                    def impression_router
         
     | 
| 
      
 88 
     | 
    
         
            +
                      @impression_router ||= SplitIoClient::ImpressionRouter.new(@config)
         
     | 
| 
      
 89 
     | 
    
         
            +
                    rescue StandardError => error
         
     | 
| 
      
 90 
     | 
    
         
            +
                      @config.log_found_exception(__method__.to_s, error)
         
     | 
| 
      
 91 
     | 
    
         
            +
                    end
         
     | 
| 
       87 
92 
     | 
    
         
             
                  end
         
     | 
| 
       88 
93 
     | 
    
         
             
                end
         
     | 
| 
       89 
94 
     | 
    
         
             
              end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: splitclient-rb
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 7. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 7.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Split Software
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2020-09- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-09-28 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: allocation_stats
         
     | 
| 
         @@ -454,9 +454,9 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       454 
454 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       455 
455 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       456 
456 
     | 
    
         
             
              requirements:
         
     | 
| 
       457 
     | 
    
         
            -
              - - " 
     | 
| 
      
 457 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       458 
458 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       459 
     | 
    
         
            -
                  version:  
     | 
| 
      
 459 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
       460 
460 
     | 
    
         
             
            requirements: []
         
     | 
| 
       461 
461 
     | 
    
         
             
            rubygems_version: 3.0.6
         
     | 
| 
       462 
462 
     | 
    
         
             
            signing_key: 
         
     |