network_resiliency 0.6.4 → 0.6.6

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: 3a117a433190255f909972c26e9e0e9ce40cf9514f5fedd957f5dbdd85579506
4
+ data.tar.gz: e4f400b0a755df561089df6d5e771e63d1cbc4036ebe34e7588bd8073c11616c
5
5
  SHA512:
6
- metadata.gz: a995769d78fbdaeff1ca869f277eaf1aafcf46531b0eb9c35b31e9782f9d4ded7c7f88ba50c6c88f95a0e4e356c1b4aa6e11a55a8a7b04a4622e79751174d9d4
7
- data.tar.gz: 1e98ffcc20016e723802c9ce6ef2730357d7bf98fb7d86b24a057830f59f2f0fed946c21c0d8a3c4292af9b3013f49f21419e0dba1cbcf40251169c66fe6a4dc
6
+ metadata.gz: 6b9e8785746b244b51698b4561e377bbb4ea919e6963949e4de017a1ad044a86eb6a92f7ceb9e7903ed4dd44eec998b5512d02045567eb427256c3a7508cf5df
7
+ data.tar.gz: ad266433a748c586f249b344f28bf77ea2df57f7a75fa56cb7b443eb1cd5a4fd0200b7a043e019568f40a869a9c8a07bd380895e72b9646f65fa75c192632ad7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ### v0.6.6 (2023-11-29)
2
+ - path normalization
3
+ - http destination ordering
4
+
5
+ ### v0.6.5 (2023-11-28)
6
+ - per action modes
7
+
1
8
  ### v0.6.4 (2023-11-27)
2
9
  - request normalization context
3
10
 
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.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -104,10 +104,13 @@ module NetworkResiliency
104
104
  def transport_request(req, &block)
105
105
  return super unless NetworkResiliency.enabled?(:http)
106
106
 
107
+ # strip query params
108
+ path = URI.parse(req.path).path
109
+
107
110
  destination = [
108
- req.method.downcase,
109
111
  address,
110
- normalize_path(req.path),
112
+ req.method.downcase,
113
+ normalize_path(path),
111
114
  ].join(":")
112
115
 
113
116
  idepotent = Net::HTTP::IDEMPOTENT_METHODS_.include?(req.method)
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.6"
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)
@@ -226,7 +251,7 @@ module NetworkResiliency
226
251
  warn "[ERROR] NetworkResiliency: #{e.class}: #{e.message}"
227
252
  end
228
253
 
229
- IP_ADDRESS_REGEX = Regexp.new(/\d{1,3}(\.\d{1,3}){3}/)
254
+ IP_ADDRESS_REGEX = /\d{1,3}(\.\d{1,3}){3}/
230
255
 
231
256
  def ignore_destination?(adapter, action, destination)
232
257
  # filter raw IP addresses
@@ -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.6
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-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug