network_resiliency 0.6.3 → 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: 8052be9b61b7e5b4a1106fb70275a788ad70ac19369064863ba9e14a266f7271
4
- data.tar.gz: 71c787616cd4d2da2e33cb49b9a41891940215afd978bb33d1efdeb6be6e0d88
3
+ metadata.gz: dda4e9b4c53597112ab927754e837d83a1e214afe622a4f0dc8ea85ee6aa3c9b
4
+ data.tar.gz: 572f76610038089107a2709e8ccdebf68ee9495bb1d6a93d13391257000cb108
5
5
  SHA512:
6
- metadata.gz: 5140b18fff31f7dd33da2cdc158b89c1e7e573f85ada027fea92adfe9f7a43cf2ac64889269cae102409e7d62aa89183ef11ba803e9c1e91d2d00478e0d9d7fd
7
- data.tar.gz: 4bcba60c3a1d0737f5765f8043939f9a6557bd0946afc18b266d418749abf7f8b3f7cb3b9bbc68b7dc92ff8d28b21750927a91331d882f1b1afefc967ddfaa48
6
+ metadata.gz: 91d8f1f41e57faa483d8ec1e18211a60d00a87b5355d2c930481eee04f074b2199ca2bbcf22c91353764708949ed870bdd3be31b59caf56646ac2be15c14bc93
7
+ data.tar.gz: 6272a3c665309e2e90f66e0ba578799b027372faf9e7a15c7bc9c7dda2112fa427b70cfd4bb11558b01161bd579f0bff1436da66898508396d692cf966bb91c5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### v0.6.5 (2023-11-28)
2
+ - per action modes
3
+
4
+ ### v0.6.4 (2023-11-27)
5
+ - request normalization context
6
+
1
7
  ### v0.6.3 (2023-11-27)
2
8
  - custom request normalization
3
9
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.6.3)
4
+ network_resiliency (0.6.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -20,7 +20,7 @@ module NetworkResiliency
20
20
 
21
21
  refine Net::HTTP do
22
22
  def normalize_path(path)
23
- NetworkResiliency.normalize_request(:http, path).gsub(
23
+ NetworkResiliency.normalize_request(:http, path, host: address).gsub(
24
24
  Regexp.union(
25
25
  NetworkResiliency::Adapter::HTTP::ID_REGEX,
26
26
  NetworkResiliency::Adapter::HTTP::UUID_REGEX,
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.6.3"
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,19 +93,43 @@ 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
- def normalize_request(adapter, request = nil, &block)
132
+ def normalize_request(adapter, request = nil, **context, &block)
108
133
  unless ADAPTERS.include?(adapter)
109
134
  raise ArgumentError, "invalid adapter: #{adapter}"
110
135
  end
@@ -113,13 +138,17 @@ module NetworkResiliency
113
138
  raise ArgumentError, "specify request or block, but not both"
114
139
  end
115
140
 
141
+ if request.nil? && !context.empty?
142
+ raise ArgumentError, "can not speficy context without request"
143
+ end
144
+
116
145
  @normalize_request ||= {}
117
146
  @normalize_request[adapter] ||= []
118
147
  @normalize_request[adapter] << block if block_given?
119
148
 
120
149
  if request
121
150
  @normalize_request[adapter].reduce(request) do |req, block|
122
- block.call(req)
151
+ block.call(req, **context)
123
152
  end
124
153
  else
125
154
  @normalize_request[adapter]
@@ -232,7 +261,7 @@ module NetworkResiliency
232
261
  def timeouts_for(adapter:, action:, destination:, max: nil, units: :ms)
233
262
  default = [ max ]
234
263
 
235
- return default if NetworkResiliency.mode == :observe
264
+ return default if NetworkResiliency.mode(action.to_sym) == :observe
236
265
 
237
266
  key = [ adapter, action, destination ].join(":")
238
267
  stats = StatsEngine.get(key)
@@ -278,7 +307,7 @@ module NetworkResiliency
278
307
  else
279
308
  timeouts << p99
280
309
 
281
- # timeouts << p99 * 10 if NetworkResiliency.mode == :resolute
310
+ # timeouts << p99 * 10 if NetworkResiliency.mode(action) == :resolute
282
311
 
283
312
  # unbounded second attempt
284
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.3
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