Class: SplitIoClient::SplitConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/split_config.rb

Overview

This class manages configuration options for the split client library. If not custom configuration is required the default configuration values will be used

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ type

Constructor for creating custom split client config

Parameters:

  • opts (Hash) (defaults to: {})

    optional hash with configuration options

Options Hash (opts):

  • :base_uri (String) — default: "https://sdk.split.io/api/"

    The base URL for split API end points

  • :events_uri (String) — default: "https://events.split.io/api/"

    The events URL for events end points

  • :read_timeout (Int) — default: 10

    The read timeout for network connections in seconds.

  • :connection_timeout (Int) — default: 2

    The connect timeout for network connections in seconds.

  • :features_refresh_rate (Int)

    The SDK polls Split servers for changes to feature roll-out plans. This parameter controls this polling period in seconds.

  • :segments_refresh_rate (Int)
  • :metrics_refresh_rate (Int)
  • :impressions_refresh_rate (Int)
  • :logger (Object)

    a logger to user for messages from the client. Defaults to stdout

  • :debug_enabled (Boolean) — default: false

    The value for the debug flag

  • :impressions_queue_size (Int)

    how big the impressions queue is before dropping impressions. -1 to disable it.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/splitclient-rb/split_config.rb', line 27

def initialize(opts = {})
  @base_uri = (opts[:base_uri] || SplitConfig.default_base_uri).chomp('/')
  @events_uri = (opts[:events_uri] || SplitConfig.default_events_uri).chomp('/')
  @mode = opts[:mode] || SplitConfig.default_mode
  @redis_url = opts[:redis_url] || SplitConfig.default_redis_url
  @cache_adapter = SplitConfig.init_cache_adapter(
    opts[:cache_adapter] || SplitConfig.default_cache_adapter, :map_adapter, @redis_url, false
  )
  @connection_timeout = opts[:connection_timeout] || SplitConfig.default_connection_timeout
  @read_timeout = opts[:read_timeout] || SplitConfig.default_read_timeout
  @features_refresh_rate = opts[:features_refresh_rate] || SplitConfig.default_features_refresh_rate
  @segments_refresh_rate = opts[:segments_refresh_rate] || SplitConfig.default_segments_refresh_rate
  @metrics_refresh_rate = opts[:metrics_refresh_rate] || SplitConfig.default_metrics_refresh_rate

  @impressions_refresh_rate = opts[:impressions_refresh_rate] || SplitConfig.default_impressions_refresh_rate
  @impressions_queue_size = opts[:impressions_queue_size] || SplitConfig.default_impressions_queue_size
  @impressions_adapter = SplitConfig.init_cache_adapter(
    opts[:cache_adapter] || SplitConfig.default_cache_adapter, :queue_adapter, @redis_url, @impressions_queue_size
  )

  @metrics_adapter = SplitConfig.init_cache_adapter(
    opts[:cache_adapter] || SplitConfig.default_cache_adapter, :map_adapter, @redis_url, false
  )

  @logger = opts[:logger] || SplitConfig.default_logger
  @debug_enabled = opts[:debug_enabled] || SplitConfig.default_debug
  @transport_debug_enabled = opts[:transport_debug_enabled] || SplitConfig.default_debug
  @block_until_ready = opts[:block_until_ready] || false
  @machine_name = SplitConfig.get_hostname
  @machine_ip = SplitConfig.get_ip

  startup_log
end

Instance Attribute Details

#base_uriString (readonly)

The base URL for split API end points

Returns:

  • (String)

    The configured base URL for the split API end points



65
66
67
# File 'lib/splitclient-rb/split_config.rb', line 65

def base_uri
  @base_uri
end

#block_until_readyInteger (readonly)

The number of seconds to wait for SDK readiness or false to disable waiting

Returns:

  • (Integer)

    /[FalseClass]



131
132
133
# File 'lib/splitclient-rb/split_config.rb', line 131

def block_until_ready
  @block_until_ready
end

#cache_adapterObject (readonly)

The cache adapter to store splits/segments in

Returns:

  • (Object)

    Cache adapter instance



88
89
90
# File 'lib/splitclient-rb/split_config.rb', line 88

def cache_adapter
  @cache_adapter
end

#connection_timeoutInt (readonly)

The connection timeout for network connections in seconds.

Returns:

  • (Int)

    The connect timeout in seconds.



106
107
108
# File 'lib/splitclient-rb/split_config.rb', line 106

def connection_timeout
  @connection_timeout
end

#debug_enabledBoolean (readonly)

The boolean that represents the state of the debug log level

Returns:

  • (Boolean)

    The value for the debug flag



119
120
121
# File 'lib/splitclient-rb/split_config.rb', line 119

