From 8ce0792ea751921e9aa42d6e2592328ef56dd669 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Mon, 3 Oct 2022 17:43:23 -0300 Subject: [PATCH 1/8] enabling none impression --- CHANGES.txt | 3 +++ .../impressions_adapter/redis_sender.rb | 4 +++- .../engine/common/impressions_manager.rb | 3 ++- lib/splitclient-rb/split_config.rb | 23 +++++++++++++------ lib/splitclient-rb/version.rb | 2 +- .../impressions_sender_adapter_spec.rb | 16 +++++++++---- .../redis_unique_keys_tracker_spec.rb | 16 +++++++++++-- spec/integrations/dedupe_impression_spec.rb | 11 +++++---- 8 files changed, 57 insertions(+), 21 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9dda1b5c..a653cbbe 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,8 @@ CHANGES +8.1.0 (Oct 3, 2022) +- + 8.0.1 (Jul 20, 2022) - Updated dependencies to support faraday > 2.0 diff --git a/lib/splitclient-rb/cache/senders/impressions_adapter/redis_sender.rb b/lib/splitclient-rb/cache/senders/impressions_adapter/redis_sender.rb index 53f1593f..8b7b86ac 100644 --- a/lib/splitclient-rb/cache/senders/impressions_adapter/redis_sender.rb +++ b/lib/splitclient-rb/cache/senders/impressions_adapter/redis_sender.rb @@ -12,7 +12,9 @@ def initialize(config) end def record_uniques_key(uniques) - formatted = uniques_formatter(uniques) + return if uniques.nil? || uniques == {} + + formatted = uniques_formatter(uniques).to_json unless formatted.nil? size = @adapter.add_to_queue(unique_keys_key, formatted) diff --git a/lib/splitclient-rb/engine/common/impressions_manager.rb b/lib/splitclient-rb/engine/common/impressions_manager.rb index 1cb4cda3..5d9db724 100644 --- a/lib/splitclient-rb/engine/common/impressions_manager.rb +++ b/lib/splitclient-rb/engine/common/impressions_manager.rb @@ -30,7 +30,8 @@ def build_impression(matching_key, bucketing_key, split_name, treatment, params @unique_keys_tracker.track(split_name, matching_key) else # In OPTIMIZED mode we should track the total amount of evaluations and deduplicate the impressions. impression_data[:pt] = @impression_observer.test_and_set(impression_data) - @impression_counter.inc(split_name, impression_data[:m]) + + @impression_counter.inc(split_name, impression_data[:m]) if impression_data[:pt] != nil end rescue StandardError => e @config.log_found_exception(__method__.to_s, e) diff --git a/lib/splitclient-rb/split_config.rb b/lib/splitclient-rb/split_config.rb index 22508cbd..637c2203 100644 --- a/lib/splitclient-rb/split_config.rb +++ b/lib/splitclient-rb/split_config.rb @@ -310,20 +310,29 @@ def self.default_on_demand_fetch_max_retries 10 end - def self.default_impressions_mode - :optimized - end - def init_impressions_mode(impressions_mode, adapter) - impressions_mode ||= SplitConfig.default_impressions_mode + if adapter == :redis + impressions_mode ||= :debug + + case impressions_mode + when :optimized + return :optimized + when :none + return :none + else + @logger.error('You passed an invalid impressions_mode, impressions_mode should be one of the following values: :debug or :optimized. Defaulting to :optimized mode') unless impressions_mode == :optimized + return :debug + end + end return :debug if adapter == :redis + impressions_mode ||= :optimized case impressions_mode when :debug return :debug - # when :none // we not support :none impression mode yet. Defaulting to :optimized mode - # return :none + when :none + return :none else @logger.error('You passed an invalid impressions_mode, impressions_mode should be one of the following values: :debug or :optimized. Defaulting to :optimized mode') unless impressions_mode == :optimized return :optimized diff --git a/lib/splitclient-rb/version.rb b/lib/splitclient-rb/version.rb index 516fd124..ee1b92c6 100644 --- a/lib/splitclient-rb/version.rb +++ b/lib/splitclient-rb/version.rb @@ -1,3 +1,3 @@ module SplitIoClient - VERSION = '8.0.1' + VERSION = '8.1.0.pre.rc1' end diff --git a/spec/cache/senders/impressions_sender_adapter_spec.rb b/spec/cache/senders/impressions_sender_adapter_spec.rb index 5b7c9c11..03e99eca 100644 --- a/spec/cache/senders/impressions_sender_adapter_spec.rb +++ b/spec/cache/senders/impressions_sender_adapter_spec.rb @@ -22,10 +22,18 @@ sender.record_uniques_key(uniques) result = config.cache_adapter.get_from_queue(unique_keys_key, 0) - expect(result.size).to eq(3) - expect(result[0]).to eq('{:f=>"feature-name-1", :k=>["key-1", "key-2", "key-3", "key-4"]}') - expect(result[1]).to eq('{:f=>"feature-name-2", :k=>["key-1", "key-2", "key-3", "key-4"]}') - expect(result[2]).to eq('{:f=>"feature-name-3", :k=>["key-1", "key-2", "key-3", "key-4"]}') + + expect(result.size).to eq(1) + data = JSON.parse(result[0], symbolize_names: true) + + expect(data[0][:f]).to eq('feature-name-1') + expect(data[0][:k].to_s).to eq('["key-1", "key-2", "key-3", "key-4"]') + + expect(data[1][:f]).to eq('feature-name-2') + expect(data[1][:k].to_s).to eq('["key-1", "key-2", "key-3", "key-4"]') + + expect(data[2][:f]).to eq('feature-name-3') + expect(data[2][:k].to_s).to eq('["key-1", "key-2", "key-3", "key-4"]') end it 'record_uniques_key when uniques is nil or empty' do diff --git a/spec/engine/impressions/redis_unique_keys_tracker_spec.rb b/spec/engine/impressions/redis_unique_keys_tracker_spec.rb index da307241..06e81d22 100644 --- a/spec/engine/impressions/redis_unique_keys_tracker_spec.rb +++ b/spec/engine/impressions/redis_unique_keys_tracker_spec.rb @@ -35,7 +35,13 @@ expect(tracker.track("feature-test-#{i}", 'key_test-2')).to eq(true) end - expect(config.cache_adapter.get_from_queue(key, 0).size).to eq(20) + result = config.cache_adapter.get_from_queue(key, 0) + expect(result.size).to eq(10) + + 10.times do |i| + data = JSON.parse(result[i], symbolize_names: true) + expect(data.size).to eq(2) + end cache.clear end @@ -56,7 +62,13 @@ sleep 1 - expect(config.cache_adapter.get_from_queue(key, 0).size).to eq(10) + result = config.cache_adapter.get_from_queue(key, 0) + expect(result.size).to eq(1) + + 10.times do |i| + data = JSON.parse(result[0], symbolize_names: true) + expect(data.size).to eq(10) + end cache.clear end diff --git a/spec/integrations/dedupe_impression_spec.rb b/spec/integrations/dedupe_impression_spec.rb index dfa61715..312b7c6d 100644 --- a/spec/integrations/dedupe_impression_spec.rb +++ b/spec/integrations/dedupe_impression_spec.rb @@ -98,8 +98,8 @@ .with( body: { pf: [ - { f: 'FACUNDO_TEST', m: time_frame, rc: 3 }, - { f: 'Test_Save_1', m: time_frame, rc: 2 } + { f: 'FACUNDO_TEST', m: time_frame, rc: 1 }, + { f: 'Test_Save_1', m: time_frame, rc: 1 } ] }.to_json )).to have_been_made @@ -120,6 +120,7 @@ client.get_treatments('admin', %w[FACUNDO_TEST MAURO_TEST Test_Save_1]) client.get_treatments('maldo', %w[FACUNDO_TEST Test_Save_1]) client.get_treatments('nico_test', %w[FACUNDO_TEST MAURO_TEST Test_Save_1]) + client.get_treatments('nico_test', %w[FACUNDO_TEST MAURO_TEST Test_Save_1]) time_frame = SplitIoClient::Engine::Common::ImpressionCounter.truncate_time_frame((Time.now.to_f * 1000.0).to_i) @@ -130,9 +131,9 @@ .with( body: { pf: [ - { f: 'FACUNDO_TEST', m: time_frame, rc: 4 }, - { f: 'MAURO_TEST', m: time_frame, rc: 3 }, - { f: 'Test_Save_1', m: time_frame, rc: 4 } + { f: 'FACUNDO_TEST', m: time_frame, rc: 2 }, + { f: 'MAURO_TEST', m: time_frame, rc: 2 }, + { f: 'Test_Save_1', m: time_frame, rc: 2 } ] }.to_json )).to have_been_made From 9d6c626d804453d48ca73f963d63a5c1acfe2f53 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Mon, 3 Oct 2022 17:53:43 -0300 Subject: [PATCH 2/8] fixed rubocop --- lib/splitclient-rb/engine/common/impressions_manager.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/splitclient-rb/engine/common/impressions_manager.rb b/lib/splitclient-rb/engine/common/impressions_manager.rb index 5d9db724..a4cfb208 100644 --- a/lib/splitclient-rb/engine/common/impressions_manager.rb +++ b/lib/splitclient-rb/engine/common/impressions_manager.rb @@ -31,7 +31,7 @@ def build_impression(matching_key, bucketing_key, split_name, treatment, params else # In OPTIMIZED mode we should track the total amount of evaluations and deduplicate the impressions. impression_data[:pt] = @impression_observer.test_and_set(impression_data) - @impression_counter.inc(split_name, impression_data[:m]) if impression_data[:pt] != nil + @impression_counter.inc(split_name, impression_data[:m]) unless impression_data[:pt].nil? end rescue StandardError => e @config.log_found_exception(__method__.to_s, e) From 3ffed6dee01c0a9a6fb3807cd4466eb55311a093 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Mon, 3 Oct 2022 18:37:59 -0300 Subject: [PATCH 3/8] updated changes.txt --- CHANGES.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index a653cbbe..2cb190ba 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ CHANGES 8.1.0 (Oct 3, 2022) -- +- Added a new impressions mode for the SDK called NONE , to be used in factory when there is no desire to capture impressions on an SDK factory to feed Split's analytics engine. Running NONE mode, the SDK will only capture unique keys evaluated for a particular feature flag instead of full blown impressions. 8.0.1 (Jul 20, 2022) - Updated dependencies to support faraday > 2.0 @@ -52,9 +52,10 @@ CHANGES - Updated ably error handling. 7.2.0 (Sep 25, 2020) -- Added deduplication logic for impressions data. - - 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. - - Impression listener remains unchanged and will still get all impressions. +- Added impressions dedupe logic to avoid sending duplicated impressions: + - Added `OPTIMIZED` and `DEBUG` modes in order to enabling/disabling how impressions are going to be sent into Split servers, + - `OPTIMIZED`: will send unique impressions in a timeframe in order to reduce how many times impressions are posted to Split. + - `DEBUG`: will send every impression generated to Split. 7.1.3 (Jul 31, 2020) - Updated rake development dependency to ~> 12.3.3. From ebfd5b579a4661183d01bae1290992061efa7f1d Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Tue, 4 Oct 2022 16:21:58 -0300 Subject: [PATCH 4/8] pr feedback --- lib/splitclient-rb/split_config.rb | 28 +++++++-------------------- spec/splitclient/split_config_spec.rb | 10 ++++++++++ 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/lib/splitclient-rb/split_config.rb b/lib/splitclient-rb/split_config.rb index 637c2203..486f64ab 100644 --- a/lib/splitclient-rb/split_config.rb +++ b/lib/splitclient-rb/split_config.rb @@ -311,31 +311,17 @@ def self.default_on_demand_fetch_max_retries end def init_impressions_mode(impressions_mode, adapter) - if adapter == :redis - impressions_mode ||= :debug - - case impressions_mode - when :optimized - return :optimized - when :none - return :none - else - @logger.error('You passed an invalid impressions_mode, impressions_mode should be one of the following values: :debug or :optimized. Defaulting to :optimized mode') unless impressions_mode == :optimized - return :debug - end - end - - return :debug if adapter == :redis - - impressions_mode ||= :optimized case impressions_mode - when :debug - return :debug + when :optimized + return :optimized when :none return :none + when :debug + return :debug else - @logger.error('You passed an invalid impressions_mode, impressions_mode should be one of the following values: :debug or :optimized. Defaulting to :optimized mode') unless impressions_mode == :optimized - return :optimized + default = adapter == :redis ? :debug : :optimized + @logger.error("You passed an invalid impressions_mode, impressions_mode should be one of the following values: :debug, :optimized or :none. Defaulting to #{default} mode") + return default end end diff --git a/spec/splitclient/split_config_spec.rb b/spec/splitclient/split_config_spec.rb index 8c5542fa..c1f2f758 100644 --- a/spec/splitclient/split_config_spec.rb +++ b/spec/splitclient/split_config_spec.rb @@ -113,6 +113,16 @@ configs3 = SplitIoClient::SplitConfig.new(options3) expect(configs3.impressions_mode).to eq(:optimized) + + options4 = { impressions_mode: :sarasa, cache_adapter: :redis } + configs4 = SplitIoClient::SplitConfig.new(options4) + + expect(configs4.impressions_mode).to eq(:debug) + + options5 = { impressions_mode: :optimized, cache_adapter: :redis } + configs5 = SplitIoClient::SplitConfig.new(options5) + + expect(configs5.impressions_mode).to eq(:optimized) end it 'set impressions refresh rate with impressions optimized mode' do From 6c958f64ca4b7eec20466e494667d4005ca08b54 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Tue, 4 Oct 2022 16:27:05 -0300 Subject: [PATCH 5/8] updated release date --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 2cb190ba..6893f58c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ CHANGES -8.1.0 (Oct 3, 2022) +8.1.0 (Oct 4, 2022) - Added a new impressions mode for the SDK called NONE , to be used in factory when there is no desire to capture impressions on an SDK factory to feed Split's analytics engine. Running NONE mode, the SDK will only capture unique keys evaluated for a particular feature flag instead of full blown impressions. 8.0.1 (Jul 20, 2022) From 156527674252ef96b266524e4e872710cb5365a2 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Tue, 4 Oct 2022 16:54:16 -0300 Subject: [PATCH 6/8] stable version --- lib/splitclient-rb/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/splitclient-rb/version.rb b/lib/splitclient-rb/version.rb index ee1b92c6..88b820b4 100644 --- a/lib/splitclient-rb/version.rb +++ b/lib/splitclient-rb/version.rb @@ -1,3 +1,3 @@ module SplitIoClient - VERSION = '8.1.0.pre.rc1' + VERSION = '8.1.0' end From f84808596a320844979f9617b49f08392a9d827d Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Wed, 5 Oct 2022 12:14:32 -0300 Subject: [PATCH 7/8] updated refresh rate --- lib/splitclient-rb/split_config.rb | 2 +- spec/splitclient/split_config_spec.rb | 4 ++-- spec/telemetry/synchronizer_spec.rb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/splitclient-rb/split_config.rb b/lib/splitclient-rb/split_config.rb index 486f64ab..4012d57e 100644 --- a/lib/splitclient-rb/split_config.rb +++ b/lib/splitclient-rb/split_config.rb @@ -450,7 +450,7 @@ def self.default_connection_timeout end def self.default_features_refresh_rate - 5 + 60 end def self.default_segments_refresh_rate diff --git a/spec/splitclient/split_config_spec.rb b/spec/splitclient/split_config_spec.rb index c1f2f758..598587e8 100644 --- a/spec/splitclient/split_config_spec.rb +++ b/spec/splitclient/split_config_spec.rb @@ -54,7 +54,7 @@ expect(configs.connection_timeout).to eq 5 expect(configs.read_timeout).to eq 5 - expect(configs.features_refresh_rate).to eq 5 + expect(configs.features_refresh_rate).to eq 60 expect(configs.segments_refresh_rate).to eq 60 expect(configs.impressions_refresh_rate).to eq 300 expect(configs.impressions_queue_size).to eq 5000 @@ -65,7 +65,7 @@ expect(configs.connection_timeout).to eq 5 expect(configs.read_timeout).to eq 5 - expect(configs.features_refresh_rate).to eq 5 + expect(configs.features_refresh_rate).to eq 60 expect(configs.segments_refresh_rate).to eq 60 expect(configs.impressions_refresh_rate).to eq 60 expect(configs.impressions_queue_size).to eq 5000 diff --git a/spec/telemetry/synchronizer_spec.rb b/spec/telemetry/synchronizer_spec.rb index 31c14281..48c5acfb 100644 --- a/spec/telemetry/synchronizer_spec.rb +++ b/spec/telemetry/synchronizer_spec.rb @@ -45,8 +45,8 @@ let(:body_usage) { "{\"lS\":{\"sp\":111111222,\"se\":111111222,\"im\":111111222,\"ic\":111111222,\"ev\":111111222,\"te\":111111222,\"to\":111111222},\"mL\":{\"t\":[0,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"ts\":[0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"tc\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"tcs\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"tr\":[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},\"mE\":{\"t\":2,\"ts\":1,\"tc\":1,\"tcs\":0,\"tr\":1},\"hE\":{\"sp\":{},\"se\":{\"400\":1},\"im\":{},\"ic\":{},\"ev\":{\"500\":2,\"501\":1},\"te\":{},\"to\":{}},\"hL\":{\"sp\":[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"se\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"im\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"ic\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"ev\":[0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"te\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"to\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},\"tR\":1,\"aR\":1,\"iQ\":3,\"iDe\":1,\"iDr\":2,\"spC\":3,\"seC\":3,\"skC\":7,\"sL\":444555,\"eQ\":4,\"eD\":1,\"sE\":[{\"e\":50,\"d\":222222333,\"t\":222222333},{\"e\":70,\"d\":0,\"t\":222222333},{\"e\":70,\"d\":1,\"t\":222222333}],\"t\":[\"tag-1\",\"tag-2\"]}" } let(:empty_body_usage) { "{\"lS\":{\"sp\":0,\"se\":0,\"im\":0,\"ic\":0,\"ev\":0,\"te\":0,\"to\":0},\"mL\":{\"t\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"ts\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"tc\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"tcs\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"tr\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},\"mE\":{\"t\":0,\"ts\":0,\"tc\":0,\"tcs\":0,\"tr\":0},\"hE\":{\"sp\":{},\"se\":{},\"im\":{},\"ic\":{},\"ev\":{},\"te\":{},\"to\":{}},\"hL\":{\"sp\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"se\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"im\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"ic\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"ev\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"te\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"to\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},\"tR\":0,\"aR\":0,\"iQ\":0,\"iDe\":0,\"iDr\":0,\"spC\":0,\"seC\":0,\"skC\":0,\"sL\":0,\"eQ\":0,\"eD\":0,\"sE\":[],\"t\":[]}" } let(:body_custom_config) { "{\"oM\":0,\"sE\":true,\"st\":\"memory\",\"rR\":{\"sp\":100,\"se\":110,\"im\":120,\"ev\":130,\"te\":140},\"iQ\":5000,\"eQ\":500,\"iM\":0,\"uO\":{\"s\":true,\"e\":true,\"a\":true,\"st\":false,\"t\":false},\"iL\":false,\"hP\":false,\"aF\":1,\"rF\":1,\"tR\":100,\"bT\":2,\"nR\":1,\"t\":[],\"i\":null}" } - let(:body_default_config) { "{\"oM\":0,\"sE\":true,\"st\":\"memory\",\"rR\":{\"sp\":5,\"se\":60,\"im\":300,\"ev\":60,\"te\":3600},\"iQ\":5000,\"eQ\":500,\"iM\":0,\"uO\":{\"s\":false,\"e\":false,\"a\":false,\"st\":false,\"t\":false},\"iL\":false,\"hP\":false,\"aF\":1,\"rF\":1,\"tR\":500,\"bT\":0,\"nR\":0,\"t\":[],\"i\":null}" } - let(:body_proxy_config) { "{\"oM\":0,\"sE\":true,\"st\":\"memory\",\"rR\":{\"sp\":5,\"se\":60,\"im\":300,\"ev\":60,\"te\":3600},\"iQ\":5000,\"eQ\":500,\"iM\":0,\"uO\":{\"s\":false,\"e\":false,\"a\":false,\"st\":false,\"t\":false},\"iL\":false,\"hP\":true,\"aF\":1,\"rF\":1,\"tR\":500,\"bT\":0,\"nR\":0,\"t\":[],\"i\":null}" } + let(:body_default_config) { "{\"oM\":0,\"sE\":true,\"st\":\"memory\",\"rR\":{\"sp\":60,\"se\":60,\"im\":300,\"ev\":60,\"te\":3600},\"iQ\":5000,\"eQ\":500,\"iM\":0,\"uO\":{\"s\":false,\"e\":false,\"a\":false,\"st\":false,\"t\":false},\"iL\":false,\"hP\":false,\"aF\":1,\"rF\":1,\"tR\":500,\"bT\":0,\"nR\":0,\"t\":[],\"i\":null}" } + let(:body_proxy_config) { "{\"oM\":0,\"sE\":true,\"st\":\"memory\",\"rR\":{\"sp\":60,\"se\":60,\"im\":300,\"ev\":60,\"te\":3600},\"iQ\":5000,\"eQ\":500,\"iM\":0,\"uO\":{\"s\":false,\"e\":false,\"a\":false,\"st\":false,\"t\":false},\"iL\":false,\"hP\":true,\"aF\":1,\"rF\":1,\"tR\":500,\"bT\":0,\"nR\":0,\"t\":[],\"i\":null}" } context 'synchronize_stats' do before do From 1ca830d24a1440014291b48b725f1052e306b1c8 Mon Sep 17 00:00:00 2001 From: Mauro Antonio Sanz Date: Wed, 5 Oct 2022 12:15:10 -0300 Subject: [PATCH 8/8] updated release date --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6893f58c..d791775a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ CHANGES -8.1.0 (Oct 4, 2022) +8.1.0 (Oct 5, 2022) - Added a new impressions mode for the SDK called NONE , to be used in factory when there is no desire to capture impressions on an SDK factory to feed Split's analytics engine. Running NONE mode, the SDK will only capture unique keys evaluated for a particular feature flag instead of full blown impressions. 8.0.1 (Jul 20, 2022)