ff-ruby-server-sdk 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ff/ruby/server/sdk/api/metrics_processor.rb +28 -42
- data/lib/ff/ruby/server/sdk/version.rb +1 -1
- data/scripts/sdk_specs.sh +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21ede6e2de94f3ed2aec871c40b8dbee7a9feec6adbdec14726e5237caedbb0b
|
4
|
+
data.tar.gz: e89c0b57ae84666c87dccf6b25a67f0d0ca77990220ee014c9abe1a1225993c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 943c5b49c1bf887dd6ff24edce3e03cd2bff1badde8dd0802fdc8bda042e2e260b2cd7929c18189ec9dfb39f8b8189bec5b49e32ab021c722a17da71268bcccb
|
7
|
+
data.tar.gz: 5f32b626e8c49fd3074401db1ef6810acfb79b4cdba6f03e7f55e31a2a6e921b73ce273d71780f30dc90f18e74f691e4a203da6503bb0a473a60e49b0b56d37b
|
@@ -86,22 +86,17 @@ class MetricsProcessor < Closeable
|
|
86
86
|
# Keep track of targets that have already been sent to avoid sending them again
|
87
87
|
@seen_targets = Concurrent::Map.new
|
88
88
|
|
89
|
-
@max_buffer_size = config.buffer_size - 1
|
90
|
-
|
91
|
-
# Max 100k targets per interval
|
92
|
-
@max_targets_buffer_size = 100000
|
93
|
-
|
94
|
-
@evaluation_warning_issued = Concurrent::AtomicBoolean.new
|
95
|
-
@target_warning_issued = Concurrent::AtomicBoolean.new
|
96
|
-
|
97
89
|
@callback.on_metrics_ready
|
98
90
|
end
|
99
91
|
|
100
92
|
def start
|
101
|
-
@config.logger.debug "Starting metrics processor with request interval:
|
102
|
-
|
93
|
+
@config.logger.debug "Starting metrics processor with request interval: #{@config.frequency}"
|
94
|
+
if @running
|
95
|
+
@config.logger.warn "Metrics processor is already running."
|
96
|
+
else
|
97
|
+
start_async
|
98
|
+
end
|
103
99
|
end
|
104
|
-
|
105
100
|
def stop
|
106
101
|
@config.logger.debug "Stopping metrics processor"
|
107
102
|
stop_async
|
@@ -141,28 +136,13 @@ class MetricsProcessor < Closeable
|
|
141
136
|
return
|
142
137
|
end
|
143
138
|
|
144
|
-
|
145
|
-
if @evaluation_metrics.size > @max_buffer_size
|
146
|
-
unless @evaluation_warning_issued.true?
|
147
|
-
SdkCodes.warn_metrics_evaluations_max_size_exceeded(@config.logger)
|
148
|
-
@evaluation_warning_issued.make_true
|
149
|
-
end
|
150
|
-
return
|
151
|
-
end
|
152
|
-
|
153
139
|
event = MetricsEvent.new(feature_config, GLOBAL_TARGET, variation, @config.logger)
|
154
|
-
@
|
140
|
+
@metric_maps_mutex.synchronize do
|
141
|
+
@evaluation_metrics.increment event
|
142
|
+
end
|
155
143
|
end
|
156
144
|
|
157
145
|
def register_target_metric(target)
|
158
|
-
if @target_metrics.size > @max_targets_buffer_size
|
159
|
-
unless @target_warning_issued.true?
|
160
|
-
SdkCodes.warn_metrics_targets_max_size_exceeded(@config.logger)
|
161
|
-
@target_warning_issued.make_true
|
162
|
-
end
|
163
|
-
return
|
164
|
-
end
|
165
|
-
|
166
146
|
if target.is_private
|
167
147
|
return
|
168
148
|
end
|
@@ -173,40 +153,39 @@ class MetricsProcessor < Closeable
|
|
173
153
|
return
|
174
154
|
end
|
175
155
|
|
176
|
-
@
|
156
|
+
@metric_maps_mutex.synchronize do
|
157
|
+
@target_metrics.put(target.identifier, target)
|
158
|
+
end
|
177
159
|
end
|
178
160
|
|
179
161
|
def run_one_iteration
|
180
162
|
send_data_and_reset_cache(@evaluation_metrics, @target_metrics)
|
181
|
-
|
182
|
-
@config.logger.debug "metrics: frequency map size #{@evaluation_metrics.size}. targets map size #{@target_metrics.size} global target size #{@seen_targets.size}"
|
183
163
|
end
|
184
164
|
|
185
165
|
def send_data_and_reset_cache(evaluation_metrics_map, target_metrics_map)
|
186
|
-
|
187
|
-
evaluation_metrics_map_clone = Concurrent::Map.new
|
188
|
-
target_metrics_map_clone = Concurrent::Map.new
|
189
|
-
|
190
166
|
# A single lock is used to synchronise access to both the evaluation and target metrics maps.
|
191
167
|
# While separate locks could be applied to each map individually, we want an interval's eval/target
|
192
168
|
# metrics to be processed in an atomic unit.
|
193
|
-
@metric_maps_mutex.synchronize do
|
169
|
+
evaluation_metrics_map_clone, target_metrics_map_clone = @metric_maps_mutex.synchronize do
|
170
|
+
|
171
|
+
clone_evaluations = Concurrent::Map.new
|
172
|
+
clone_targets = Concurrent::Map.new
|
194
173
|
# Clone and clear evaluation metrics map
|
195
174
|
evaluation_metrics_map.each_pair do |key, value|
|
196
|
-
|
175
|
+
clone_evaluations[key] = value
|
197
176
|
end
|
198
177
|
|
199
178
|
evaluation_metrics_map.clear
|
200
179
|
|
201
180
|
target_metrics_map.each_pair do |key, value|
|
202
|
-
|
181
|
+
clone_targets[key] = value
|
203
182
|
end
|
204
183
|
|
205
184
|
target_metrics_map.clear
|
206
|
-
end
|
207
185
|
|
208
|
-
|
209
|
-
|
186
|
+
[clone_evaluations, clone_targets]
|
187
|
+
|
188
|
+
end
|
210
189
|
|
211
190
|
metrics = prepare_summary_metrics_body(evaluation_metrics_map_clone, target_metrics_map_clone)
|
212
191
|
|
@@ -294,6 +273,7 @@ class MetricsProcessor < Closeable
|
|
294
273
|
def start_async
|
295
274
|
@config.logger.debug "Async starting: " + self.to_s
|
296
275
|
@ready = true
|
276
|
+
@running = true
|
297
277
|
@thread = Thread.new do
|
298
278
|
@config.logger.debug "Async started: " + self.to_s
|
299
279
|
while @ready do
|
@@ -311,8 +291,14 @@ class MetricsProcessor < Closeable
|
|
311
291
|
def stop_async
|
312
292
|
@ready = false
|
313
293
|
@initialized = false
|
294
|
+
if @thread && @thread.alive?
|
295
|
+
@thread.join
|
296
|
+
@config.logger.debug "Metrics processor thread has been stopped."
|
297
|
+
end
|
298
|
+
@running = false
|
314
299
|
end
|
315
300
|
|
301
|
+
|
316
302
|
def get_version
|
317
303
|
Ff::Ruby::Server::Sdk::VERSION
|
318
304
|
end
|
data/scripts/sdk_specs.sh
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ff-ruby-server-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 'Miloš Vasić, cyr.: Милош Васић'
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|