def debug_enabled
  @debug_enabled
end

#events_uriString (readonly)

The base URL for split events API end points

Returns:

  • (String)

    The configured URL for the events API end points



71
72
73
# File 'lib/splitclient-rb/split_config.rb', line 71

def events_uri
  @events_uri
end

#features_refresh_rateObject (readonly)

Returns the value of attribute features_refresh_rate.



136
137
138
# File 'lib/splitclient-rb/split_config.rb', line 136

def features_refresh_rate
  @features_refresh_rate
end

#impressions_adapterObject (readonly)

The cache adapter to store impressions in

Returns:

  • (Object)

    Impressions adapter instance



94
95
96
# File 'lib/splitclient-rb/split_config.rb', line 94

def impressions_adapter
  @impressions_adapter
end

#impressions_queue_sizeInteger (readonly)

Wow big the impressions queue is before dropping impressions. -1 to disable it.

Returns:

  • (Integer)


145
146
147
# File 'lib/splitclient-rb/split_config.rb', line 145

def impressions_queue_size
  @impressions_queue_size
end

#impressions_refresh_rateObject (readonly)

Returns the value of attribute impressions_refresh_rate.



139
140
141
# File 'lib/splitclient-rb/split_config.rb', line 139

def impressions_refresh_rate
  @impressions_refresh_rate
end

#loggerLogger (readonly)

The configured logger. The client library uses the log to print warning and error messages.

Returns:

  • (Logger)

    The configured logger



113
114
115
# File 'lib/splitclient-rb/split_config.rb', line 113

def logger
  @logger
end

#machine_ipObject (readonly)

Returns the value of attribute machine_ip.



133
134
135
# File 'lib/splitclient-rb/split_config.rb', line 133

def machine_ip
  @machine_ip
end

#machine_nameObject (readonly)

Returns the value of attribute machine_name.



134
135
136
# File 'lib/splitclient-rb/split_config.rb', line 134

def machine_name
  @machine_name
end

#metrics_adapterSymbol (readonly)

The cache adapter to store metrics in

Returns:

  • (Symbol)

    Metrics adapter



100
101
102
# File 'lib/splitclient-rb/split_config.rb', line 100

def metrics_adapter
  @metrics_adapter
end

#metrics_refresh_rateObject (readonly)

Returns the value of attribute metrics_refresh_rate.



138
139
140
# File 'lib/splitclient-rb/split_config.rb', line 138

def metrics_refresh_rate
  @metrics_refresh_rate
end

#modeSymbol (readonly)

The mode SDK will run

Returns:

  • (Symbol)

    One of the available SDK modes: standalone, consumer, producer



77
78
79
# File 'lib/splitclient-rb/split_config.rb', line 77

def mode
  @mode
end

#read_timeoutInt (readonly)

The read timeout for network connections in seconds.

Returns:

  • (Int)

    The timeout in seconds.



82
83
84
# File 'lib/splitclient-rb/split_config.rb', line 82

def read_timeout
  @read_timeout
end

#redis_urlObject (readonly)

Returns the value of attribute redis_url.



147
148
149
# File 'lib/splitclient-rb/split_config.rb', line 147

def redis_url
  @redis_url
end

#segments_refresh_rateObject (readonly)

Returns the value of attribute segments_refresh_rate.



137
138
139
# File 'lib/splitclient-rb/split_config.rb', line 137

def segments_refresh_rate
  @segments_refresh_rate
end

#transport_debug_enabledBoolean (readonly)

Enable to log the content retrieved from endpoints

Returns:

  • (Boolean)

    The value for the debug flag



125
126
127
# File 'lib/splitclient-rb/split_config.rb', line 125

def transport_debug_enabled
  @transport_debug_enabled
end

Class Method Details

.defaultConfig

The default split client configuration

Returns:

  • (Config)

    The default split client configuration.



153
154
155
# File 'lib/splitclient-rb/split_config.rb', line 153

def self.default
  SplitConfig.new
end

.default_base_uristring

The default base uri for api calls

Returns:

  • (string)

    The default base uri



161
162
163
# File 'lib/splitclient-rb/split_config.rb', line 161

def self.default_base_uri
  'https://sdk.split.io/api/'
end

.default_cache_adapterLocalStore

Returns configuration value for local cache store.

Returns:

  • (LocalStore)

    configuration value for local cache store



188
189
190
# File 'lib/splitclient-rb/split_config.rb', line 188

def self.default_cache_adapter
  :memory
end

.default_connection_timeoutint

The default connection timeout value

Returns:

  • (int)


208
209
210
# File 'lib/splitclient-rb/split_config.rb', line 208

def self.default_connection_timeout
  5
end

.default_debugboolean

