splitclient-rb 7.1.4.pre.rc7 → 7.1.4.pre.rc8

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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.txt +1 -1
  3. data/Rakefile +7 -2
  4. data/ext/murmurhash/3_x64_128.c +117 -0
  5. data/ext/murmurhash/3_x86_32.c +88 -0
  6. data/ext/murmurhash/extconf.rb +5 -0
  7. data/ext/murmurhash/murmurhash.c +255 -0
  8. data/ext/murmurhash/murmurhash.h +94 -0
  9. data/lib/splitclient-rb.rb +6 -1
  10. data/lib/splitclient-rb/cache/hashers/impression_hasher.rb +34 -0
  11. data/lib/splitclient-rb/cache/observers/impression_observer.rb +22 -0
  12. data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +4 -18
  13. data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +7 -18
  14. data/lib/splitclient-rb/cache/repositories/impressions_repository.rb +1 -27
  15. data/lib/splitclient-rb/cache/routers/impression_router.rb +12 -14
  16. data/lib/splitclient-rb/cache/senders/impressions_count_sender.rb +73 -0
  17. data/lib/splitclient-rb/cache/senders/impressions_formatter.rb +11 -11
  18. data/lib/splitclient-rb/cache/senders/impressions_sender.rb +3 -3
  19. data/lib/splitclient-rb/clients/split_client.rb +24 -73
  20. data/lib/splitclient-rb/engine/api/impressions.rb +30 -13
  21. data/lib/splitclient-rb/engine/common/impressions_counter.rb +45 -0
  22. data/lib/splitclient-rb/engine/common/impressions_manager.rb +87 -0
  23. data/lib/splitclient-rb/engine/evaluator/splitter.rb +1 -5
  24. data/lib/splitclient-rb/engine/parser/evaluator.rb +0 -4
  25. data/lib/splitclient-rb/engine/sync_manager.rb +5 -6
  26. data/lib/splitclient-rb/engine/synchronizer.rb +9 -1
  27. data/lib/splitclient-rb/split_config.rb +31 -1
  28. data/lib/splitclient-rb/split_factory.rb +5 -2
  29. data/lib/splitclient-rb/version.rb +1 -1
  30. data/splitclient-rb.gemspec +8 -1
  31. metadata +14 -17
@@ -53,7 +53,9 @@ module SplitIoClient
53
53
  @segments_refresh_rate = opts[:segments_refresh_rate] || SplitConfig.default_segments_refresh_rate
54
54
  @metrics_refresh_rate = opts[:metrics_refresh_rate] || SplitConfig.default_metrics_refresh_rate
55
55
 
56
- @impressions_refresh_rate = opts[:impressions_refresh_rate] || SplitConfig.default_impressions_refresh_rate
56
+ @impressions_mode = init_impressions_mode(opts[:impressions_mode])
57
+
58
+ @impressions_refresh_rate = SplitConfig.init_impressions_refresh_rate(@impressions_mode, opts[:impressions_refresh_rate], SplitConfig.default_impressions_refresh_rate)
57
59
  @impressions_queue_size = opts[:impressions_queue_size] || SplitConfig.default_impressions_queue_size
58
60
  @impressions_adapter = SplitConfig.init_cache_adapter(
59
61
  opts[:cache_adapter] || SplitConfig.default_cache_adapter, :queue_adapter, @impressions_queue_size, @redis_url
@@ -270,6 +272,30 @@ module SplitIoClient
270
272
 
271
273
  attr_accessor :streaming_enabled
272
274
 
275
+ attr_accessor :impressions_mode
276
+
277
+ def self.default_impressions_mode
278
+ :optimized
279
+ end
280
+
281
+ def init_impressions_mode(impressions_mode)
282
+ impressions_mode ||= SplitConfig.default_impressions_mode
283
+
284
+ case impressions_mode
285
+ when :debug
286
+ return :debug
287
+ else
288
+ @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
289
+ return :optimized
290
+ end
291
+ end
292
+
293
+ def self.init_impressions_refresh_rate(impressions_mode, refresh_rate, default_rate)
294
+ return (refresh_rate.nil? || refresh_rate <= 0 ? default_rate : refresh_rate) if impressions_mode == :debug
295
+
296
+ return refresh_rate.nil? || refresh_rate <= 0 ? SplitConfig.default_impressions_refresh_rate_optimized : [default_rate, refresh_rate].max
297
+ end
298
+
273
299
  def self.default_streaming_enabled
274
300
  true
275
301
  end
@@ -387,6 +413,10 @@ module SplitIoClient
387
413
  60
388
414
  end
389
415
 
416
+ def self.default_impressions_refresh_rate_optimized
417
+ 300
418
+ end
419
+
390
420
  def self.default_impression_listener_refresh_rate
391
421
  0
392
422
  end
@@ -34,10 +34,12 @@ module SplitIoClient
34
34
  @metrics_repository = MetricsRepository.new(@config)
35
35
  @sdk_blocker = SDKBlocker.new(@splits_repository, @segments_repository, @config)
36
36
  @metrics = Metrics.new(100, @metrics_repository)
37
+ @impression_counter = SplitIoClient::Engine::Common::ImpressionCounter.new
38
+ @impressions_manager = SplitIoClient::Engine::Common::ImpressionManager.new(@config, @impressions_repository, @impression_counter)
37
39
 
38
40
  start!
39
41
 
40
- @client = SplitClient.new(@api_key, @metrics, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker, @config)
42
+ @client = SplitClient.new(@api_key, @metrics, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker, @config, @impressions_manager)
41
43
  @manager = SplitManager.new(@splits_repository, @sdk_blocker, @config)
42
44
 
43
45
  validate_api_key
@@ -51,7 +53,8 @@ module SplitIoClient
51
53
  if @config.localhost_mode
52
54
  start_localhost_components
53
55
  else
54
- SplitIoClient::Engine::SyncManager.new(repositories, @api_key, @config, @sdk_blocker, @metrics).start
56
+ params = { sdk_blocker: @sdk_blocker, metrics: @metrics, impression_counter: @impression_counter }
57
+ SplitIoClient::Engine::SyncManager.new(repositories, @api_key, @config, params).start
55
58
  end
56
59
  end
57
60
 
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '7.1.4.pre.rc7'
2
+ VERSION = '7.1.4.pre.rc8'
3
3
  end
@@ -26,7 +26,14 @@ Gem::Specification.new do |spec|
26
26
  lib/murmurhash/murmurhash.jar]
