network_resiliency 0.7.0 → 0.7.2

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: 0b05ddc43d74cc05325b32b3a45cbc1377bee1228c2c2f8ad7f2fd717ed7b49f
4
- data.tar.gz: 8a9b5274e52a3ebc039f00e4aad18af9a7c2e645a7a246fd9e45cc474bbfb50b
3
+ metadata.gz: 3fbdde9b2b967bdd814332b72632f80105732dfa47fed9269ffaca1fce25dc52
4
+ data.tar.gz: '0689f5aaa5d36e202fbd0a8ded08ccda0aa32692c1ac417e93684e86cf26c1d1'
5
5
  SHA512:
6
- metadata.gz: ffe3b488a66c2721a25a3a995a007ff89a822d4ea2b85638b370535a4895968c5e74084ef89ee7a9bc97a325beba410f74e4ce2ecf4c941e99b00bc3f07daf4a
7
- data.tar.gz: 5632e5111b856b1fc9d34b31f8d099b584491dbb9beb623ddcff016a058b8f839900fe65554ef60619930843b5b98c4137b92f15722c5040547632b91ec5ac7e
6
+ metadata.gz: aca4bccb8d3b3a4702d3f94c5d87da3fc3ce82a0a53aa95ae235de39b6859489e5eebf7e23db8eb56c1f6d74a985b3c9e87ec6dc13e774e068ed082b721f4058
7
+ data.tar.gz: 533e9eb40b701c508817e4d072111fa3357a66cb44fa3d3e15c386cc4e41531ae5891ebe91f1a52bd0b88678a495d9efca973b3e7c355181f503cbea34cb131a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ### v0.7.2 (2023-12-13)
2
+ - dynamic timeout stats
3
+ - deadline metric
4
+
5
+ ### v0.7.1 (2023-12-12)
6
+ - observe! and fix mode recursion
7
+
1
8
  ### v0.7.0 (2023-12-11)
2
9
  - proc support for mode
3
10
  - rails adapater and deadline
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.7.0)
4
+ network_resiliency (0.7.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -87,16 +87,16 @@ GEM
87
87
  concurrent-ruby (1.2.2)
88
88
  connection_pool (2.4.1)
89
89
  crass (1.0.6)
90
- datadog-ci (0.2.0)
90
+ datadog-ci (0.5.1)
91
91
  msgpack
92
92
  date (3.3.4)
93
- ddtrace (1.15.0)
94
- datadog-ci (~> 0.2.0)
95
- debase-ruby_core_source (= 3.2.2)
93
+ ddtrace (1.18.0)
94
+ datadog-ci (~> 0.5.0)
95
+ debase-ruby_core_source (= 3.2.3)
96
96
  libdatadog (~> 5.0.0.1.0)
97
97
  libddwaf (~> 1.14.0.0.0)
98
98
  msgpack
99
- debase-ruby_core_source (3.2.2)
99
+ debase-ruby_core_source (3.2.3)
100
100
  diff-lcs (1.5.0)
101
101
  docile (1.4.0)
102
102
  dogstatsd-ruby (4.8.3)
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.2"
3
3
  end
@@ -66,8 +66,7 @@ module NetworkResiliency
66
66
 
67
67
  if @enabled.is_a?(Proc)
68
68
  # prevent recursive calls
69
- enabled = @enabled
70
- disable! { !!enabled.call(adapter) }
69
+ disable! { !!@enabled.call(adapter) }
71
70
  else
72
71
  @enabled
73
72
  end
@@ -84,7 +83,6 @@ module NetworkResiliency
84
83
  end
85
84
 
86
85
  def enable!
87
- original = @enabled
88
86
  thread_state["enabled"] = true
89
87
 
90
88
  yield if block_given?
@@ -93,7 +91,6 @@ module NetworkResiliency
93
91
  end
94
92
 
95
93
  def disable!
96
- original = @enabled
97
94
  thread_state["enabled"] = false
98
95
 
99
96
  yield if block_given?
@@ -111,8 +108,11 @@ module NetworkResiliency
111
108
  raise ArgumentError, "invalid NetworkResiliency action: #{action}"
112
109
  end
113
110
 
111
+ return thread_state[:mode] if thread_state.key?(:mode)
112
+
114
113
  mode = if @mode.is_a?(Proc)
115
- @mode.call(action)
114
+ # prevent recursion
115
+ observe! { @mode.call(action) }
116
116
  elsif @mode
117
117
  @mode[action]
118
118
  end || :observe
@@ -164,7 +164,15 @@ module NetworkResiliency
164
164
  ACTIONS.each { |action| @mode[action] = mode }
165
165
  end
166
166
 
167
- @mode.freeze
167
+ @mode.freeze if @mode.is_a?(Hash)
168
+ end
169
+
170
+ def observe!
171
+ thread_state[:mode] = :observe
172
+
173
+ yield if block_given?
174
+ ensure
175
+ thread_state.delete(:mode) if block_given?
168
176
  end
169
177
 
170
178
  def deadline
@@ -226,6 +234,7 @@ module NetworkResiliency
226
234
  error: error,
227
235
  mode: mode(action),
228
236
  attempts: (attempts if attempts > 1),
237
+ deadline_exceeded: (Time.now >= deadline if deadline),
229
238
  }.compact,
230
239
  )
231
240
 
@@ -313,6 +322,16 @@ module NetworkResiliency
313
322
  }
314
323
 
315
324
  p99 = (stats.avg + stats.stdev * 3).power_ceil
325
+
326
+ NetworkResiliency.statsd&.gauge(
327
+ "network_resiliency.#{action}.timeout.dynamic",
328
+ p99,
329
+ tags: {
330
+ adapter: adapter,
331
+ destination: destination,
332
+ },
333
+ )
334
+
316
335
  timeouts = []
317
336
 
318
337
  if max
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.7.0
4
+ version: 0.7.2
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-12-11 00:00:00.000000000 Z
11
+ date: 2023-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug