Class: Optimizely::HTTPProjectConfigManager
- Inherits:
-
ProjectConfigManager
- Object
- ProjectConfigManager
- Optimizely::HTTPProjectConfigManager
- Defined in:
- lib/optimizely/config_manager/http_project_config_manager.rb
Instance Attribute Summary collapse
-
#stopped ⇒ Object
readonly
Config manager that polls for the datafile and updated ProjectConfig based on an update interval.
Instance Method Summary collapse
- #config ⇒ Object
-
#initialize(sdk_key: nil, url: nil, url_template: nil, polling_interval: nil, blocking_timeout: nil, auto_update: true, start_by_default: true, datafile: nil, logger: nil, error_handler: nil, skip_json_validation: false, notification_center: nil) ⇒ HTTPProjectConfigManager
constructor
Initialize config manager.
- #ready? ⇒ Boolean
- #start! ⇒ Object
- #stop! ⇒ Object
Constructor Details
#initialize(sdk_key: nil, url: nil, url_template: nil, polling_interval: nil, blocking_timeout: nil, auto_update: true, start_by_default: true, datafile: nil, logger: nil, error_handler: nil, skip_json_validation: false, notification_center: nil) ⇒ HTTPProjectConfigManager
Initialize config manager. One of sdk_key or url has to be set to be able to use.
sdk_key - Optional string uniquely identifying the datafile. It’s required unless a URL is passed in. datafile: Optional JSON string representing the project. polling_interval - Optional floating point number representing time interval in seconds
at which to request datafile and set ProjectConfig.
blocking_timeout - Optional Time in seconds to block the config call until config object has been initialized. auto_update - Boolean indicates to run infinitely or only once. start_by_default - Boolean indicates to start by default AsyncScheduler. url - Optional string representing URL from where to fetch the datafile. If set it supersedes the sdk_key. url_template - Optional string template which in conjunction with sdk_key
determines URL from where to fetch the datafile.
logger - Provides a logger instance. error_handler - Provides a handle_error method to handle exceptions. skip_json_validation - Optional boolean param which allows skipping JSON schema
validation upon object invocation. By default JSON schema validation will be performed.
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 80 81 |
# File 'lib/optimizely/config_manager/http_project_config_manager.rb', line 51 def initialize( sdk_key: nil, url: nil, url_template: nil, polling_interval: nil, blocking_timeout: nil, auto_update: true, start_by_default: true, datafile: nil, logger: nil, error_handler: nil, skip_json_validation: false, notification_center: nil ) @logger = logger || NoOpLogger.new @error_handler = error_handler || NoOpErrorHandler.new @datafile_url = get_datafile_url(sdk_key, url, url_template) @polling_interval = nil polling_interval(polling_interval) @blocking_timeout = nil blocking_timeout(blocking_timeout) @last_modified = nil @async_scheduler = AsyncScheduler.new(method(:fetch_datafile_config), @polling_interval, auto_update, @logger) @async_scheduler.start! if start_by_default == true @stopped = false @skip_json_validation = skip_json_validation @notification_center = notification_center.is_a?(Optimizely::NotificationCenter) ? notification_center : NotificationCenter.new(@logger, @error_handler) @config = datafile.nil? ? nil : DatafileProjectConfig.create(datafile, @logger, @error_handler, @skip_json_validation) @mutex = Mutex.new @resource = ConditionVariable.new end |
Instance Attribute Details
#stopped ⇒ Object (readonly)
Config manager that polls for the datafile and updated ProjectConfig based on an update interval.
33 34 35 |
# File 'lib/optimizely/config_manager/http_project_config_manager.rb', line 33 def stopped @stopped end |
Instance Method Details
#config ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/optimizely/config_manager/http_project_config_manager.rb', line 108 def config # Get Project Config. # if stopped is true, then simply return @config. # If the background datafile polling thread is running. and config has been initalized, # we simply return @config. # If it is not, we wait and block maximum for @blocking_timeout. # If thread is not running, we fetch the datafile and update config. return @config if @stopped if @async_scheduler.running return @config if ready? @mutex.synchronize do @resource.wait(@mutex, @blocking_timeout) return @config end end fetch_datafile_config @config end |
#ready? ⇒ Boolean
83 84 85 |
# File 'lib/optimizely/config_manager/http_project_config_manager.rb', line 83 def ready? !@config.nil? end |
#start! ⇒ Object
87 88 89 90 91 92 93 94 95 |
# File 'lib/optimizely/config_manager/http_project_config_manager.rb', line 87 def start! if @stopped @logger.log(Logger::WARN, 'Not starting. Already stopped.') return end @async_scheduler.start! @stopped = false end |
#stop! ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/optimizely/config_manager/http_project_config_manager.rb', line 97 def stop! if @stopped @logger.log(Logger::WARN, 'Not pausing. Manager has not been started.') return end @async_scheduler.stop! @config = nil @stopped = true end |