splitclient-rb 5.1.0 → 5.1.1.pre.rc1

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +9 -5
  4. data/Detailed-README.md +1 -1
  5. data/exe/splitio +6 -6
  6. data/lib/splitclient-rb/cache/repositories/events/memory_repository.rb +3 -4
  7. data/lib/splitclient-rb/cache/repositories/events/redis_repository.rb +1 -2
  8. data/lib/splitclient-rb/cache/repositories/events_repository.rb +6 -7
  9. data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +6 -7
  10. data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +9 -10
  11. data/lib/splitclient-rb/cache/repositories/impressions_repository.rb +3 -4
  12. data/lib/splitclient-rb/cache/repositories/metrics/memory_repository.rb +1 -3
  13. data/lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb +1 -2
  14. data/lib/splitclient-rb/cache/repositories/metrics_repository.rb +3 -4
  15. data/lib/splitclient-rb/cache/repositories/repository.rb +2 -2
  16. data/lib/splitclient-rb/cache/repositories/segments_repository.rb +1 -3
  17. data/lib/splitclient-rb/cache/repositories/splits_repository.rb +1 -3
  18. data/lib/splitclient-rb/cache/routers/impression_router.rb +4 -5
  19. data/lib/splitclient-rb/cache/senders/events_sender.rb +6 -7
  20. data/lib/splitclient-rb/cache/senders/impressions_sender.rb +8 -9
  21. data/lib/splitclient-rb/cache/senders/metrics_sender.rb +6 -7
  22. data/lib/splitclient-rb/cache/stores/sdk_blocker.rb +3 -4
  23. data/lib/splitclient-rb/cache/stores/segment_store.rb +11 -12
  24. data/lib/splitclient-rb/cache/stores/split_store.rb +12 -13
  25. data/lib/splitclient-rb/clients/localhost_split_client.rb +2 -2
  26. data/lib/splitclient-rb/clients/split_client.rb +15 -17
  27. data/lib/splitclient-rb/engine/api/client.rb +22 -22
  28. data/lib/splitclient-rb/engine/api/events.rb +6 -8
  29. data/lib/splitclient-rb/engine/api/impressions.rb +5 -6
  30. data/lib/splitclient-rb/engine/api/metrics.rb +8 -9
  31. data/lib/splitclient-rb/engine/api/segments.rb +2 -3
  32. data/lib/splitclient-rb/engine/api/splits.rb +2 -3
  33. data/lib/splitclient-rb/engine/metrics/metrics.rb +1 -4
  34. data/lib/splitclient-rb/engine/parser/split_adapter.rb +8 -10
  35. data/lib/splitclient-rb/managers/split_manager.rb +1 -2
  36. data/lib/splitclient-rb/split_config.rb +47 -38
  37. data/lib/splitclient-rb/split_factory.rb +13 -14
  38. data/lib/splitclient-rb/split_logger.rb +3 -8
  39. data/lib/splitclient-rb/version.rb +1 -1
  40. data/splitclient-rb.gemspec +1 -1
  41. metadata +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65f8f1fc2b395217192276c37c33ffe46385c426
4
- data.tar.gz: 1c6ab963759d9dfba5a4390cb37fd22aecd5e82b
3
+ metadata.gz: '0491f827ad5bfa50672fcb2d5562c39c09ab393b'
4
+ data.tar.gz: 80313b3db90dff3a9622ffceaa812257f585ca96
5
5
  SHA512:
6
- metadata.gz: 9c96b44c41046ada5f90fdb556e9d29af32ae22fda79649aff1fa415260a1fad655625d7d046a65de19d5a1da712fb505c4c0d8322087c00a8fa53334afe3918
7
- data.tar.gz: f64066085181b67f2c4efe20fd348b7629795e8607aec3672e8182d2ed9c229857fa654e1d2e57f573f2b8a1e9968a94e915065a9b0d10f842b7550dfda94c62
6
+ metadata.gz: 53e671060ebaca132ab4205d077b4dec7216f65a371b8c89715bbc45e59b5b8a980c3fd9629b9e97090f03798641c640632a142036eb3bf8602d13da4dc8fc35
7
+ data.tar.gz: 8fff61604c5e9aa89cc0057f4b199de34a12161305c8d806a2e9122e7fd1c0c2584b707948b3a0fafe358c5f3f5338858213f27b12e22087f051622f6b69ab16
data/.gitignore CHANGED
@@ -43,3 +43,6 @@ lib/murmurhash/murmurhash.so
43
43
 
44
44
  ext/murmurhash/murmurhash.bundle
45
45
  ext/murmurhash/murmurhash.so
46
+
47
+ #Ignore dump.rdb
48
+ dump.rdb
data/.rubocop.yml CHANGED
@@ -5,11 +5,15 @@ Metrics/LineLength:
5
5
  Max: 121
6
6
 
7
7
  Metrics/BlockLength:
8
- Exclude:
9
- - spec/**/*
10
- - splitclient-rb.gemspec
11
- - exe/splitio
8
+ Exclude:
9
+ - spec/**/*
10
+ - splitclient-rb.gemspec
11
+ - exe/splitio
12
+
13
+ Naming/FileName:
14
+ Exclude:
15
+ - splitclient-rb.gemspec
12
16
 
13
17
  AllCops:
14
18
  Exclude:
15
- - lib/**/* #TODO Apply rubocop to the library
19
+ - lib/**/* #TODO Apply rubocop to the library
data/Detailed-README.md CHANGED
@@ -468,7 +468,7 @@ The gem uses `rspec` for unit testing. You can find the files for the unit tests
468
468
  To run all the specs in the `spec` folder, use the provided rake task (_make sure Redis is running in localhost_):
469
469
 
470
470
  ```bash
471
- SPLITCLIENT_ENV=test bundle exec rspec spec
471
+ bundle exec rspec
472
472
  ```
473
473
 
474
474
  `Simplecov` is used for coverage reporting. Upon executing the rake task it will store the reports in the `/coverage` folder.
data/exe/splitio CHANGED
@@ -78,12 +78,12 @@ opt_parser = OptionParser.new do |opts|
78
78
  end
79
79
 
80
80
  begin
81
- opt_parser.parse!(ARGV)
82
- rescue OptionParser::InvalidOption => e
83
- puts e
84
- puts opt_parser
85
- exit(1)
86
- end
81
+ opt_parser.parse!(ARGV)
82
+ rescue OptionParser::InvalidOption => e
83
+ puts e
84
+ puts opt_parser
85
+ exit(1)
86
+ end
87
87
 
88
88
  config = config_path != '' ? YAML.load_file(config_path) : {}
89
89
  config
@@ -5,16 +5,15 @@ module SplitIoClient
5
5
  class MemoryRepository < EventsRepository
6
6
  EVENTS_SLICE = 100
7
7
 
8
- def initialize(adapter, config)
8
+ def initialize(adapter)
9
9
  @adapter = adapter
10
- @config = config
11
10
  end
12
11
 
13
12
  def add(key, traffic_type, event_type, time, value)
14
13
  @adapter.add_to_queue(m: metadata, e: event(key, traffic_type, event_type, time, value))
15
14
  rescue ThreadError # queue is full
16
- if @config.debug_enabled
17
- @config.logger.warn("Dropping events. Current size is #{@config.events_queue_size}. " \
15
+ if SplitIoClient.configuration.debug_enabled
16
+ SplitIoClient.configuration.logger.warn("Dropping events. Current size is #{SplitIoClient.configuration.events_queue_size}. " \
18
17
  "Consider increasing events_queue_size")
19
18
  end
20
19
  @adapter.clear
@@ -5,9 +5,8 @@ module SplitIoClient
5
5
  class RedisRepository < EventsRepository
6
6
  EVENTS_SLICE = 100
7
7
 
8
- def initialize(adapter, config)
8
+ def initialize(adapter)
9
9
  @adapter = adapter
10
- @config = config
11
10
  end
12
11
 
13
12
  def add(key, traffic_type, event_type, time, value)
@@ -6,13 +6,12 @@ module SplitIoClient
6
6
  extend Forwardable
7
7
  def_delegators :@adapter, :add, :clear
8
8
 
9
- def initialize(adapter, config)
10
- @config = config
9
+ def initialize(adapter)
11
10
  @adapter = case adapter.class.to_s
12
11
  when 'SplitIoClient::Cache::Adapters::MemoryAdapter'
13
- Repositories::Events::MemoryRepository.new(adapter, config)
12
+ Repositories::Events::MemoryRepository.new(adapter)
14
13
  when 'SplitIoClient::Cache::Adapters::RedisAdapter'
15
- Repositories::Events::RedisRepository.new(adapter, config)
14
+ Repositories::Events::RedisRepository.new(adapter)
16
15
  end
17
16
  end
18
17
 
@@ -20,9 +19,9 @@ module SplitIoClient
20
19
 
21
20
  def metadata
22
21
  {
23
- s: "#{@config.language}-#{@config.version}",
24
- i: @config.machine_ip,
25
- n: @config.machine_name
22
+ s: "#{SplitIoClient.configuration.language}-#{SplitIoClient.configuration.version}",
23
+ i: SplitIoClient.configuration.machine_ip,
24
+ n: SplitIoClient.configuration.machine_name
26
25
  }
27
26
  end
28
27
 
@@ -4,9 +4,8 @@ module SplitIoClient
4
4
  module Impressions
5
5
  class MemoryRepository
6
6
 
7
- def initialize(adapter, config)
7
+ def initialize(adapter)
8
8
  @adapter = adapter
9
- @config = config
10
9
  end
11
10
 
12
11
  # Store impression data in the selected adapter
@@ -14,7 +13,7 @@ module SplitIoClient
14
13
  @adapter.add_to_queue(feature: split_name, impressions: data)
15
14
  rescue ThreadError # queue is full
16
15
  if random_sampler.rand(1..1000) <= 2 # log only 0.2 % of the time
17
- @config.logger.warn("Dropping impressions. Current size is #{@config.impressions_queue_size}. " \
16
+ SplitIoClient.configuration.logger.warn("Dropping impressions. Current size is #{SplitIoClient.configuration.impressions_queue_size}. " \
18
17
  "Consider increasing impressions_queue_size")
19
18
  end
20
19
  end
@@ -26,7 +25,7 @@ module SplitIoClient
26
25
  'keyName' => key,
27
26
  'bucketingKey' => bucketing_key,
28
27
  'treatment' => treatment[:treatment],
29
- 'label' => @config.labels_enabled ? treatment[:label] : nil,
28
+ 'label' => SplitIoClient.configuration.labels_enabled ? treatment[:label] : nil,
30
29
  'changeNumber' => treatment[:change_number],
31
30
  'time' => time
32
31
  )
@@ -34,9 +33,9 @@ module SplitIoClient
34
33
  end
35
34
 
36
35
  def get_batch
37
- return [] if @config.impressions_bulk_size == 0
38
- @adapter.get_batch(@config.impressions_bulk_size).map do |impression|
39
- impression.update(ip: @config.machine_ip)
36
+ return [] if SplitIoClient.configuration.impressions_bulk_size == 0
37
+ @adapter.get_batch(SplitIoClient.configuration.impressions_bulk_size).map do |impression|
38
+ impression.update(ip: SplitIoClient.configuration.machine_ip)
40
39
  end
41
40
  end
42
41
 
@@ -4,9 +4,8 @@ module SplitIoClient
4
4
  module Impressions
5
5
  class RedisRepository < Repository
6
6
 
7
- def initialize(adapter, config)
7
+ def initialize(adapter)
8
8
  @adapter = adapter
9
- @config = config
10
9
  end
11
10
 
12
11
  # Store impression data in Redis
@@ -24,24 +23,24 @@ module SplitIoClient
24
23
  'keyName' => key,
25
24
  'bucketingKey' => bucketing_key,
26
25
  'treatment' => treatment[:treatment],
27
- 'label' => @config.labels_enabled ? treatment[:label] : nil,
26
+ 'label' => SplitIoClient.configuration.labels_enabled ? treatment[:label] : nil,
28
27
  'changeNumber' => treatment[:change_number],
29
28
  'time' => time)
