ff-ruby-server-sdk 1.0.6 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile +8 -2
- data/README.md +3 -2
- data/buildInContainer.sh +15 -0
- data/example/getting_started/getting_started.rb +2 -1
- data/example/tls_example/tls_example.rb +67 -0
- data/lib/ff/ruby/server/sdk/api/auth_service.rb +48 -40
- data/lib/ff/ruby/server/sdk/api/cf_client.rb +1 -1
- data/lib/ff/ruby/server/sdk/api/client_callback.rb +14 -9
- data/lib/ff/ruby/server/sdk/api/config.rb +4 -4
- data/lib/ff/ruby/server/sdk/api/config_builder.rb +5 -0
- data/lib/ff/ruby/server/sdk/api/evaluator.rb +30 -37
- data/lib/ff/ruby/server/sdk/api/inner_client.rb +19 -23
- data/lib/ff/ruby/server/sdk/api/inner_client_flag_evaluate_callback.rb +1 -1
- data/lib/ff/ruby/server/sdk/api/inner_client_updater.rb +1 -1
- data/lib/ff/ruby/server/sdk/api/metrics_event.rb +18 -6
- data/lib/ff/ruby/server/sdk/api/metrics_processor.rb +100 -173
- data/lib/ff/ruby/server/sdk/api/polling_processor.rb +10 -11
- data/lib/ff/ruby/server/sdk/api/update_processor.rb +1 -3
- data/lib/ff/ruby/server/sdk/common/sdk_codes.rb +102 -0
- data/lib/ff/ruby/server/sdk/connector/events.rb +60 -64
- data/lib/ff/ruby/server/sdk/connector/harness_connector.rb +50 -26
- data/lib/ff/ruby/server/sdk/version.rb +1 -1
- data/scripts/openapi.sh +2 -5
- data/scripts/sdk_specs.sh +1 -1
- metadata +18 -23
@@ -12,14 +12,14 @@ require_relative "inner_client_repository_callback"
|
|
12
12
|
require_relative "inner_client_flag_evaluate_callback"
|
13
13
|
|
14
14
|
require_relative "../connector/harness_connector"
|
15
|
+
require_relative "../common/sdk_codes"
|
15
16
|
|
16
17
|
class InnerClient < ClientCallback
|
17
18
|
|
18
19
|
def initialize(api_key = nil, config = nil, connector = nil)
|
19
20
|
|
20
21
|
if api_key == nil || api_key == ""
|
21
|
-
|
22
|
-
raise "SDK key is not provided"
|
22
|
+
SdkCodes::raise_missing_sdk_key config.logger
|
23
23
|
end
|
24
24
|
|
25
25
|
if config == nil
|
@@ -87,7 +87,7 @@ class InnerClient < ClientCallback
|
|
87
87
|
|
88
88
|
def on_auth_success
|
89
89
|
|
90
|
-
@config.logger
|
90
|
+
SdkCodes::info_sdk_auth_ok @config.logger
|
91
91
|
|
92
92
|
if @closing
|
93
93
|
|
@@ -97,17 +97,20 @@ class InnerClient < ClientCallback
|
|
97
97
|
@poll_processor.start
|
98
98
|
|
99
99
|
if @config.stream_enabled
|
100
|
-
|
101
100
|
@update_processor.start
|
102
101
|
end
|
103
102
|
|
104
103
|
if @config.analytics_enabled
|
105
|
-
|
106
104
|
@metrics_processor.start
|
107
105
|
end
|
108
106
|
|
109
107
|
end
|
110
108
|
|
109
|
+
def on_auth_failed
|
110
|
+
SdkCodes::warn_auth_failed_srv_defaults @config.logger
|
111
|
+
@initialized = true
|
112
|
+
end
|
113
|
+
|
111
114
|
def close
|
112
115
|
|
113
116
|
@config.logger.info "Closing the client: " + self.to_s
|
@@ -201,19 +204,19 @@ class InnerClient < ClientCallback
|
|
201
204
|
if processor == @poll_processor
|
202
205
|
|
203
206
|
@poller_ready = true
|
204
|
-
@config.logger.
|
207
|
+
@config.logger.debug "PollingProcessor ready"
|
205
208
|
end
|
206
209
|
|
207
210
|
if processor == @update_processor
|
208
211
|
|
209
212
|
@stream_ready = true
|
210
|
-
@config.logger.
|
213
|
+
@config.logger.debug "Updater ready"
|
211
214
|
end
|
212
215
|
|
213
216
|
if processor == @metrics_processor
|
214
217
|
|
215
218
|
@metrics_ready = true
|
216
|
-
@config.logger.
|
219
|
+
@config.logger.debug "Metrics ready"
|
217
220
|
end
|
218
221
|
|
219
222
|
if (@config.stream_enabled && !@stream_ready) ||
|
@@ -223,21 +226,16 @@ class InnerClient < ClientCallback
|
|
223
226
|
return
|
224
227
|
end
|
225
228
|
|
226
|
-
@config.logger
|
229
|
+
SdkCodes.info_sdk_init_ok @config.logger
|
227
230
|
|
228
231
|
@initialized = true
|
229
|
-
|
230
|
-
# TODO: notify - Reactivity support
|
231
|
-
# TODO: notify_consumers - Reactivity support
|
232
|
-
|
233
|
-
@config.logger.info "Initialization is completed"
|
234
232
|
end
|
235
233
|
|
236
234
|
def wait_for_initialization
|
237
235
|
|
238
236
|
synchronize do
|
239
237
|
|
240
|
-
@config.logger.
|
238
|
+
@config.logger.debug "Waiting for initialization to finish"
|
241
239
|
|
242
240
|
until @initialized
|
243
241
|
|
@@ -249,7 +247,7 @@ class InnerClient < ClientCallback
|
|
249
247
|
raise "Initialization failed"
|
250
248
|
end
|
251
249
|
|
252
|
-
@config.logger.
|
250
|
+
@config.logger.debug "Waiting for initialization has completed"
|
253
251
|
end
|
254
252
|
end
|
255
253
|
|
@@ -257,10 +255,6 @@ class InnerClient < ClientCallback
|
|
257
255
|
|
258
256
|
def setup
|
259
257
|
|
260
|
-
@config.logger.info "SDK is not initialized yet! If store is used then values will be loaded from store" +
|
261
|
-
" otherwise default values will be used in meantime. You can use waitForInitialization method for SDK" +
|
262
|
-
" to be ready."
|
263
|
-
|
264
258
|
@repository = StorageRepository.new(@config.cache, @repository_callback, @config.store, @config.logger)
|
265
259
|
|
266
260
|
@metrics_callback = InnerClientMetricsCallback.new(self, @config.logger)
|
@@ -268,12 +262,13 @@ class InnerClient < ClientCallback
|
|
268
262
|
@metrics_processor.init(@connector, @config, @metrics_callback)
|
269
263
|
|
270
264
|
@evaluator = Evaluator.new(@repository, logger = @config.logger)
|
271
|
-
@evaluator_callback = InnerClientFlagEvaluateCallback.new(@metrics_processor, logger = @config.logger)
|
272
265
|
|
273
|
-
@
|
266
|
+
if @config.analytics_enabled
|
267
|
+
@evaluator_callback = InnerClientFlagEvaluateCallback.new(@metrics_processor, logger = @config.logger)
|
268
|
+
end
|
274
269
|
|
270
|
+
@auth_service = AuthService.new(
|
275
271
|
connector = @connector,
|
276
|
-
poll_interval_in_sec = @config.poll_interval_in_seconds,
|
277
272
|
callback = self,
|
278
273
|
logger = @config.logger
|
279
274
|
)
|
@@ -312,4 +307,5 @@ class InnerClient < ClientCallback
|
|
312
307
|
|
313
308
|
@my_mutex.synchronize(&block)
|
314
309
|
end
|
310
|
+
|
315
311
|
end
|
@@ -25,6 +25,6 @@ class InnerClientFlagEvaluateCallback < FlagEvaluateCallback
|
|
25
25
|
|
26
26
|
@logger.debug "Processing evaluation: " + feature_config.feature.to_s + ", " + target.identifier.to_s
|
27
27
|
|
28
|
-
@metrics_processor.
|
28
|
+
@metrics_processor.register_evaluation(target, feature_config, variation)
|
29
29
|
end
|
30
30
|
end
|
@@ -2,15 +2,27 @@ class MetricsEvent
|
|
2
2
|
|
3
3
|
attr_accessor :feature_config, :target, :variation
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
|
7
|
-
feature_config,
|
8
|
-
target,
|
9
|
-
variation
|
10
|
-
)
|
5
|
+
def initialize(feature_config, target, variation)
|
11
6
|
|
12
7
|
@target = target
|
13
8
|
@variation = variation
|
14
9
|
@feature_config = feature_config
|
10
|
+
freeze
|
11
|
+
end
|
12
|
+
|
13
|
+
def ==(other)
|
14
|
+
eql?(other)
|
15
|
+
end
|
16
|
+
|
17
|
+
def eql?(other)
|
18
|
+
feature_config.feature == other.feature_config.feature and
|
19
|
+
variation.identifier == other.variation.identifier and
|
20
|
+
target.identifier == other.target.identifier
|
15
21
|
end
|
22
|
+
|
23
|
+
def hash
|
24
|
+
feature_config.feature.hash | variation.identifier.hash | target.identifier.hash
|
25
|
+
end
|
26
|
+
|
27
|
+
|
16
28
|
end
|
@@ -4,30 +4,53 @@ require "concurrent-ruby"
|
|
4
4
|
require_relative "../dto/target"
|
5
5
|
require_relative "../../sdk/version"
|
6
6
|
require_relative "../common/closeable"
|
7
|
+
require_relative "../common/sdk_codes"
|
7
8
|
require_relative "../api/metrics_event"
|
8
9
|
require_relative "../api/summary_metrics"
|
9
10
|
|
10
11
|
class MetricsProcessor < Closeable
|
11
12
|
|
12
|
-
|
13
|
+
class FrequencyMap < Concurrent::Map
|
14
|
+
def initialize(options = nil, &block)
|
15
|
+
super
|
16
|
+
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
def increment(key)
|
19
|
+
compute(key) do |old_value|
|
20
|
+
if old_value == nil; 1 else old_value + 1 end
|
21
|
+
end
|
22
|
+
end
|
18
23
|
|
19
|
-
|
24
|
+
def get(key)
|
25
|
+
self[key]
|
26
|
+
end
|
27
|
+
|
28
|
+
def drain_to_map
|
29
|
+
result = {}
|
30
|
+
each_key do |key|
|
31
|
+
result[key] = 0
|
32
|
+
end
|
33
|
+
result.each_key do |key|
|
34
|
+
value = get_and_set(key, 0)
|
35
|
+
result[key] = value
|
36
|
+
delete_pair(key, 0)
|
37
|
+
end
|
38
|
+
result
|
39
|
+
end
|
40
|
+
end
|
20
41
|
|
42
|
+
|
43
|
+
def init(connector, config, callback)
|
44
|
+
|
45
|
+
unless connector.kind_of?(Connector)
|
21
46
|
raise "The 'connector' must be of '" + Connector.to_s + "' data type"
|
22
47
|
end
|
23
48
|
|
24
49
|
unless callback.kind_of?(MetricsCallback)
|
25
|
-
|
26
50
|
raise "The 'callback' must be of '" + MetricsCallback.to_s + "' data type"
|
27
51
|
end
|
28
52
|
|
29
53
|
unless config.kind_of?(Config)
|
30
|
-
|
31
54
|
raise "The 'config' must be of '" + Config.to_s + "' data type"
|
32
55
|
end
|
33
56
|
|
@@ -51,247 +74,151 @@ class MetricsProcessor < Closeable
|
|
51
74
|
@feature_name_attribute = "featureName"
|
52
75
|
@variation_identifier_attribute = "variationIdentifier"
|
53
76
|
|
54
|
-
@
|
55
|
-
|
77
|
+
@executor = Concurrent::FixedThreadPool.new(10)
|
78
|
+
|
79
|
+
@frequency_map = FrequencyMap.new
|
80
|
+
|
81
|
+
@max_buffer_size = config.buffer_size - 1
|
56
82
|
|
57
83
|
@callback.on_metrics_ready
|
58
84
|
end
|
59
85
|
|
60
86
|
def start
|
61
|
-
|
62
|
-
@config.logger.info "Starting metrics processor with request interval: " + @config.frequency.to_s
|
87
|
+
@config.logger.debug "Starting metrics processor with request interval: " + @config.frequency.to_s
|
63
88
|
start_async
|
64
89
|
end
|
65
90
|
|
66
91
|
def stop
|
67
|
-
|
68
|
-
@config.logger.info "Stopping metrics processor"
|
92
|
+
@config.logger.debug "Stopping metrics processor"
|
69
93
|
stop_async
|
70
94
|
end
|
71
95
|
|
72
96
|
def close
|
73
|
-
|
74
97
|
stop
|
75
|
-
@config.logger.
|
76
|
-
end
|
77
|
-
|
78
|
-
def push_to_queue(
|
79
|
-
|
80
|
-
target,
|
81
|
-
feature_config,
|
82
|
-
variation
|
83
|
-
)
|
84
|
-
|
85
|
-
@executor.post do
|
86
|
-
|
87
|
-
@config.logger.debug "Pushing to the metrics queue: START"
|
88
|
-
|
89
|
-
event = MetricsEvent.new(feature_config, target, variation)
|
90
|
-
@queue.push(event)
|
91
|
-
|
92
|
-
@config.logger.debug "Pushing to the metrics queue: END, queue size: " + @queue.size.to_s
|
93
|
-
|
94
|
-
end
|
98
|
+
@config.logger.debug "Closing metrics processor"
|
95
99
|
end
|
96
100
|
|
97
|
-
def
|
98
|
-
|
99
|
-
@config.logger.debug "Reading from queue and building cache"
|
100
|
-
|
101
|
-
@jar_version = get_version
|
102
|
-
|
103
|
-
unless data.empty?
|
104
|
-
|
105
|
-
map = {}
|
101
|
+
def register_evaluation(target, feature_config, variation)
|
106
102
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
if current != nil
|
113
|
-
|
114
|
-
new_value = current + 1
|
115
|
-
end
|
116
|
-
|
117
|
-
map[event] = new_value
|
118
|
-
end
|
119
|
-
|
120
|
-
metrics = prepare_summary_metrics_body(map)
|
121
|
-
|
122
|
-
if !metrics.metrics_data.empty? && !metrics.target_data.empty?
|
123
|
-
|
124
|
-
start_time = (Time.now.to_f * 1000).to_i
|
125
|
-
|
126
|
-
@connector.post_metrics(metrics)
|
127
|
-
|
128
|
-
end_time = (Time.now.to_f * 1000).to_i
|
129
|
-
|
130
|
-
if end_time - start_time > @config.metrics_service_acceptable_duration
|
131
|
-
|
132
|
-
@config.logger.debug "Metrics service API duration=[" + (end_time - start_time).to_s + "]"
|
133
|
-
end
|
103
|
+
if @frequency_map.size > @max_buffer_size
|
104
|
+
@config.logger.warn "metrics buffer is full #{@frequency_map.size} - flushing metrics"
|
105
|
+
@executor.post do
|
106
|
+
run_one_iteration
|
134
107
|
end
|
135
|
-
|
136
|
-
@global_target_set.merge(@staging_target_set)
|
137
|
-
@staging_target_set.clear
|
138
108
|
end
|
109
|
+
|
110
|
+
event = MetricsEvent.new(feature_config, target, variation)
|
111
|
+
@frequency_map.increment event
|
139
112
|
end
|
140
113
|
|
141
|
-
|
114
|
+
private
|
142
115
|
|
143
116
|
def run_one_iteration
|
117
|
+
send_data_and_reset_cache @frequency_map.drain_to_map
|
144
118
|
|
145
|
-
@config.logger.debug "
|
146
|
-
|
147
|
-
data = []
|
119
|
+
@config.logger.debug "metrics: frequency map size #{@frequency_map.size}. global target size #{@global_target_set.size}"
|
120
|
+
end
|
148
121
|
|
149
|
-
|
122
|
+
def send_data_and_reset_cache(map)
|
123
|
+
metrics = prepare_summary_metrics_body(map)
|
150
124
|
|
151
|
-
|
152
|
-
|
125
|
+
if !metrics.metrics_data.empty? && !metrics.target_data.empty?
|
126
|
+
start_time = (Time.now.to_f * 1000).to_i
|
127
|
+
@connector.post_metrics(metrics)
|
128
|
+
end_time = (Time.now.to_f * 1000).to_i
|
129
|
+
if end_time - start_time > @config.metrics_service_acceptable_duration
|
130
|
+
@config.logger.debug "Metrics service API duration=[" + (end_time - start_time).to_s + "]"
|
131
|
+
end
|
153
132
|
end
|
154
133
|
|
155
|
-
|
156
|
-
|
134
|
+
@global_target_set.merge(@staging_target_set)
|
135
|
+
@staging_target_set.clear
|
157
136
|
|
158
|
-
|
137
|
+
end
|
159
138
|
|
160
|
-
|
139
|
+
def prepare_summary_metrics_body(freq_map)
|
161
140
|
metrics = OpenapiClient::Metrics.new({ :target_data => [], :metrics_data => [] })
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
metrics,
|
166
|
-
Target.new(
|
167
|
-
|
168
|
-
name = @global_target_name,
|
169
|
-
identifier = @global_target
|
170
|
-
)
|
171
|
-
)
|
172
|
-
|
173
|
-
data.each do |key, value|
|
174
|
-
|
175
|
-
target = key.target
|
176
|
-
|
177
|
-
add_target_data(metrics, target)
|
178
|
-
|
179
|
-
summary_metrics = prepare_summary_metrics_key(key)
|
180
|
-
|
181
|
-
summary_metrics_data[summary_metrics] = value
|
141
|
+
add_target_data(metrics, Target.new(name = @global_target_name, identifier = @global_target))
|
142
|
+
freq_map.each_key do |key|
|
143
|
+
add_target_data(metrics, key.target)
|
182
144
|
end
|
183
|
-
|
184
|
-
|
185
|
-
|
145
|
+
total_count = 0
|
146
|
+
freq_map.each do |key, value|
|
147
|
+
total_count += value
|
186
148
|
metrics_data = OpenapiClient::MetricsData.new({ :attributes => [] })
|
187
149
|
metrics_data.timestamp = (Time.now.to_f * 1000).to_i
|
188
150
|
metrics_data.count = value
|
189
151
|
metrics_data.metrics_type = "FFMETRICS"
|
190
|
-
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @feature_name_attribute, :value => key.
|
191
|
-
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @variation_identifier_attribute, :value => key.
|
152
|
+
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @feature_name_attribute, :value => key.feature_config.feature }))
|
153
|
+
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @variation_identifier_attribute, :value => key.variation.identifier }))
|
192
154
|
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @target_attribute, :value => @global_target }))
|
193
155
|
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @sdk_type, :value => @server }))
|
194
156
|
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @sdk_language, :value => "ruby" }))
|
195
157
|
metrics_data.attributes.push(OpenapiClient::KeyValue.new({ :key => @sdk_version, :value => @jar_version }))
|
196
|
-
|
197
158
|
metrics.metrics_data.push(metrics_data)
|
198
159
|
end
|
160
|
+
@config.logger.debug "Pushed #{total_count} metric evaluations to server. metrics_data count is #{freq_map.size}"
|
199
161
|
|
200
162
|
metrics
|
201
163
|
end
|
202
164
|
|
203
|
-
private
|
204
|
-
|
205
|
-
def start_async
|
206
|
-
|
207
|
-
@config.logger.debug "Async starting: " + self.to_s
|
208
|
-
|
209
|
-
@ready = true
|
210
|
-
|
211
|
-
@thread = Thread.new do
|
212
|
-
|
213
|
-
@config.logger.debug "Async started: " + self.to_s
|
214
|
-
|
215
|
-
while @ready do
|
216
|
-
|
217
|
-
unless @initialized
|
218
|
-
|
219
|
-
@initialized = true
|
220
|
-
@config.logger.info "Metrics processor initialized"
|
221
|
-
end
|
222
|
-
|
223
|
-
sleep(@config.frequency)
|
224
|
-
|
225
|
-
run_one_iteration
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
@thread.run
|
230
|
-
end
|
231
|
-
|
232
|
-
def stop_async
|
233
|
-
|
234
|
-
@queue.clear
|
235
|
-
|
236
|
-
@ready = false
|
237
|
-
@initialized = false
|
238
|
-
end
|
239
|
-
|
240
|
-
def prepare_summary_metrics_key(key)
|
241
|
-
|
242
|
-
SummaryMetrics.new(
|
243
|
-
|
244
|
-
feature_name = key.feature_config.feature,
|
245
|
-
variation_identifier = key.variation.identifier,
|
246
|
-
variation_value = key.variation.value
|
247
|
-
)
|
248
|
-
end
|
249
|
-
|
250
165
|
def add_target_data(metrics, target)
|
251
166
|
|
252
167
|
target_data = OpenapiClient::TargetData.new({ :attributes => [] })
|
253
168
|
private_attributes = target.private_attributes
|
254
169
|
|
255
170
|
if !@staging_target_set.include?(target) && !@global_target_set.include?(target) && !target.is_private
|
256
|
-
|
257
171
|
@staging_target_set.add(target)
|
258
|
-
|
259
172
|
attributes = target.attributes
|
260
|
-
|
261
173
|
attributes.each do |k, v|
|
262
|
-
|
263
174
|
key_value = OpenapiClient::KeyValue.new
|
264
|
-
|
265
175
|
if !private_attributes.empty?
|
266
|
-
|
267
176
|
unless private_attributes.include?(k)
|
268
|
-
|
269
177
|
key_value = OpenapiClient::KeyValue.new({ :key => k, :value => v.to_s })
|
270
178
|
end
|
271
179
|
else
|
272
|
-
|
273
180
|
key_value = OpenapiClient::KeyValue.new({ :key => k, :value => v.to_s })
|
274
181
|
end
|
275
|
-
|
276
182
|
target_data.attributes.push(key_value)
|
277
183
|
end
|
278
|
-
|
279
184
|
target_data.identifier = target.identifier
|
280
|
-
|
281
185
|
if target.name == nil || target.name == ""
|
282
|
-
|
283
186
|
target_data.name = target.identifier
|
284
187
|
else
|
285
|
-
|
286
188
|
target_data.name = target.name
|
287
189
|
end
|
288
|
-
|
289
190
|
metrics.target_data.push(target_data)
|
290
191
|
end
|
291
192
|
end
|
292
193
|
|
293
|
-
def
|
194
|
+
def start_async
|
195
|
+
@config.logger.debug "Async starting: " + self.to_s
|
196
|
+
@ready = true
|
197
|
+
@thread = Thread.new do
|
198
|
+
@config.logger.debug "Async started: " + self.to_s
|
199
|
+
while @ready do
|
200
|
+
unless @initialized
|
201
|
+
@initialized = true
|
202
|
+
SdkCodes::info_metrics_thread_started @config.logger
|
203
|
+
end
|
204
|
+
sleep(@config.frequency)
|
205
|
+
run_one_iteration
|
206
|
+
end
|
207
|
+
end
|
208
|
+
@thread.run
|
209
|
+
end
|
294
210
|
|
211
|
+
def stop_async
|
212
|
+
@ready = false
|
213
|
+
@initialized = false
|
214
|
+
end
|
215
|
+
|
216
|
+
def get_version
|
295
217
|
Ff::Ruby::Server::Sdk::VERSION
|
296
218
|
end
|
219
|
+
|
220
|
+
def get_frequency_map
|
221
|
+
@frequency_map
|
222
|
+
end
|
223
|
+
|
297
224
|
end
|
@@ -29,13 +29,13 @@ class PollingProcessor < Closeable
|
|
29
29
|
|
30
30
|
flags = []
|
31
31
|
|
32
|
-
@logger.
|
32
|
+
@logger.debug "Fetching flags started"
|
33
33
|
|
34
34
|
result = @connector.get_flags
|
35
35
|
|
36
36
|
if result != nil
|
37
37
|
|
38
|
-
@logger.
|
38
|
+
@logger.debug "Flags are fetched"
|
39
39
|
|
40
40
|
result.each { |fc|
|
41
41
|
|
@@ -47,7 +47,7 @@ class PollingProcessor < Closeable
|
|
47
47
|
}
|
48
48
|
end
|
49
49
|
|
50
|
-
@logger.
|
50
|
+
@logger.debug "Fetching flags finished"
|
51
51
|
|
52
52
|
flags
|
53
53
|
end
|
@@ -56,13 +56,13 @@ class PollingProcessor < Closeable
|
|
56
56
|
|
57
57
|
segments = []
|
58
58
|
|
59
|
-
@logger.
|
59
|
+
@logger.debug "Fetching segments started"
|
60
60
|
|
61
61
|
result = @connector.get_segments
|
62
62
|
|
63
63
|
if result != nil
|
64
64
|
|
65
|
-
@logger.
|
65
|
+
@logger.debug "Segments are fetched"
|
66
66
|
|
67
67
|
result.each { |s|
|
68
68
|
|
@@ -74,7 +74,7 @@ class PollingProcessor < Closeable
|
|
74
74
|
}
|
75
75
|
end
|
76
76
|
|
77
|
-
@logger.
|
77
|
+
@logger.debug "Fetching segments finished"
|
78
78
|
|
79
79
|
segments
|
80
80
|
end
|
@@ -106,7 +106,7 @@ class PollingProcessor < Closeable
|
|
106
106
|
unless @initialized
|
107
107
|
|
108
108
|
@initialized = true
|
109
|
-
@logger
|
109
|
+
SdkCodes::info_poll_started(@logger, @poll_interval_in_sec)
|
110
110
|
|
111
111
|
if @callback != nil
|
112
112
|
|
@@ -137,17 +137,16 @@ class PollingProcessor < Closeable
|
|
137
137
|
|
138
138
|
def start
|
139
139
|
|
140
|
-
@logger.
|
140
|
+
@logger.debug "Starting PollingProcessor with request interval: " + @poll_interval_in_sec.to_s
|
141
141
|
start_async
|
142
142
|
end
|
143
143
|
|
144
144
|
def stop
|
145
145
|
|
146
|
-
@logger.
|
146
|
+
@logger.debug "Stopping PollingProcessor"
|
147
147
|
stop_async
|
148
148
|
unless @ready
|
149
|
-
|
150
|
-
@logger.info "PollingProcessor stopped"
|
149
|
+
SdkCodes::info_polling_stopped @logger
|
151
150
|
end
|
152
151
|
end
|
153
152
|
|
@@ -28,7 +28,7 @@ class UpdateProcessor < Closeable
|
|
28
28
|
|
29
29
|
def start
|
30
30
|
|
31
|
-
@logger.
|
31
|
+
@logger.debug "Starting updater (EventSource)"
|
32
32
|
|
33
33
|
if @updater != nil
|
34
34
|
|
@@ -105,8 +105,6 @@ class UpdateProcessor < Closeable
|
|
105
105
|
|
106
106
|
def process_flag(message)
|
107
107
|
|
108
|
-
@logger.info "Processing flag message: " + message.to_s
|
109
|
-
|
110
108
|
config = @connector.get_flag(message["identifier"])
|
111
109
|
|
112
110
|
if config != nil
|