network_resiliency 0.4.1 → 0.5.0

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: 8949456e392f5198caa080238dff62a567114a9386d3a6f575fdb855fd5b5e98
4
- data.tar.gz: 95d58f753ccb7f4aa5ffe1093d98d0f5e33016bb7e06caa111a181d29c8ac5fb
3
+ metadata.gz: 4eb56ca7bf0ce8610999ebfa3d51ddb42c0d1781fdbb944f305e362c03bb0f9a
4
+ data.tar.gz: 9e40b02dfd30f3d60d0983586fe09842fab43a1decc1c419bf6b3b4f640c5613
5
5
  SHA512:
6
- metadata.gz: d1544a231ebcdd48c6838a8b398f3d4463c9cae2e18182c8e28fda3c4cfeba51b75b6e355342f98a16a51979da035d65040dffdd83e1bcd0273c636f14332236
7
- data.tar.gz: a90be5d5152dee3ce23ef7d682ce62dd495293e429d06494e5dcc91eb9cf3bf4a0bcf26b1cece0665815ab181394feff48016c9781e81b69408de3dca1572ec1
6
+ metadata.gz: f872730f5fd3e25bb405b24b5cc0c0e3a807c9c582ca70d8bbc3ee172cba6126433f2a3f7d116a9df059fe08a5f4215856a7e3318d50bc160ebecfd463387aa7
7
+ data.tar.gz: 8db779e5dd4fee001e9298806510351d6d0d0748ba0760d37acc9e205b6a425ea22a1f0757d26512a63936020baf764ec266620eb9cd6cbe23745abbb4f8acba
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ### v0.5.0 (2023-11-16)
2
+ - postgres timeout stats
3
+ - mysql timeout stats
4
+ - http resiliency
5
+
1
6
  ### v0.4.1 (2023-11-14)
2
7
  - timeout units
3
8
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.4.1)
4
+ network_resiliency (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -18,7 +18,7 @@ NetworkResiliency.configure do |conf|
18
18
  conf.patch :redis
19
19
  end
20
20
 
21
- Redis.new.connect
21
+ Redis.new.ping
22
22
  ```
23
23
 
24
24
 
@@ -18,23 +18,45 @@ module NetworkResiliency
18
18
  module Instrumentation
19
19
  def connect
20
20
  return super unless NetworkResiliency.enabled?(:http)
21
+ original_timeout = self.open_timeout
22
+
23
+ timeouts = NetworkResiliency.timeouts_for(
24
+ adapter: "http",
25
+ action: "connect",
26
+ destination: address,
27
+ max: original_timeout,
28
+ units: :seconds,
29
+ )
30
+
31
+ attempts = 0
32
+ ts = -NetworkResiliency.timestamp
21
33
 
22
34
  begin
23
- ts = -NetworkResiliency.timestamp
35
+ attempts += 1
36
+ error = nil
37
+
38
+ self.open_timeout = timeouts.shift
24
39
 
25
40
  super
26
41
  rescue Net::OpenTimeout => e
27
42
  # capture error
43
+ error = e.class
44
+
45
+ retry if timeouts.size > 0
46
+
28
47
  raise
29
48
  ensure
30
49
  ts += NetworkResiliency.timestamp
50
+ self.open_timeout = original_timeout
31
51
 
32
52
  NetworkResiliency.record(
33
53
  adapter: "http",
34
54
  action: "connect",
35
55
  destination: address,
36
- error: e&.class,
56
+ error: error,
37
57
  duration: ts,
58
+ timeout: self.open_timeout * 1_000,
59
+ attempts: attempts,
38
60
  )
39
61
  end
40
62
  end
@@ -18,8 +18,6 @@ module NetworkResiliency
18
18
 
19
19
  module Instrumentation
20
20
  def connect(_, _, host, *args)
21
- # timeout = query_options[:connect_timeout]
22
-
23
21
  return super unless NetworkResiliency.enabled?(:mysql)
24
22
 
25
23
  begin
@@ -38,11 +36,14 @@ module NetworkResiliency
38
36
  destination: host,
39
37
  error: e&.class,
40
38
  duration: ts,
39
+ timeout: query_options[:connect_timeout] * 1_000,
41
40
  )
42
41
  end
43
42
  end
44
43
 
45
44
  # def query(sql, options = {})
45
+ # query_options[:read_timeout]
46
+ # query_options[:write_timeout]
46
47
  # puts "query"
47
48
  # super
48
49
  # end
@@ -38,6 +38,7 @@ module NetworkResiliency
38
38
  destination: host,
39
39
  error: e&.class,
40
40
  duration: ts,
41
+ timeout: opts[:connect_timeout].to_i * 1_000,
41
42
  )
42
43
  end
43
44
  end
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -104,7 +104,7 @@ module NetworkResiliency
104
104
 
105
105
  # private
106
106
 
107
- def record(adapter:, action:, destination:, duration:, error:, timeout: nil, attempts: 1)
107
+ def record(adapter:, action:, destination:, duration:, error:, timeout:, attempts: 1)
108
108
  return if ignore_destination?(adapter, action, destination)
109
109
 
110
110
  NetworkResiliency.statsd&.distribution(
@@ -153,6 +153,7 @@ module NetworkResiliency
153
153
  tags: {
154
154
  adapter: adapter,
155
155
  destination: destination,
156
+ attempts: attempts,
156
157
  },
157
158
  ) if attempts > 1
158
159
 
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.4.1
4
+ version: 0.5.0
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-14 00:00:00.000000000 Z
11
+ date: 2023-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug