Class: Prefab::ConfigClient

Inherits:
Object
  • Object
show all
Defined in:
lib/prefab/config_client.rb

Constant Summary collapse

RECONNECT_WAIT =
5
DEFAULT_CHECKPOINT_FREQ_SEC =
60
SSE_READ_TIMEOUT =
300
AUTH_USER =
'authuser'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_client, timeout) ⇒ ConfigClient

Returns a new instance of ConfigClient.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/prefab/config_client.rb', line 10

def initialize(base_client, timeout)
  @base_client = base_client
  @options = base_client.options
  @base_client.log_internal ::Logger::DEBUG, 'Initialize ConfigClient'
  @timeout = timeout

  @stream_lock = Concurrent::ReadWriteLock.new

  @checkpoint_freq_secs = DEFAULT_CHECKPOINT_FREQ_SEC

  @config_loader = Prefab::ConfigLoader.new(@base_client)
  @config_resolver = Prefab::ConfigResolver.new(@base_client, @config_loader)

  @initialization_lock = Concurrent::ReadWriteLock.new
  @base_client.log_internal ::Logger::DEBUG, 'Initialize ConfigClient: AcquireWriteLock'
  @initialization_lock.acquire_write_lock
  @base_client.log_internal ::Logger::DEBUG, 'Initialize ConfigClient: AcquiredWriteLock'
  @initialized_future = Concurrent::Future.execute { @initialization_lock.acquire_read_lock }

  if @options.local_only?
    finish_init!(:local_only)
  else
    load_checkpoint
    start_checkpointing_thread
    start_streaming
  end
end

Class Method Details

.value_to_delta(key, config_value, namespace = nil) ⇒ Object



52
53
54
55
# File 'lib/prefab/config_client.rb', line 52

def self.value_to_delta(key, config_value, namespace = nil)
  Prefab::Config.new(key: [namespace, key].compact.join(':'),
                     rows: [Prefab::ConfigRow.new(value: config_value)])
end

Instance Method Details

#get(key, default = NO_DEFAULT_PROVIDED, properties = NO_DEFAULT_PROVIDED) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/prefab/config_client.rb', line 57

def get(key, default = NO_DEFAULT_PROVIDED, properties = NO_DEFAULT_PROVIDED)
  value = _get(key, properties)

  if value
    Prefab::ConfigValueUnwrapper.unwrap(value, key, properties)
  else
    handle_default(key, default)
  end
end

#resolverObject



48
49
50
# File 'lib/prefab/config_client.rb', line 48

def resolver
  @config_resolver
end

#start_streamingObject



38
39
40
41
42
# File 'lib/prefab/config_client.rb', line 38

def start_streaming
  @stream_lock.with_write_lock do
    start_sse_streaming_connection_thread(@config_loader.highwater_mark) if @streaming_thread.nil?
  end
end

#to_sObject



44
45
46
# File 'lib/prefab/config_client.rb', line 44

def to_s
  @config_resolver.to_s
end