30
29
  end
31
30
  end
32
31
  end
33
32
 
34
- # Get random impressions from redis in batches of size @config.impressions_bulk_size,
33
+ # Get random impressions from redis in batches of size SplitIoClient.configuration.impressions_bulk_size,
35
34
  # delete fetched impressions afterwards
36
35
  def get_batch
37
36
  impressions = impression_keys.each_with_object([]) do |key, memo|
38
37
  ip = key.split('/')[-2] # 'prefix/sdk_lang/ip/impressions.name' -> ip
39
38
  if ip.nil?
40
- @config.logger.warn("Impressions IP parse error for key: #{key}")
39
+ SplitIoClient.configuration.logger.warn("Impressions IP parse error for key: #{key}")
41
40
  next
42
41
  end
43
42
  split_name = key.split('.').last
44
- members = @adapter.random_set_elements(key, @config.impressions_bulk_size)
43
+ members = @adapter.random_set_elements(key, SplitIoClient.configuration.impressions_bulk_size)
45
44
  members.each do |impression|
46
45
  parsed_impression = JSON.parse(impression)
47
46
 
@@ -53,11 +52,11 @@ module SplitIoClient
53
52
  end
54
53
 
55
54
  @adapter.delete_from_set(key, members)
56
- end
57
55
 
56
+ end
58
57
  impressions
59
58
  rescue StandardError => e
60
- @config.logger.error("Exception while clearing impressions cache: #{e}")
59
+ SplitIoClient.configuration.logger.error("Exception while clearing impressions cache: #{e}")
61
60
 
62
61
  []
63
62
  end
@@ -66,9 +65,9 @@ module SplitIoClient
66
65
 
67
66
  # Get all sets by prefix
68
67
  def impression_keys
69
- @adapter.find_sets_by_prefix("#{@config.redis_namespace}/*/impressions.*")
68
+ @adapter.find_sets_by_prefix("#{SplitIoClient.configuration.redis_namespace}/*/impressions.*")
70
69
  rescue StandardError => e
71
- @config.logger.error("Exception while fetching impression_keys: #{e}")
70
+ SplitIoClient.configuration.logger.error("Exception while fetching impression_keys: #{e}")
72
71
 
73
72
  []
74
73
  end
@@ -6,13 +6,12 @@ module SplitIoClient
6
6
  extend Forwardable
7
7
  def_delegators :@adapter, :add, :add_bulk, :get_batch, :empty?
8
8
 
9
- def initialize(adapter, config)
10
- @config = config
9
+ def initialize(adapter)
11
10
  @adapter = case adapter.class.to_s
12
11
  when 'SplitIoClient::Cache::Adapters::MemoryAdapter'
13
- Repositories::Impressions::MemoryRepository.new(adapter, config)
12
+ Repositories::Impressions::MemoryRepository.new(adapter)
14
13
  when 'SplitIoClient::Cache::Adapters::RedisAdapter'
15
- Repositories::Impressions::RedisRepository.new(adapter, config)
14
+ Repositories::Impressions::RedisRepository.new(adapter)
16
15
  end
17
16
  end
18
17
  end
@@ -3,12 +3,10 @@ module SplitIoClient
3
3
  module Repositories
4
4
  module Metrics
5
5
  class MemoryRepository
6
- def initialize(_ = nil, adapter, config)
6
+ def initialize(_ = nil, adapter)
7
7
  @counts = []
8
8
  @latencies = []
9
9
  @gauges = []
10
-
11
- @config = config
12
10
  end
13
11
 
14
12
  def add_count(counter, delta)
@@ -3,8 +3,7 @@ module SplitIoClient
3
3
  module Repositories
4
4
  module Metrics
5
5
  class RedisRepository < Repository
6
- def initialize(adapter = nil, config)
7
- @config = config
6
+ def initialize(adapter = nil)
8
7
  @adapter = adapter
9
8
  end
10
9
 
@@ -7,13 +7,12 @@ module SplitIoClient
7
7
  def_delegators :@adapter, :add_count, :add_latency, :add_gauge, :counts, :latencies, :gauges,
8
8
  :clear_counts, :clear_latencies, :clear_gauges, :clear
9
9
 
10
- def initialize(adapter, config)
11
- @config = config
10
+ def initialize(adapter)
12
11
  @adapter = case adapter.class.to_s
13
12
  when 'SplitIoClient::Cache::Adapters::MemoryAdapter'
14
- Repositories::Metrics::MemoryRepository.new(adapter, config)
13
+ Repositories::Metrics::MemoryRepository.new(adapter)
15
14
  when 'SplitIoClient::Cache::Adapters::RedisAdapter'
16
- Repositories::Metrics::RedisRepository.new(adapter, config)
15
+ Repositories::Metrics::RedisRepository.new(adapter)
17
16
  end
18
17
  end
19
18
  end
@@ -12,11 +12,11 @@ module SplitIoClient
12
12
  protected
13
13
 
14
14
  def namespace_key(key = '')
15
- "#{@config.redis_namespace}#{key}"
15
+ "#{SplitIoClient.configuration.redis_namespace}#{key}"
16
16
  end
17
17
 
18
18
  def impressions_metrics_key(key)
19
- namespace_key("/#{@config.language}-#{@config.version}/#{@config.machine_ip}/#{key}")
19
+ namespace_key("/#{SplitIoClient.configuration.language}-#{SplitIoClient.configuration.version}/#{SplitIoClient.configuration.machine_ip}/#{key}")
20
20
  end
21
21
  end
22
22
  end
@@ -6,10 +6,8 @@ module SplitIoClient
6
6
 
7
7
  attr_reader :adapter
8
8
 
9
- def initialize(adapter, config)
9
+ def initialize(adapter)
10
10
  @adapter = adapter
11
- @config = config
12
-
13
11
  @adapter.set_bool(namespace_key('.ready'), false)
14
12
  end
15
13
 
@@ -8,10 +8,8 @@ module SplitIoClient
8
8
 
9
9
  attr_reader :adapter
10
10
 
11
- def initialize(adapter, config)
11
+ def initialize(adapter)
12
12
  @adapter = adapter
13
- @config = config
14
-
15
13
  @adapter.set_string(namespace_key('.splits.till'), '-1')
16
14
  @adapter.initialize_map(namespace_key('.segments.registered'))
17
15
  end
@@ -2,9 +2,8 @@ module SplitIoClient
2
2
  class ImpressionRouter
3
3
  attr_reader :router_thread
4
4
 
5
- def initialize(config)
6
- @config = config
7
- @listener = config.impression_listener
5
+ def initialize
6
+ @listener = SplitIoClient.configuration.impression_listener
8
7
 
9
8
  return unless @listener
10
9
 
@@ -45,12 +44,12 @@ module SplitIoClient
45
44
  end
46
45
 
47
46
  def router_thread
48
- @config.threads[:impression_router] = Thread.new do
47
+ SplitIoClient.configuration.threads[:impression_router] = Thread.new do
49
48
  loop do
50
49
  begin
51
50
  @listener.log(@queue.pop)
52
51
  rescue StandardError => error
53
- @config.log_found_exception(__method__.to_s, error)
52
+ SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
54
53
  end
55
54
  end
56
55
  end
@@ -2,9 +2,8 @@ module SplitIoClient
2
2
  module Cache
3
3
  module Senders
4
4
  class EventsSender
5
- def initialize(events_repository, config, api_key)
5
+ def initialize(events_repository, api_key)
6
6
  @events_repository = events_repository
7
- @config = config
8
7
  @api_key = api_key
9
8
  end
10
9
 
@@ -25,21 +24,21 @@ module SplitIoClient
25
24
  private
26
25
 
27
26
  def events_thread
28
- @config.threads[:events_sender] = Thread.new do
29
- @config.logger.info('Starting events service')
27
+ SplitIoClient.configuration.threads[:events_sender] = Thread.new do
28
+ SplitIoClient.configuration.logger.info('Starting events service')
30
29
 
31
30
  loop do
32
31
  post_events
33
32
 
34
- sleep(SplitIoClient::Utilities.randomize_interval(@config.events_push_rate))
33
+ sleep(SplitIoClient::Utilities.randomize_interval(SplitIoClient.configuration.events_push_rate))
35
34
  end
36
35
  end
37
36
  end
38
37
 
39
38
  def post_events
40
- SplitIoClient::Api::Events.new(@api_key, @config, @events_repository.clear).post
39
+ SplitIoClient::Api::Events.new(@api_key, @events_repository.clear).post
41
40
  rescue StandardError => error
42
- @config.log_found_exception(__method__.to_s, error)
41
+ SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
43
42
  end
44
43
  end
45
44
  end
@@ -2,15 +2,14 @@ module SplitIoClient
2
2
  module Cache
3
3
  module Senders
4
4
  class ImpressionsSender
5
- def initialize(impressions_repository, config, api_key)
5
+ def initialize(impressions_repository, api_key)
6
6
  @impressions_repository = impressions_repository
7
- @config = config
8
7
  @api_key = api_key
9
8
  end
10
9
 
11
10
  def call
12
- if @config.disable_impressions
13
- @config.logger.info('Disabling impressions service by config')
11
+ if SplitIoClient.configuration.disable_impressions
12
+ SplitIoClient.configuration.logger.info('Disabling impressions service by config')
14
13
  return
15
14
  end
16
15
 
@@ -30,14 +29,14 @@ module SplitIoClient
30
29
  private
31
30
 
32
31
  def impressions_thread
33
- @config.threads[:impressions_sender] = Thread.new do
32
+ SplitIoClient.configuration.threads[:impressions_sender] = Thread.new do
34
33
  begin
35
- @config.logger.info('Starting impressions service')
34
+ SplitIoClient.configuration.logger.info('Starting impressions service')
36
35
 
37
36
  loop do
38
37
  post_impressions
39
38
 
40
- sleep(SplitIoClient::Utilities.randomize_interval(@config.impressions_refresh_rate))
39
+ sleep(SplitIoClient::Utilities.randomize_interval(SplitIoClient.configuration.impressions_refresh_rate))
41
40
  end
42
41
  rescue SplitIoClient::ImpressionShutdownException
43
42
  post_impressions
@@ -50,7 +49,7 @@ module SplitIoClient
50
49
  def post_impressions
51
50
  impressions_client.post
52
51
  rescue StandardError => error
53
- @config.log_found_exception(__method__.to_s, error)
52
+ SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
54
53
  end
55
54
 
56
55
  def formatted_impressions(raw_impressions = nil)
@@ -58,7 +57,7 @@ module SplitIoClient
58
57
  end
59
58
 
60
59
  def impressions_client
61
- SplitIoClient::Api::Impressions.new(@api_key, @config, formatted_impressions)
60
+ SplitIoClient::Api::Impressions.new(@api_key, formatted_impressions)
62
61
  end
63
62
  end
64
63
  end