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 +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/lib/network_resiliency/adapter/http.rb +5 -2
- data/lib/network_resiliency/version.rb +1 -1
- data/lib/network_resiliency.rb +33 -8
- 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: 3a117a433190255f909972c26e9e0e9ce40cf9514f5fedd957f5dbdd85579506
|
|
4
|
+
data.tar.gz: e4f400b0a755df561089df6d5e771e63d1cbc4036ebe34e7588bd8073c11616c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6b9e8785746b244b51698b4561e377bbb4ea919e6963949e4de017a1ad044a86eb6a92f7ceb9e7903ed4dd44eec998b5512d02045567eb427256c3a7508cf5df
|
|
7
|
+
data.tar.gz: ad266433a748c586f249b344f28bf77ea2df57f7a75fa56cb7b443eb1cd5a4fd0200b7a043e019568f40a869a9c8a07bd380895e72b9646f65fa75c192632ad7
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -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
|
-
|
|
112
|
+
req.method.downcase,
|
|
113
|
+
normalize_path(path),
|
|
111
114
|
].join(":")
|
|
112
115
|
|
|
113
116
|
idepotent = Net::HTTP::IDEMPOTENT_METHODS_.include?(req.method)
|
data/lib/network_resiliency.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
101
|
-
|
|
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
|
|
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 =
|
|
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
|
+
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-
|
|
11
|
+
date: 2023-11-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: byebug
|