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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d40a21b8332b96f4c3f507f2adece4bc12a9475fb87518323c3b79f959d2782a
4
- data.tar.gz: 4be776d630a6c97cc563e801b74b8c25e6250ea3611fa83b6a1b26274ead4d06
3
+ metadata.gz: 21ede6e2de94f3ed2aec871c40b8dbee7a9feec6adbdec14726e5237caedbb0b
4
+ data.tar.gz: e89c0b57ae84666c87dccf6b25a67f0d0ca77990220ee014c9abe1a1225993c9
5
5
  SHA512:
6
- metadata.gz: d11cd5ae4daddce986eae1faa3ca10d16e68a0c708e4e15131d0ee74883e67bac88af39cedfa1ee5497f7ac916bfd270bd8067bcbf71c3e90de242520ff49cd1
7
- data.tar.gz: bfc9bc6662bc500c25281c36bb9d8352ba16bdf8ad9f43c06b44074aa4ff791e2ddb8e1e84b1796bd4fb10bfe819190d6eb33bde7ac315eff02e918784653fcb
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: " + @config.frequency.to_s
102
- start_async
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
- @evaluation_metrics.increment event
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
- @target_metrics.put(target.identifier, target)
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
- evaluation_metrics_map_clone[key] = value
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
- target_metrics_map_clone[key] = value
181
+ clone_targets[key] = value
203
182
  end
204
183
 
205
184
  target_metrics_map.clear
206
- end
207
185
 
208
- @evaluation_warning_issued.make_false
209
- @target_warning_issued.make_false
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
@@ -5,7 +5,7 @@ module Ff
5
5
  module Server
6
6
  module Sdk
7
7
 
8
- VERSION = "1.4.2"
8
+ VERSION = "1.4.3"
9
9
  end
10
10
  end
11
11
  end
data/scripts/sdk_specs.sh CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/bin/bash
2
2
 
3
3
  export ff_ruby_sdk="ff-ruby-server-sdk"
4
- export ff_ruby_sdk_version="1.4.2"
4
+ export ff_ruby_sdk_version="1.4.3"
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.2
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-12 00:00:00.000000000 Z
11
+ date: 2024-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake