Class: Statsig::SpecStore
- Inherits:
-
Object
- Object
- Statsig::SpecStore
- Defined in:
- lib/spec_store.rb
Instance Attribute Summary collapse
-
#init_reason ⇒ Object
Returns the value of attribute init_reason.
-
#initial_config_sync_time ⇒ Object
Returns the value of attribute initial_config_sync_time.
-
#last_config_sync_time ⇒ Object
Returns the value of attribute last_config_sync_time.
Instance Method Summary collapse
- #get_config(config_name) ⇒ Object
- #get_gate(gate_name) ⇒ Object
- #get_id_list(list_name) ⇒ Object
- #get_layer(layer_name) ⇒ Object
- #get_raw_specs ⇒ Object
- #has_config?(config_name) ⇒ Boolean
- #has_gate?(gate_name) ⇒ Boolean
- #has_layer?(layer_name) ⇒ Boolean
-
#initialize(network, options, error_callback, diagnostics) ⇒ SpecStore
constructor
A new instance of SpecStore.
- #is_ready_for_checks ⇒ Object
- #maybe_restart_background_threads ⇒ Object
- #shutdown ⇒ Object
Constructor Details
#initialize(network, options, error_callback, diagnostics) ⇒ SpecStore
Returns a new instance of SpecStore.
15 16 17 18 19 20 21 22 23 24 25 26 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/spec_store.rb', line 15 def initialize(network, , error_callback, diagnostics) @init_reason = EvaluationReason::UNINITIALIZED @network = network = @error_callback = error_callback @last_config_sync_time = 0 @initial_config_sync_time = 0 @rulesets_sync_interval = .rulesets_sync_interval @id_lists_sync_interval = .idlists_sync_interval @rules_updated_callback = .rules_updated_callback @specs = { :gates => {}, :configs => {}, :layers => {}, :id_lists => {}, :experiment_to_layer => {} } @diagnostics = diagnostics @id_list_thread_pool = Concurrent::FixedThreadPool.new( .idlist_threadpool_size, name: 'statsig-idlist', max_queue: 100, fallback_policy: :discard, ) unless .bootstrap_values.nil? begin if !.data_store.nil? puts 'data_store gets priority over bootstrap_values. bootstrap_values will be ignored' else tracker = @diagnostics.track('bootstrap', 'process') if process_specs(.bootstrap_values) @init_reason = EvaluationReason::BOOTSTRAP end tracker.end(@init_reason == EvaluationReason::BOOTSTRAP) end rescue puts 'the provided bootstrapValues is not a valid JSON string' end end unless .data_store.nil? .data_store.init load_config_specs_from_storage_adapter end if @init_reason == EvaluationReason::UNINITIALIZED download_config_specs end @initial_config_sync_time = @last_config_sync_time == 0 ? -1 : @last_config_sync_time if !.data_store.nil? get_id_lists_from_adapter else get_id_lists_from_network end @config_sync_thread = sync_config_specs @id_lists_sync_thread = sync_id_lists end |
Instance Attribute Details
#init_reason ⇒ Object
Returns the value of attribute init_reason.
13 14 15 |
# File 'lib/spec_store.rb', line 13 def init_reason @init_reason end |
#initial_config_sync_time ⇒ Object
Returns the value of attribute initial_config_sync_time.
12 13 14 |
# File 'lib/spec_store.rb', line 12 def initial_config_sync_time @initial_config_sync_time end |
#last_config_sync_time ⇒ Object
Returns the value of attribute last_config_sync_time.
11 12 13 |
# File 'lib/spec_store.rb', line 11 def last_config_sync_time @last_config_sync_time end |
Instance Method Details
#get_config(config_name) ⇒ Object
108 109 110 111 |
# File 'lib/spec_store.rb', line 108 def get_config(config_name) return nil unless has_config?(config_name) @specs[:configs][config_name] end |
#get_gate(gate_name) ⇒ Object
103 104 105 106 |
# File 'lib/spec_store.rb', line 103 def get_gate(gate_name) return nil unless has_gate?(gate_name) @specs[:gates][gate_name] end |
#get_id_list(list_name) ⇒ Object
118 119 120 |
# File 'lib/spec_store.rb', line 118 def get_id_list(list_name) @specs[:id_lists][list_name] end |
#get_layer(layer_name) ⇒ Object
113 114 115 116 |
# File 'lib/spec_store.rb', line 113 def get_layer(layer_name) return nil unless has_layer?(layer_name) @specs[:layers][layer_name] end |
#get_raw_specs ⇒ Object
122 123 124 |
# File 'lib/spec_store.rb', line 122 def get_raw_specs @specs end |
#has_config?(config_name) ⇒ Boolean
95 96 97 |
# File 'lib/spec_store.rb', line 95 def has_config?(config_name) @specs[:configs].key?(config_name) end |
#has_gate?(gate_name) ⇒ Boolean
91 92 93 |
# File 'lib/spec_store.rb', line 91 def has_gate?(gate_name) @specs[:gates].key?(gate_name) end |
#has_layer?(layer_name) ⇒ Boolean
99 100 101 |
# File 'lib/spec_store.rb', line 99 def has_layer?(layer_name) @specs[:layers].key?(layer_name) end |
#is_ready_for_checks ⇒ Object
77 78 79 |
# File 'lib/spec_store.rb', line 77 def is_ready_for_checks @last_config_sync_time != 0 end |
#maybe_restart_background_threads ⇒ Object
126 127 128 129 130 131 132 133 |
# File 'lib/spec_store.rb', line 126 def maybe_restart_background_threads if @config_sync_thread.nil? or !@config_sync_thread.alive? @config_sync_thread = sync_config_specs end if @id_lists_sync_thread.nil? or !@id_lists_sync_thread.alive? @id_lists_sync_thread = sync_id_lists end end |
#shutdown ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/spec_store.rb', line 81 def shutdown @config_sync_thread&.exit @id_lists_sync_thread&.exit @id_list_thread_pool.shutdown @id_list_thread_pool.wait_for_termination(timeout = 3) unless .data_store.nil? .data_store.shutdown end end |