splitclient-rb 5.1.0 → 5.1.1.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
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