27
27
  )
28
28
  else
29
- spec.add_runtime_dependency 'digest-murmurhash', '>= 1.1.1'
29
+ spec.files.concat(
30
+ %w[ext/murmurhash/3_x86_32.c
31
+ ext/murmurhash/3_x64_128.c
32
+ ext/murmurhash/extconf.rb
33
+ ext/murmurhash/murmurhash.c
34
+ ext/murmurhash/murmurhash.h]
35
+ )
36
+ spec.extensions = ['ext/murmurhash/extconf.rb']
30
37
  end
31
38
 
32
39
  spec.add_development_dependency 'allocation_stats'
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: splitclient-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.4.pre.rc7
4
+ version: 7.1.4.pre.rc8
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-08-26 00:00:00.000000000 Z
11
+ date: 2020-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: digest-murmurhash
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.1.1
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 1.1.1
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: allocation_stats
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -322,7 +308,8 @@ description: Ruby client for using split SDK.
322
308
  email:
323
309
  - pato@split.io
324
310
  executables: []
325
- extensions: []
311
+ extensions:
312
+ - ext/murmurhash/extconf.rb
326
313
  extra_rdoc_files: []
327
314
  files:
328
315
  - ".github/pull_request_template.md"
@@ -337,6 +324,11 @@ files:
337
324
  - LICENSE
338
325
  - README.md
339
326
  - Rakefile
327
+ - ext/murmurhash/3_x64_128.c
328
+ - ext/murmurhash/3_x86_32.c
329
+ - ext/murmurhash/extconf.rb
330
+ - ext/murmurhash/murmurhash.c
331
+ - ext/murmurhash/murmurhash.h
340
332
  - gemfiles/faraday_after_0.13.gemfile
341
333
  - gemfiles/faraday_before_0.13.gemfile
342
334
  - lib/murmurhash/base.rb
@@ -350,6 +342,8 @@ files:
350
342
  - lib/splitclient-rb/cache/adapters/redis_adapter.rb
351
343
  - lib/splitclient-rb/cache/fetchers/segment_fetcher.rb
352
344
  - lib/splitclient-rb/cache/fetchers/split_fetcher.rb
345
+ - lib/splitclient-rb/cache/hashers/impression_hasher.rb
346
+ - lib/splitclient-rb/cache/observers/impression_observer.rb
353
347
  - lib/splitclient-rb/cache/repositories/events/memory_repository.rb
354
348
  - lib/splitclient-rb/cache/repositories/events/redis_repository.rb
355
349
  - lib/splitclient-rb/cache/repositories/events_repository.rb
@@ -364,6 +358,7 @@ files:
364
358
  - lib/splitclient-rb/cache/repositories/splits_repository.rb
365
359
  - lib/splitclient-rb/cache/routers/impression_router.rb
366
360
  - lib/splitclient-rb/cache/senders/events_sender.rb
361
+ - lib/splitclient-rb/cache/senders/impressions_count_sender.rb
367
362
  - lib/splitclient-rb/cache/senders/impressions_formatter.rb
368
363
  - lib/splitclient-rb/cache/senders/impressions_sender.rb
369
364
  - lib/splitclient-rb/cache/senders/localhost_repo_cleaner.rb
@@ -383,6 +378,8 @@ files:
383
378
  - lib/splitclient-rb/engine/api/segments.rb
384
379
  - lib/splitclient-rb/engine/api/splits.rb
385
380
  - lib/splitclient-rb/engine/auth_api_client.rb
381
+ - lib/splitclient-rb/engine/common/impressions_counter.rb
382
+ - lib/splitclient-rb/engine/common/impressions_manager.rb
386
383
  - lib/splitclient-rb/engine/evaluator/splitter.rb
387
384
  - lib/splitclient-rb/engine/matchers/all_keys_matcher.rb
388
385
  - lib/splitclient-rb/engine/matchers/between_matcher.rb