splitclient-rb 7.1.4.pre.rc15 → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39c8f9ba8b6485789a6cabceb19f0d9ae838f66a30e5d24b1cdc7fc6fb48ae67
4
- data.tar.gz: 3d156718308ad5c79ec904b12ee9d35620eb83cce1b207262412d7a29c8ef7f6
3
+ metadata.gz: d5a8bad0b7b72fba188bff72b10b5a0849bdadabdde484929b83071a51cfe715
4
+ data.tar.gz: 27b74c33b6fbe6c87141bf163f1dbd8d37eaa586d8c60eb73319cbcb7e3cc85e
5
5
  SHA512:
6
- metadata.gz: faf6ea58b3c564fd6c625f2558006bd668be5feb672cc436860c9c6f273f7596910cd28aceff64888993997ab6357e7654c68e1bfc238759ba28fc33dd132cff
7
- data.tar.gz: cbb6c2efa42812ca03dd069f25653ce939450db32533d279260cfca6d192fa80cd62fd96548f7b164c4ffab468558446706f4781e691649a69fd9af3d876d5b9
6
+ metadata.gz: 0db37fb36974d3b177b3b4b08d35199bf828b8c4ebc508731e1255c44c08f9be2953174e6dbb3b1a2d514f880845b0abefd300061ad9b77e72745a867b930dc4
7
+ data.tar.gz: 0d66fc9a82f117ed7ccc4e391aa59827ed024d34d3082472dab54d6c3cacd57357c01af6eb6becb69f8a0dabc12cc51258e0e7a852fbfc9c82d414eb1ad1d40b
@@ -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
- @queue.push(impression) if @listener
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 truncate_time_frame(timestamp_ms)
36
- timestamp_ms - (timestamp_ms % TIME_INTERVAL_MS)
35
+ def make_key(split_name, time_frame)
36
+ "#{split_name}::#{ImpressionCounter.truncate_time_frame(time_frame)}"
37
37
  end
38
38
 
39
- def make_key(split_name, time_frame)
40
- "#{split_name}::#{truncate_time_frame(time_frame)}"
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
- return impression_optimized(split_name, impression_data, params[:attributes]) if optimized? && !redis?
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
- @impressions_repository.add_bulk(impressions)
33
- @impression_router.add_bulk(impressions)
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? || (impression[:pt] < ((Time.now.to_f * 1000.0).to_i - Common::TIME_INTERVAL_MS))
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
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '7.1.4.pre.rc15'
2
+ VERSION = '7.2.0'
3
3
  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.1.4.pre.rc15
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-21 00:00:00.000000000 Z
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: 1.3.1
459
+ version: '0'
460
460
  requirements: []
461
461
  rubygems_version: 3.0.6
462
462
  signing_key: