From 5e15875a4cdc3926ac2cc2e031aaa47f2ce94bce Mon Sep 17 00:00:00 2001 From: Mauro Sanz Date: Mon, 14 Sep 2020 17:33:37 -0300 Subject: [PATCH 1/2] updated dto and tests --- .../cache/senders/impressions_formatter.rb | 18 ++-- lib/splitclient-rb/engine/api/impressions.rb | 2 +- .../senders/impressions_formatter_spec.rb | 85 ++++++++++--------- spec/cache/senders/impressions_sender_spec.rb | 36 ++++---- spec/engine/api/impressions_spec.rb | 2 +- spec/engine_spec.rb | 2 +- 6 files changed, 73 insertions(+), 72 deletions(-) diff --git a/lib/splitclient-rb/cache/senders/impressions_formatter.rb b/lib/splitclient-rb/cache/senders/impressions_formatter.rb index 41871cab..6d9efce5 100644 --- a/lib/splitclient-rb/cache/senders/impressions_formatter.rb +++ b/lib/splitclient-rb/cache/senders/impressions_formatter.rb @@ -20,8 +20,8 @@ def call(fetch_all_impressions, raw_impressions = nil) ip = feature_impressions.first[:m][:i] current_impressions = current_impressions(feature_impressions) memo << { - testName: feature.to_sym, - keyImpressions: current_impressions, + f: feature.to_sym, + i: current_impressions, ip: ip } end @@ -40,13 +40,13 @@ def feature_impressions(filtered_impressions, feature) def current_impressions(feature_impressions) feature_impressions.map do |impression| { - keyName: impression[:i][:k], - treatment: impression[:i][:t], - time: impression[:i][:m], - bucketingKey: impression[:i][:b], - label: impression[:i][:r], - changeNumber: impression[:i][:c], - previousTime: impression[:i][:pt] + k: impression[:i][:k], + t: impression[:i][:t], + m: impression[:i][:m], + b: impression[:i][:b], + r: impression[:i][:r], + c: impression[:i][:c], + pt: impression[:i][:pt] } end end diff --git a/lib/splitclient-rb/engine/api/impressions.rb b/lib/splitclient-rb/engine/api/impressions.rb index eb9c2716..3a63d1fc 100644 --- a/lib/splitclient-rb/engine/api/impressions.rb +++ b/lib/splitclient-rb/engine/api/impressions.rb @@ -31,7 +31,7 @@ def total_impressions(impressions) return 0 if impressions.nil? impressions.reduce(0) do |impressions_count, impression| - impressions_count += impression[:keyImpressions].length + impressions_count += impression[:i].length end end diff --git a/spec/cache/senders/impressions_formatter_spec.rb b/spec/cache/senders/impressions_formatter_spec.rb index 329d4c0c..75689c4c 100644 --- a/spec/cache/senders/impressions_formatter_spec.rb +++ b/spec/cache/senders/impressions_formatter_spec.rb @@ -28,24 +28,25 @@ it 'formats impressions to be sent' do expect(formatted_impressions) .to match_array([{ - testName: :foo1, - keyImpressions: [{ keyName: 'matching_key', - treatment: 'on', - time: 1_478_113_516_002, - bucketingKey: 'foo1', label: 'custom_label1', - changeNumber: 123_456, - previousTime: nil }], + f: :foo1, + i: [{ k: 'matching_key', + t: 'on', + m: 1_478_113_516_002, + b: 'foo1', + r: 'custom_label1', + c: 123_456, + pt: nil }], ip: ip }, { - testName: :foo2, - keyImpressions: [{ keyName: 'matching_key2', - treatment: 'off', - time: 1_478_113_518_285, - bucketingKey: 'foo2', - label: 'custom_label2', - changeNumber: 123_499, - previousTime: nil }], + f: :foo2, + i: [{ k: 'matching_key2', + t: 'off', + m: 1_478_113_518_285, + b: 'foo2', + r: 'custom_label2', + c: 123_499, + pt: nil }], ip: ip }]) end @@ -56,39 +57,39 @@ impressions << impressions_manager.build_impression('matching_key3', nil, 'foo2', treatment3, params) impressions_manager.track(impressions) - expect(formatted_impressions.find { |i| i[:testName] == :foo1 }[:keyImpressions]).to match_array( + expect(formatted_impressions.find { |i| i[:f] == :foo1 }[:i]).to match_array( [ { - keyName: 'matching_key', - treatment: 'on', - time: 1_478_113_516_002, - bucketingKey: 'foo1', - label: 'custom_label1', - changeNumber: 123_456, - previousTime: nil + k: 'matching_key', + t: 'on', + m: 1_478_113_516_002, + b: 'foo1', + r: 'custom_label1', + c: 123_456, + pt: nil } ] ) - expect(formatted_impressions.find { |i| i[:testName] == :foo2 }[:keyImpressions]).to match_array( + expect(formatted_impressions.find { |i| i[:f] == :foo2 }[:i]).to match_array( [ { - keyName: 'matching_key2', - treatment: 'off', - time: 1_478_113_518_285, - bucketingKey: 'foo2', - label: 'custom_label2', - changeNumber: 123_499, - previousTime: nil + k: 'matching_key2', + t: 'off', + m: 1_478_113_518_285, + b: 'foo2', + r: 'custom_label2', + c: 123_499, + pt: nil }, { - keyName: 'matching_key3', - treatment: 'off', - time: 1_478_113_518_900, - bucketingKey: nil, - label: nil, - changeNumber: nil, - previousTime: nil + k: 'matching_key3', + t: 'off', + m: 1_478_113_518_900, + b: nil, + r: nil, + c: nil, + pt: nil } ] ) @@ -97,15 +98,15 @@ it 'filters out impressions with the same key/treatment' do impressions_manager.track(@impressions) - expect(formatted_impressions.find { |i| i[:testName] == :foo1 }[:keyImpressions].size).to eq(1) - expect(formatted_impressions.find { |i| i[:testName] == :foo2 }[:keyImpressions].size).to eq(1) + expect(formatted_impressions.find { |i| i[:f] == :foo1 }[:i].size).to eq(1) + expect(formatted_impressions.find { |i| i[:f] == :foo2 }[:i].size).to eq(1) end it 'filters out impressions with the same key/treatment legacy' do impressions_manager.track(@impressions) - expect(formatted_impressions.find { |i| i[:testName] == :foo1 }[:keyImpressions].size).to eq(1) - expect(formatted_impressions.find { |i| i[:testName] == :foo2 }[:keyImpressions].size).to eq(1) + expect(formatted_impressions.find { |i| i[:f] == :foo1 }[:i].size).to eq(1) + expect(formatted_impressions.find { |i| i[:f] == :foo2 }[:i].size).to eq(1) end end diff --git a/spec/cache/senders/impressions_sender_spec.rb b/spec/cache/senders/impressions_sender_spec.rb index dbb8dbcf..8e2a9912 100644 --- a/spec/cache/senders/impressions_sender_spec.rb +++ b/spec/cache/senders/impressions_sender_spec.rb @@ -42,31 +42,31 @@ .with( body: [ { - testName: 'foo1', - keyImpressions: [ + f: 'foo1', + i: [ { - keyName: 'matching_key', - treatment: 'on', - time: 1_478_113_516_002, - bucketingKey: 'foo1', - label: 'custom_label1', - changeNumber: 123_456, - previousTime: nil + k: 'matching_key', + t: 'on', + m: 1_478_113_516_002, + b: 'foo1', + r: 'custom_label1', + c: 123_456, + pt: nil } ], ip: config.machine_ip }, { - testName: 'foo2', - keyImpressions: [ + f: 'foo2', + i: [ { - keyName: 'matching_key2', - treatment: 'off', - time: 1_478_113_518_285, - bucketingKey: 'foo2', - label: 'custom_label2', - changeNumber: 123_499, - previousTime: nil + k: 'matching_key2', + t: 'off', + m: 1_478_113_518_285, + b: 'foo2', + r: 'custom_label2', + c: 123_499, + pt: nil } ], ip: config.machine_ip diff --git a/spec/engine/api/impressions_spec.rb b/spec/engine/api/impressions_spec.rb index 2274ed86..7ff51f72 100644 --- a/spec/engine/api/impressions_spec.rb +++ b/spec/engine/api/impressions_spec.rb @@ -16,7 +16,7 @@ [ { ip: '192.168.1.1', - keyImpressions: ['test'] + i: ['test'] } ] end diff --git a/spec/engine_spec.rb b/spec/engine_spec.rb index 1843b9cf..4e1548b1 100644 --- a/spec/engine_spec.rb +++ b/spec/engine_spec.rb @@ -473,7 +473,7 @@ expect(SplitIoClient::Cache::Senders::ImpressionsFormatter .new(subject.instance_variable_get(:@impressions_repository)) .call(true, impressions) - .select { |im| im[:testName] == :new_feature }[0][:keyImpressions].size).to eq(2) + .select { |im| im[:f] == :new_feature }[0][:i].size).to eq(2) end it 'validates the feature by bucketing_key' do From 019999c6e1dd4993bb09d1c7c409a707e29eca8d Mon Sep 17 00:00:00 2001 From: Mauro Sanz Date: Mon, 14 Sep 2020 18:39:21 -0300 Subject: [PATCH 2/2] added header and removed ip logic --- .../cache/senders/impressions_formatter.rb | 4 +-- lib/splitclient-rb/engine/api/impressions.rb | 25 +++++++++---------- .../senders/impressions_formatter_spec.rb | 6 ++--- spec/cache/senders/impressions_sender_spec.rb | 6 ++--- spec/engine/api/impressions_spec.rb | 9 ++++--- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/lib/splitclient-rb/cache/senders/impressions_formatter.rb b/lib/splitclient-rb/cache/senders/impressions_formatter.rb index 6d9efce5..b2f1de95 100644 --- a/lib/splitclient-rb/cache/senders/impressions_formatter.rb +++ b/lib/splitclient-rb/cache/senders/impressions_formatter.rb @@ -17,12 +17,10 @@ def call(fetch_all_impressions, raw_impressions = nil) formatted_impressions = unique_features(filtered_impressions).each_with_object([]) do |feature, memo| feature_impressions = feature_impressions(filtered_impressions, feature) - ip = feature_impressions.first[:m][:i] current_impressions = current_impressions(feature_impressions) memo << { f: feature.to_sym, - i: current_impressions, - ip: ip + i: current_impressions } end diff --git a/lib/splitclient-rb/engine/api/impressions.rb b/lib/splitclient-rb/engine/api/impressions.rb index 3a63d1fc..126ab28b 100644 --- a/lib/splitclient-rb/engine/api/impressions.rb +++ b/lib/splitclient-rb/engine/api/impressions.rb @@ -14,16 +14,14 @@ def post(impressions) return end - impressions_by_ip(impressions).each do |ip, impressions_ip| - response = post_api("#{@config.events_uri}/testImpressions/bulk", @api_key, impressions_ip) - - if response.success? - @config.split_logger.log_if_debug("Impressions reported: #{total_impressions(impressions)}") - else - @config.logger.error("Unexpected status code while posting impressions: #{response.status}." \ - ' - Check your API key and base URI') - raise 'Split SDK failed to connect to backend to post impressions' - end + response = post_api("#{@config.events_uri}/testImpressions/bulk", @api_key, impressions, impressions_headers) + + if response.success? + @config.split_logger.log_if_debug("Impressions reported: #{total_impressions(impressions)}") + else + @config.logger.error("Unexpected status code while posting impressions: #{response.status}." \ + ' - Check your API key and base URI') + raise 'Split SDK failed to connect to backend to post impressions' end end @@ -36,9 +34,10 @@ def total_impressions(impressions) end private - - def impressions_by_ip(impressions) - impressions.group_by { |impression| impression[:ip] } + def impressions_headers + { + 'SplitImpressionsMode' => @config.impressions_mode.to_s + } end end end diff --git a/spec/cache/senders/impressions_formatter_spec.rb b/spec/cache/senders/impressions_formatter_spec.rb index 75689c4c..b6b35ab0 100644 --- a/spec/cache/senders/impressions_formatter_spec.rb +++ b/spec/cache/senders/impressions_formatter_spec.rb @@ -35,8 +35,7 @@ b: 'foo1', r: 'custom_label1', c: 123_456, - pt: nil }], - ip: ip + pt: nil }] }, { f: :foo2, @@ -46,8 +45,7 @@ b: 'foo2', r: 'custom_label2', c: 123_499, - pt: nil }], - ip: ip + pt: nil }] }]) end diff --git a/spec/cache/senders/impressions_sender_spec.rb b/spec/cache/senders/impressions_sender_spec.rb index 8e2a9912..37acef4c 100644 --- a/spec/cache/senders/impressions_sender_spec.rb +++ b/spec/cache/senders/impressions_sender_spec.rb @@ -53,8 +53,7 @@ c: 123_456, pt: nil } - ], - ip: config.machine_ip + ] }, { f: 'foo2', @@ -68,8 +67,7 @@ c: 123_499, pt: nil } - ], - ip: config.machine_ip + ] } ].to_json )).to have_been_made diff --git a/spec/engine/api/impressions_spec.rb b/spec/engine/api/impressions_spec.rb index 7ff51f72..428c32f8 100644 --- a/spec/engine/api/impressions_spec.rb +++ b/spec/engine/api/impressions_spec.rb @@ -29,7 +29,8 @@ 'SplitSDKVersion' => "#{config.language}-#{config.version}", 'Content-Type' => 'application/json', 'SplitSDKMachineIP' => config.machine_ip, - 'SplitSDKMachineName' => config.machine_name + 'SplitSDKMachineName' => config.machine_name, + 'SplitImpressionsMode' => config.impressions_mode.to_s }) .to_return(status: 200, body: 'ok') @@ -82,7 +83,8 @@ 'SplitSDKVersion' => "#{config.language}-#{config.version}", 'Content-Type' => 'application/json', 'SplitSDKMachineIP' => config.machine_ip, - 'SplitSDKMachineName' => config.machine_name + 'SplitSDKMachineName' => config.machine_name, + 'SplitImpressionsMode' => config.impressions_mode.to_s }) .to_return(status: [500, 'Internal Server Error']) @@ -90,7 +92,8 @@ .with(headers: { 'Authorization' => 'Bearer', 'SplitSDKVersion' => "#{config.language}-#{config.version}", - 'Content-Type' => 'application/json' + 'Content-Type' => 'application/json', + 'SplitImpressionsMode' => config.impressions_mode.to_s }) .to_return(status: 200, body: 'ok')