network_resiliency 0.7.13 → 0.7.15
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/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/lib/network_resiliency/version.rb +1 -1
- data/lib/network_resiliency.rb +29 -4
- 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: 61590ba8f759273c9da124ffec0f12b42cc49663d14d6bf1bd75ebb4d73639b2
|
4
|
+
data.tar.gz: 2dbd88e94b47a53990fb2328f65cc614be4cb8580e91e17afac0b35f06db281a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca543341cabe254a16b9cb3d035640c29b719bc721a542d3cfd6bc764af8fd20dfa6fb3f57cd2662997f3b5270574b729ae2402b49625a946c37f3c10633de60
|
7
|
+
data.tar.gz: 232af6a8de1a7ef893e0e1d745d4d12980fc71cb31156c591584ab38967993168986a9778b41ad842eae363704e3b7e49d9ec8d90755a41da056478046d0b242
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/lib/network_resiliency.rb
CHANGED
@@ -19,8 +19,9 @@ module NetworkResiliency
|
|
19
19
|
|
20
20
|
ACTIONS = [ :connect, :request ].freeze
|
21
21
|
ADAPTERS = [ :http, :faraday, :redis, :mysql, :postgres, :rails ].freeze
|
22
|
+
DEFAULT_TIMEOUT_MIN = 10 # ms
|
22
23
|
MODE = [ :observe, :resilient ].freeze
|
23
|
-
|
24
|
+
RESILIENCY_THRESHOLD = 100
|
24
25
|
SAMPLE_RATE = {
|
25
26
|
timeout: 0.1,
|
26
27
|
stats: 0.1,
|
@@ -216,6 +217,18 @@ module NetworkResiliency
|
|
216
217
|
end
|
217
218
|
end
|
218
219
|
|
220
|
+
def timeout_min=(val)
|
221
|
+
unless val.nil? || val.is_a?(Numeric)
|
222
|
+
raise ArgumentError, "invalid timeout_min: #{val}"
|
223
|
+
end
|
224
|
+
|
225
|
+
@timeout_min = val
|
226
|
+
end
|
227
|
+
|
228
|
+
def timeout_min
|
229
|
+
@timeout_min || DEFAULT_TIMEOUT_MIN
|
230
|
+
end
|
231
|
+
|
219
232
|
# private
|
220
233
|
|
221
234
|
def record(adapter:, action:, destination:, duration:, error:, timeout:, attempts: 1)
|
@@ -258,7 +271,7 @@ module NetworkResiliency
|
|
258
271
|
key = [ adapter, action, destination ].join(":")
|
259
272
|
stats = StatsEngine.add(key, duration)
|
260
273
|
|
261
|
-
if stats.n >
|
274
|
+
if stats.n > RESILIENCY_THRESHOLD * 5
|
262
275
|
# downsample to age out old stats
|
263
276
|
stats.scale!(50)
|
264
277
|
end
|
@@ -317,7 +330,7 @@ module NetworkResiliency
|
|
317
330
|
key = [ adapter, action, destination ].join(":")
|
318
331
|
stats = StatsEngine.get(key)
|
319
332
|
|
320
|
-
return default unless stats.n >=
|
333
|
+
return default unless stats.n >= RESILIENCY_THRESHOLD
|
321
334
|
|
322
335
|
tags = {
|
323
336
|
adapter: adapter,
|
@@ -325,7 +338,18 @@ module NetworkResiliency
|
|
325
338
|
destination: destination,
|
326
339
|
}
|
327
340
|
|
328
|
-
p99 = (stats.avg + stats.stdev *
|
341
|
+
p99 = (stats.avg + stats.stdev * 3)
|
342
|
+
|
343
|
+
# add margin of error / normalize
|
344
|
+
p99 = if stats.n >= RESILIENCY_THRESHOLD * 2
|
345
|
+
p99.power_ceil
|
346
|
+
else
|
347
|
+
# larger margin of error
|
348
|
+
p99.order_of_magnitude(ceil: true)
|
349
|
+
end
|
350
|
+
|
351
|
+
# enforce minimum timeout
|
352
|
+
p99 = [ p99, timeout_min ].max
|
329
353
|
|
330
354
|
timeouts = []
|
331
355
|
|
@@ -402,6 +426,7 @@ module NetworkResiliency
|
|
402
426
|
@mode = nil
|
403
427
|
@normalize_request = nil
|
404
428
|
@patched = nil
|
429
|
+
@timeout_min = nil
|
405
430
|
Thread.current["network_resiliency"] = nil
|
406
431
|
StatsEngine.reset
|
407
432
|
Syncer.stop
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: network_resiliency
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Pepper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|