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_app_id_for_sdk_key(sdk_key) ⇒ Object
- #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
- #has_sdk_key?(sdk_key) ⇒ Boolean
-
#initialize(network, options, error_callback, diagnostics, error_boundary, logger) ⇒ 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, error_boundary, logger) ⇒ 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 76 77 78 79 |
# File 'lib/spec_store.rb', line 15 def initialize(network, , error_callback, diagnostics, error_boundary, logger) @init_reason = EvaluationReason::UNINITIALIZED @network = network @options = @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 => {}, :sdk_keys_to_app_ids => {} } @diagnostics = diagnostics @error_boundary = error_boundary @logger = logger @id_list_thread_pool = Concurrent::FixedThreadPool.new( .idlist_threadpool_size, name: 'statsig-idlist', max_queue: 100, fallback_policy: :discard, ) unless @options.bootstrap_values.nil? if !@options.data_store.nil? puts 'data_store gets priority over bootstrap_values. bootstrap_values will be ignored' else tracker = @diagnostics.track('bootstrap', 'process') begin if process_specs(.bootstrap_values) @init_reason = EvaluationReason::BOOTSTRAP end rescue puts 'the provided bootstrapValues is not a valid JSON string' ensure tracker.end(success: @init_reason == EvaluationReason::BOOTSTRAP) end end end unless @options.data_store.nil? @options.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 !@options.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_app_id_for_sdk_key(sdk_key) ⇒ Object
130 131 132 133 134 135 136 |
# File 'lib/spec_store.rb', line 130 def get_app_id_for_sdk_key(sdk_key) if sdk_key.nil? return nil end return nil unless has_sdk_key?(sdk_key) @specs[:sdk_keys_to_app_ids][sdk_key] end |
#get_config(config_name) ⇒ Object
112 113 114 115 |
# File 'lib/spec_store.rb', line 112 def get_config(config_name) return nil unless has_config?(config_name) @specs[:configs][config_name] end |
#get_gate(gate_name) ⇒ Object
107 108 109 110 |
# File 'lib/spec_store.rb', line 107 def get_gate(gate_name) return nil unless has_gate?(gate_name) @specs[:gates][gate_name] end |
#get_id_list(list_name) ⇒ Object
122 123 124 |
# File 'lib/spec_store.rb', line 122 def get_id_list(list_name) @specs[:id_lists][list_name] end |
#get_layer(layer_name) ⇒ Object
117 118 119 120 |
# File 'lib/spec_store.rb', line 117 def get_layer(layer_name) return nil unless has_layer?(layer_name) @specs[:layers][layer_name] end |
#get_raw_specs ⇒ Object
138 139 140 |
# File 'lib/spec_store.rb', line 138 def get_raw_specs @specs end |
#has_config?(config_name) ⇒ Boolean
99 100 101 |
# File 'lib/spec_store.rb', line 99 def has_config?(config_name) @specs[:configs].key?(config_name) end |
#has_gate?(gate_name) ⇒ Boolean
95 96 97 |
# File 'lib/spec_store.rb', line 95 def has_gate?(gate_name) @specs[:gates].key?(gate_name) end |
#has_layer?(layer_name) ⇒ Boolean
103 104 105 |
# File 'lib/spec_store.rb', line 103 def has_layer?(layer_name) @specs[:layers].key?(layer_name) end |
#has_sdk_key?(sdk_key) ⇒ Boolean
126 127 128 |
# File 'lib/spec_store.rb', line 126 def has_sdk_key?(sdk_key) @specs[:sdk_keys_to_app_ids].key?(sdk_key) end |
#is_ready_for_checks ⇒ Object
81 82 83 |
# File 'lib/spec_store.rb', line 81 def is_ready_for_checks @last_config_sync_time != 0 end |
#maybe_restart_background_threads ⇒ Object
142 143 144 145 146 147 148 149 |
# File 'lib/spec_store.rb', line 142 def maybe_restart_background_threads if @config_sync_thread.nil? || !@config_sync_thread.alive? @config_sync_thread = sync_config_specs end if @id_lists_sync_thread.nil? || !@id_lists_sync_thread.alive? @id_lists_sync_thread = sync_id_lists end end |
#shutdown ⇒ Object
85 86 87 88 89 90 91 92 93 |
# File 'lib/spec_store.rb', line 85 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 @options.data_store.nil? @options.data_store.shutdown end end |