network_resiliency 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
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