The default debug value

Returns:

  • (boolean)


244
245
246
# File 'lib/splitclient-rb/split_config.rb', line 244

def self.default_debug
  false
end

.default_events_uriObject



165
166
167
# File 'lib/splitclient-rb/split_config.rb', line 165

def self.default_events_uri
  'https://events.split.io/api/'
end

.default_features_refresh_rateObject



212
213
214
# File 'lib/splitclient-rb/split_config.rb', line 212

def self.default_features_refresh_rate
  30
end

.default_impressions_queue_sizeObject



228
229
230
# File 'lib/splitclient-rb/split_config.rb', line 228

def self.default_impressions_queue_size
  5000
end

.default_impressions_refresh_rateObject



224
225
226
# File 'lib/splitclient-rb/split_config.rb', line 224

def self.default_impressions_refresh_rate
  60
end

.default_loggerobject

The default logger object

Returns:

  • (object)


236
237
238
# File 'lib/splitclient-rb/split_config.rb', line 236

def self.default_logger
  Logger.new($stdout)
end

.default_metrics_adapterObject



192
193
194
# File 'lib/splitclient-rb/split_config.rb', line 192

def self.default_metrics_adapter
  :memory
end

.default_metrics_refresh_rateObject



220
221
222
# File 'lib/splitclient-rb/split_config.rb', line 220

def self.default_metrics_refresh_rate
  60
end

.default_modeObject



183
184
185
# File 'lib/splitclient-rb/split_config.rb', line 183

def self.default_mode
  :standalone
end

.default_read_timeoutint

The default read timeout value

Returns:

  • (int)


200
201
202
# File 'lib/splitclient-rb/split_config.rb', line 200

def self.default_read_timeout
  5
end

.default_redis_urlObject



248
249
250
# File 'lib/splitclient-rb/split_config.rb', line 248

def self.default_redis_url
  'redis://127.0.0.1:6379/0'
end

.default_segments_refresh_rateObject



216
217
218
# File 'lib/splitclient-rb/split_config.rb', line 216

def self.default_segments_refresh_rate
  60
end

.get_hostnamestring

gets the hostname where the sdk gem is running

Returns:

  • (string)


285
286
287
288
289
290
291
292
# File 'lib/splitclient-rb/split_config.rb', line 285

def self.get_hostname
  begin
    Socket.gethostname
  rescue
    #unable to get hostname
    'localhost'
  end
end

.get_ipstring

gets the ip where the sdk gem is running

Returns:

  • (string)


298
299
300
301
302
303
304
305
# File 'lib/splitclient-rb/split_config.rb', line 298

def self.get_ip
  begin
    Socket::getaddrinfo(Socket.gethostname, 'echo', Socket::AF_INET)[0][3]
  rescue
    #unable to get local ip
    '127.0.0.0'
  end
end

.init_cache_adapter(adapter, data_structure, redis_url = nil, impressions_queue_size = nil) ⇒ Object



169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/splitclient-rb/split_config.rb', line 169

def self.init_cache_adapter(adapter, data_structure, redis_url = nil, impressions_queue_size = nil)
  case adapter
  when :memory
    # takes :memory_adapter (symbol) and returns MemoryAdapter (string)
    adapter = SplitIoClient::Cache::Adapters::MemoryAdapters.const_get(
      data_structure.to_s.split('_').collect(&:capitalize).join
    ).new(impressions_queue_size)

    SplitIoClient::Cache::Adapters::MemoryAdapter.new(adapter)
  when :redis
    SplitIoClient::Cache::Adapters::RedisAdapter.new(redis_url)
  end
end

.transport_debugboolean

The default transport_debug_enabled value

Returns:

  • (boolean)


256
257
258
# File 'lib/splitclient-rb/split_config.rb', line 256

def self.transport_debug
  false
end

Instance Method Details

#log_found_exception(caller, exn) ⇒ void

This method returns an undefined value.

custom logger of exceptions



264
265
266
267
268
# File 'lib/splitclient-rb/split_config.rb', line 264

def log_found_exception(caller, exn)
  error_traceback = "#{exn.inspect} #{exn}\n\t#{exn.backtrace.join("\n\t")}"
  error = "[splitclient-rb] Unexpected exception in #{caller}: #{error_traceback}"
  @logger.error(error)
end

#startup_logvoid

This method returns an undefined value.

log which cache class was loaded and SDK mode



274
275
276
277
278
279
# File 'lib/splitclient-rb/split_config.rb', line 274

def startup_log
  return if ENV['SPLITCLIENT_ENV'] == 'test'

  @logger.info("Loaded SDK in the #{@mode} mode")
  @logger.info("Loaded cache class: #{@cache_adapter.class}")
end