network_resiliency 0.6.4 → 0.6.6

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: 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