network_resiliency 0.6.4 → 0.6.5

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: 46125649099a417a46eaf119d48686bbed8090d4840ee13d607372e93df2df6a
4
- data.tar.gz: 5e38386f5e8616d452383d007b97e4e2a4ae0895ad22eddadc8dcda28081da77
3
+ metadata.gz: dda4e9b4c53597112ab927754e837d83a1e214afe622a4f0dc8ea85ee6aa3c9b
4
+ data.tar.gz: 572f76610038089107a2709e8ccdebf68ee9495bb1d6a93d13391257000cb108
5
5
  SHA512:
6
- metadata.gz: a995769d78fbdaeff1ca869f277eaf1aafcf46531b0eb9c35b31e9782f9d4ded7c7f88ba50c6c88f95a0e4e356c1b4aa6e11a55a8a7b04a4622e79751174d9d4
7
- data.tar.gz: 1e98ffcc20016e723802c9ce6ef2730357d7bf98fb7d86b24a057830f59f2f0fed946c21c0d8a3c4292af9b3013f49f21419e0dba1cbcf40251169c66fe6a4dc
6
+ metadata.gz: 91d8f1f41e57faa483d8ec1e18211a60d00a87b5355d2c930481eee04f074b2199ca2bbcf22c91353764708949ed870bdd3be31b59caf56646ac2be15c14bc93
7
+ data.tar.gz: 6272a3c665309e2e90f66e0ba578799b027372faf9e7a15c7bc9c7dda2112fa427b70cfd4bb11558b01161bd579f0bff1436da66898508396d692cf966bb91c5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ### v0.6.5 (2023-11-28)
2
+ - per action modes
3
+
1
4
  ### v0.6.4 (2023-11-27)
2
5
  - request normalization context
3
6
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.6.4)
4
+ network_resiliency (0.6.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.5"
3
3
  end
@@ -15,6 +15,7 @@ module NetworkResiliency
15
15
  autoload :Postgres, "network_resiliency/adapter/postgres"
16
16
  end
17
17
 
18
+ ACTIONS = [ :connect, :request ].freeze
18
19
  ADAPTERS = [ :http, :faraday, :redis, :mysql, :postgres ].freeze
19
20
  MODE = [ :observe, :resilient ].freeze
20
21
  RESILIENCY_SIZE_THRESHOLD = 1_000
@@ -92,16 +93,40 @@ module NetworkResiliency
92
93
  Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1_000
93
94
  end
94
95
 
95
- def mode
96
- @mode || :observe
96
+ def mode(action)
97
+ unless ACTIONS.include?(action)
98
+ raise ArgumentError, "invalid NetworkResiliency action: #{action}"
99
+ end
100
+
101
+ (@mode && @mode[action]) || :observe
97
102
  end
98
103
 
99
104
  def mode=(mode)
100
- unless MODE.include?(mode)
101
- raise ArgumentError, "invalid NetworkResiliency mode: #{mode}"
105
+ @mode = {}
106
+
107
+ if mode.is_a?(Hash)
108
+ invalid = mode.keys - ACTIONS
109
+
110
+ unless invalid.empty?
111
+ raise ArgumentError, "invalid actions for mode: #{invalid}"
112
+ end
113
+
114
+ mode.each do |action, mode|
115
+ unless MODE.include?(mode)
116
+ raise ArgumentError, "invalid NetworkResiliency mode for #{action}: #{mode}"
117
+ end
118
+
119
+ @mode[action] = mode
120
+ end
121
+ else
122
+ unless MODE.include?(mode)
123
+ raise ArgumentError, "invalid NetworkResiliency mode: #{mode}"
124
+ end
125
+
126
+ ACTIONS.each { |action| @mode[action] = mode }
102
127
  end
103
128
 
104
- @mode = mode
129
+ @mode.freeze
105
130
  end
106
131
 
107
132
  def normalize_request(adapter, request = nil, **context, &block)
@@ -236,7 +261,7 @@ module NetworkResiliency
236
261
  def timeouts_for(adapter:, action:, destination:, max: nil, units: :ms)
237
262
  default = [ max ]
238
263
 
239
- return default if NetworkResiliency.mode == :observe
264
+ return default if NetworkResiliency.mode(action.to_sym) == :observe
240
265
 
241
266
  key = [ adapter, action, destination ].join(":")
242
267
  stats = StatsEngine.get(key)
@@ -282,7 +307,7 @@ module NetworkResiliency
282
307
  else
283
308
  timeouts << p99
284
309
 
285
- # timeouts << p99 * 10 if NetworkResiliency.mode == :resolute
310
+ # timeouts << p99 * 10 if NetworkResiliency.mode(action) == :resolute
286
311
 
287
312
  # unbounded second attempt
288
313
  timeouts << nil
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.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-27 00:00:00.000000000 Z
11
+ date: 2023-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug