cb2 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZTE5OWQ3ZDliNTg4OGUyNjU4YTNiOGVkM2FjNzAwM2VkMTdiZWU4Zg==
5
- data.tar.gz: !binary |-
6
- ZDEzYjJjMTA5YTIxZDE2MDRkOWRiNzk0ZjQ3NDlkYzZhMmYwOTdiMA==
2
+ SHA1:
3
+ metadata.gz: 7745238479e3b771cd4250afd72b38628690b89c
4
+ data.tar.gz: 4a52b01231637cbfce2e2ab95f5a1ef05137a525
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YTg1OGMwZjYzYTk5NTQ0NTQ4MDY2M2ZmNGZmOGZjZGQ4NmNjNmYwNGE4ZWRh
10
- MjQyYjRlZTJhNDFiMDIzYzQxZjRjNTU4YTQzNDNjMzAzZTk1NzZhNmQ1MWZh
11
- ZWI5MmFmN2MxMTEzOTczZWY0MGMwOWIwMzMyNWM0ZmJmNjgyYmQ=
12
- data.tar.gz: !binary |-
13
- MWQwYjA0Mzk1NTgxYWRiZmVkZmYwYzZlMDY5NTkwYTBlYWEzZDk5Mjc3ZTNl
14
- MmE2ZjFmYTczODlmNjMyZWQyZTIyZmEyY2Y2OWNiMjU2MzczMDQ2MDBmYmYz
15
- ZGRhZmNlMWNlMTkxZjQ2OGQyMjdlYjEzMzUzOGRjNWM2ZTU2NzE=
6
+ metadata.gz: 050ca6b08571141c02da98e85a064f76039955e180e14ddae4b071dfbb18fe6f3da4077e705f9809e9576e9553dd0b971c6241368736dfbaba93f3ec6412ccea
7
+ data.tar.gz: 8b21fa54a558a8cb7caf67f6c22c37d05aa208505913bcfcfeb98cedbfc1732dd64044cc315478166410e37667af23bdcbab8e04d25b79731511e9aa3c67d8c4
@@ -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
@@ -1,5 +1,5 @@
1
1
  class CB2::Percentage < CB2::RollingWindow
2
- # keep a rolling window of successful calls too
2
+ # keep a rolling window of all calls too
3
3
  def count
4
4
  @current_count = increment_rolling_window(key("count"))
5
5
  end
@@ -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
- open!
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.2
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: 2014-11-28 00:00:00.000000000 Z
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.2.2
116
+ rubygems_version: 2.4.3
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: Circuit breaker