Class: Prefab::ConfigClient

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

Constant Summary collapse

LOG =
Prefab::InternalLogger.new(self)
RECONNECT_WAIT =
5
DEFAULT_CHECKPOINT_FREQ_SEC =
60
SSE_READ_TIMEOUT =
300
STALE_CACHE_WARN_HOURS =
5
AUTH_USER =
'authuser'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_client, timeout) ⇒ ConfigClient

Returns a new instance of ConfigClient.



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
# File 'lib/prefab/config_client.rb', line 11

def initialize(base_client, timeout)
  @base_client = base_client
  @options = base_client.options
  LOG.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::CountDownLatch.new(1)

  if @options.local_only?
    finish_init!(:local_only, nil)
  elsif @options.datafile?
    load_json_file(@options.datafile)
  else
    load_checkpoint
    start_checkpointing_thread
    start_streaming
  end
end

Class Method Details

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



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

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

Instance Method Details

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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/prefab/config_client.rb', line 56

def get(key, default = NO_DEFAULT_PROVIDED, properties = NO_DEFAULT_PROVIDED)
  context = @config_resolver.make_context(properties)

  if !context.blank? && @base_client.example_contexts_aggregator
    @base_client.example_contexts_aggregator.record(context)
  end

  evaluation = _get(key, properties)

  @base_client.context_shape_aggregator&.push(context)

  if evaluation
    evaluation.report_and_return(@base_client.evaluation_summary_aggregator)
  else
    handle_default(key, default)
  end
end

#initialized?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/prefab/config_client.rb', line 74

def initialized?
  @initialization_lock.count <= 0
end

#resolverObject



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

def resolver
  @config_resolver
end

#start_streamingObject



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

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



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

def to_s
  @config_resolver.to_s
end