cb2 0.0.2 → 0.0.3
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 +5 -13
- data/lib/cb2/breaker.rb +9 -1
- data/lib/cb2/strategies/percentage.rb +1 -1
- data/lib/cb2/strategies/rolling_window.rb +18 -6
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDEzYjJjMTA5YTIxZDE2MDRkOWRiNzk0ZjQ3NDlkYzZhMmYwOTdiMA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7745238479e3b771cd4250afd72b38628690b89c
|
4
|
+
data.tar.gz: 4a52b01231637cbfce2e2ab95f5a1ef05137a525
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MjQyYjRlZTJhNDFiMDIzYzQxZjRjNTU4YTQzNDNjMzAzZTk1NzZhNmQ1MWZh
|
11
|
-
ZWI5MmFmN2MxMTEzOTczZWY0MGMwOWIwMzMyNWM0ZmJmNjgyYmQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MWQwYjA0Mzk1NTgxYWRiZmVkZmYwYzZlMDY5NTkwYTBlYWEzZDk5Mjc3ZTNl
|
14
|
-
MmE2ZjFmYTczODlmNjMyZWQyZTIyZmEyY2Y2OWNiMjU2MzczMDQ2MDBmYmYz
|
15
|
-
ZGRhZmNlMWNlMTkxZjQ2OGQyMjdlYjEzMzUzOGRjNWM2ZTU2NzE=
|
6
|
+
metadata.gz: 050ca6b08571141c02da98e85a064f76039955e180e14ddae4b071dfbb18fe6f3da4077e705f9809e9576e9553dd0b971c6241368736dfbaba93f3ec6412ccea
|
7
|
+
data.tar.gz: 8b21fa54a558a8cb7caf67f6c22c37d05aa208505913bcfcfeb98cedbfc1732dd64044cc315478166410e37667af23bdcbab8e04d25b79731511e9aa3c67d8c4
|
data/lib/cb2/breaker.rb
CHANGED
@@ -13,11 +13,14 @@ class CB2::Breaker
|
|
13
13
|
|
14
14
|
begin
|
15
15
|
process_count
|
16
|
-
yield
|
16
|
+
ret = yield
|
17
|
+
process_success
|
17
18
|
rescue => e
|
18
19
|
process_error
|
19
20
|
raise e
|
20
21
|
end
|
22
|
+
|
23
|
+
return ret
|
21
24
|
end
|
22
25
|
|
23
26
|
def open?
|
@@ -31,6 +34,11 @@ class CB2::Breaker
|
|
31
34
|
rescue Redis::BaseError
|
32
35
|
end
|
33
36
|
|
37
|
+
def process_success
|
38
|
+
strategy.success if strategy.respond_to?(:success)
|
39
|
+
rescue Redis::BaseError
|
40
|
+
end
|
41
|
+
|
34
42
|
def process_error
|
35
43
|
strategy.error if strategy.respond_to?(:error)
|
36
44
|
rescue Redis::BaseError
|
@@ -10,14 +10,10 @@ class CB2::RollingWindow
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def open?
|
13
|
+
@last_open = nil # always fetch the latest value from redis here
|
13
14
|
last_open && last_open.to_i > (Time.now.to_i - reenable_after)
|
14
15
|
end
|
15
16
|
|
16
|
-
def open!
|
17
|
-
@last_open = Time.now.to_i
|
18
|
-
redis.set(key, @last_open)
|
19
|
-
end
|
20
|
-
|
21
17
|
def half_open?
|
22
18
|
last_open && last_open.to_i < (Time.now.to_i - reenable_after)
|
23
19
|
end
|
@@ -26,13 +22,29 @@ class CB2::RollingWindow
|
|
26
22
|
@last_open ||= redis.get(key)
|
27
23
|
end
|
28
24
|
|
25
|
+
def success
|
26
|
+
if half_open?
|
27
|
+
reset!
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
29
31
|
def error
|
30
32
|
count = increment_rolling_window(key("error"))
|
31
33
|
if half_open? || should_open?(count)
|
32
|
-
|
34
|
+
trip!
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
38
|
+
def reset!
|
39
|
+
@last_open = nil
|
40
|
+
redis.del(key)
|
41
|
+
end
|
42
|
+
|
43
|
+
def trip!
|
44
|
+
@last_open = Time.now.to_i
|
45
|
+
redis.set(key, @last_open)
|
46
|
+
end
|
47
|
+
|
36
48
|
# generate a key to use in redis
|
37
49
|
def key(id=nil)
|
38
50
|
postfix = id ? "-#{id}" : ""
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cb2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pedro Belo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rr
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.1'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.1'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: timecop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.7'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.7'
|
83
83
|
description: Implementation of the circuit breaker pattern in Ruby
|
@@ -103,17 +103,17 @@ require_paths:
|
|
103
103
|
- lib
|
104
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
|
-
- -
|
106
|
+
- - ">="
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- -
|
111
|
+
- - ">="
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: '0'
|
114
114
|
requirements: []
|
115
115
|
rubyforge_project:
|
116
|
-
rubygems_version: 2.
|
116
|
+
rubygems_version: 2.4.3
|
117
117
|
signing_key:
|
118
118
|
specification_version: 4
|
119
119
|
summary: Circuit breaker
|