network_resiliency 0.2.0 → 0.3.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: b26da5cafa1321e4b284d8b3ade1184d4423973f388b1e4288b3be3d79153c3b
4
- data.tar.gz: 6a4588995b8fdab21e424235bb31d2d83bef8d6b43d2b4ab1f9f3e9df08e19cf
3
+ metadata.gz: fb3d39476429afedf4ec8532e509dd25d0c121e21fa59f36b69bad40a0985dc6
4
+ data.tar.gz: 2ef67d94b01e34a758ae52117e1e9ac5eb9fa8901841d5bcb9ef7c1cc3011f6f
5
5
  SHA512:
6
- metadata.gz: d6b110ad5631918d1077f4ba77a63da113fa9b19f156f439f6b46a2f8817d770740e157d07d7752b443568b3d1f86f416ff707d3ff0598a71b0355dabf1aa0c8
7
- data.tar.gz: ab91f3ac1febb0504b8b0a64f0f12014636fd86bfc1ea3f1c1904a38660b8be791cc07835fed7154775d150bbc131243f4e892e255ecd7a96f68dbd7d1cd637a
6
+ metadata.gz: b3c19d756696ab7d4d0a11e13d6d99c70a27bd2414774e71eb31147e08685e74da0a4f5b56d15260cbbc0faf9e954b1976db307f116a47208697e83d2ff3f7ef
7
+ data.tar.gz: 28a018c2ad35c15e01309da7a4f0368a67f4c21aacaba8f81fbc1fb2b41435fea368b98ec84274fca03e406416f9fa6eb403e0426adb046ba9a8ea1ae826bd83
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ### v0.3.0 (2023-10-04)
2
+ - mysql adapter
3
+ - faraday version constraint
4
+
5
+ ### v0.2.1 (2023-10-02)
6
+ - prevent recursion
7
+ - test coverage
8
+
1
9
  ### v0.2.0 (2023-10-01)
2
10
  - high level patch
3
11
  - redis adapter
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.2.0)
4
+ network_resiliency (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -45,6 +45,7 @@ GEM
45
45
  ffi (~> 1.0)
46
46
  msgpack (1.7.2)
47
47
  multipart-post (2.3.0)
48
+ mysql2 (0.5.5)
48
49
  rack (3.0.8)
49
50
  rack-test (2.1.0)
50
51
  rack (>= 1.3)
@@ -79,6 +80,7 @@ DEPENDENCIES
79
80
  dogstatsd-ruby (<= 4.8.3)
80
81
  faraday (~> 1)
81
82
  faraday-rack
83
+ mysql2 (>= 0.5)
82
84
  network_resiliency!
83
85
  rack
84
86
  rack-test
@@ -1,3 +1,4 @@
1
+ gem "faraday", "~> 1.10"
1
2
  require "faraday"
2
3
 
3
4
  module NetworkResiliency
@@ -0,0 +1,52 @@
1
+ gem "mysql2", ">= 0.5"
2
+ require "mysql2"
3
+
4
+ module NetworkResiliency
5
+ module Adapter
6
+ module Mysql
7
+ extend self
8
+
9
+ def patch
10
+ return if patched?
11
+
12
+ Mysql2::Client.prepend(Instrumentation)
13
+ end
14
+
15
+ def patched?
16
+ Mysql2::Client.ancestors.include?(Instrumentation)
17
+ end
18
+
19
+ module Instrumentation
20
+ def connect(_, _, host, *args)
21
+ # timeout = query_options[:connect_timeout]
22
+
23
+ return super unless NetworkResiliency.enabled?(:mysql)
24
+
25
+ begin
26
+ ts = -NetworkResiliency.timestamp
27
+
28
+ super
29
+ rescue Mysql2::Error::TimeoutError => e
30
+ # capture error
31
+ raise
32
+ ensure
33
+ ts += NetworkResiliency.timestamp
34
+
35
+ NetworkResiliency.record(
36
+ adapter: "mysql",
37
+ action: "connect",
38
+ destination: host,
39
+ error: e&.class,
40
+ duration: ts,
41
+ )
42
+ end
43
+ end
44
+
45
+ # def query(sql, options = {})
46
+ # puts "query"
47
+ # super
48
+ # end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -5,6 +5,7 @@ module NetworkResiliency
5
5
  autoload :HTTP, "network_resiliency/adapter/http"
6
6
  autoload :Faraday, "network_resiliency/adapter/faraday"
7
7
  autoload :Redis, "network_resiliency/adapter/redis"
8
+ autoload :Mysql, "network_resiliency/adapter/mysql"
8
9
  end
9
10
 
10
11
  extend self
@@ -22,6 +23,8 @@ module NetworkResiliency
22
23
  Adapter::HTTP.patch
23
24
  when :redis
24
25
  Adapter::Redis.patch
26
+ when :mysql
27
+ Adapter::Mysql.patch
25
28
  else
26
29
  raise NotImplementedError
27
30
  end
@@ -31,7 +34,13 @@ module NetworkResiliency
31
34
  def enabled?(adapter)
32
35
  return true if @enabled.nil?
33
36
 
34
- @enabled.is_a?(Proc) ? !!@enabled.call(adapter) : @enabled
37
+ if @enabled.is_a?(Proc)
38
+ # prevent recursive calls
39
+ enabled = @enabled
40
+ disable! { !!enabled.call(adapter) }
41
+ else
42
+ @enabled
43
+ end
35
44
  rescue
36
45
  false
37
46
  end
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.add_development_dependency "dogstatsd-ruby", "<= 4.8.3"
19
19
  s.add_development_dependency "faraday", "~> 1"
20
20
  s.add_development_dependency "faraday-rack"
21
+ s.add_development_dependency "mysql2", ">= 0.5"
21
22
  s.add_development_dependency "rack"
22
23
  s.add_development_dependency "rack-test"
23
24
  s.add_development_dependency "redis", "~> 4"
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.2.0
4
+ version: 0.3.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-10-01 00:00:00.000000000 Z
11
+ date: 2023-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mysql2
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0.5'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rack
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,7 @@ files:
164
178
  - lib/network_resiliency.rb
165
179
  - lib/network_resiliency/adapter/faraday.rb
166
180
  - lib/network_resiliency/adapter/http.rb
181
+ - lib/network_resiliency/adapter/mysql.rb
167
182
  - lib/network_resiliency/adapter/redis.rb
168
183
  - lib/network_resiliency/stats.rb
169
184
  - lib/network_resiliency/version.rb