circuitbox 1.0.3 → 2.0.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +68 -122
  3. data/lib/circuitbox.rb +12 -56
  4. data/lib/circuitbox/circuit_breaker.rb +133 -154
  5. data/lib/circuitbox/circuit_breaker/logger_messages.rb +31 -0
  6. data/lib/circuitbox/configuration.rb +55 -0
  7. data/lib/circuitbox/errors/error.rb +1 -2
  8. data/lib/circuitbox/errors/open_circuit_error.rb +0 -1
  9. data/lib/circuitbox/errors/service_failure_error.rb +2 -1
  10. data/lib/circuitbox/excon_middleware.rb +15 -24
  11. data/lib/circuitbox/faraday_middleware.rb +38 -61
  12. data/lib/circuitbox/memory_store.rb +84 -0
  13. data/lib/circuitbox/memory_store/container.rb +28 -0
  14. data/lib/circuitbox/memory_store/monotonic_time.rb +11 -0
  15. data/lib/circuitbox/notifier/active_support.rb +19 -0
  16. data/lib/circuitbox/notifier/null.rb +11 -0
  17. data/lib/circuitbox/timer/monotonic.rb +17 -0
  18. data/lib/circuitbox/timer/null.rb +9 -0
  19. data/lib/circuitbox/timer/simple.rb +13 -0
  20. data/lib/circuitbox/version.rb +1 -1
  21. metadata +81 -149
  22. data/.gitignore +0 -20
  23. data/.ruby-version +0 -1
  24. data/.travis.yml +0 -8
  25. data/Gemfile +0 -6
  26. data/Rakefile +0 -18
  27. data/benchmark/circuit_store_benchmark.rb +0 -114
  28. data/circuitbox.gemspec +0 -38
  29. data/lib/circuitbox/memcache_store.rb +0 -31
  30. data/lib/circuitbox/notifier.rb +0 -34
  31. data/test/circuit_breaker_test.rb +0 -449
  32. data/test/circuitbox_test.rb +0 -54
  33. data/test/excon_middleware_test.rb +0 -131
  34. data/test/faraday_middleware_test.rb +0 -175
  35. data/test/integration/circuitbox_cross_process_open_test.rb +0 -56
  36. data/test/integration/faraday_middleware_test.rb +0 -78
  37. data/test/integration_helper.rb +0 -48
  38. data/test/notifier_test.rb +0 -21
  39. data/test/service_failure_error_test.rb +0 -30
  40. data/test/test_helper.rb +0 -15
@@ -0,0 +1,11 @@
1
+ class Circuitbox
2
+ class MemoryStore
3
+ module MonotonicTime
4
+ module_function
5
+
6
+ def current_second
7
+ Process.clock_gettime(Process::CLOCK_MONOTONIC, :second)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Circuitbox
4
+ class Notifier
5
+ class ActiveSupport
6
+ def notify(circuit_name, event)
7
+ ::ActiveSupport::Notifications.instrument("circuit_#{event}", circuit: circuit_name)
8
+ end
9
+
10
+ def notify_warning(circuit_name, message)
11
+ ::ActiveSupport::Notifications.instrument('circuit_warning', circuit: circuit_name, message: message)
12
+ end
13
+
14
+ def metric_gauge(circuit_name, gauge, value)
15
+ ::ActiveSupport::Notifications.instrument('circuit_gauge', circuit: circuit_name, gauge: gauge, value: value)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ class Circuitbox
2
+ class Notifier
3
+ class Null
4
+ def notify(_, _); end
5
+
6
+ def notify_warning(_, _); end
7
+
8
+ def metric_gauge(_, _, _); end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ class Circuitbox
2
+ class Timer
3
+ class Monotonic
4
+ def initialize(time_unit = :millisecond)
5
+ @time_unit = time_unit
6
+ end
7
+
8
+ def time(service, notifier, metric_name)
9
+ before = Process.clock_gettime(Process::CLOCK_MONOTONIC, @time_unit)
10
+ result = yield
11
+ total_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, @time_unit) - before
12
+ notifier.metric_gauge(service, metric_name, total_time)
13
+ result
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ class Circuitbox
2
+ class Timer
3
+ class Null
4
+ def time(_service, _notifier, _metric_name)
5
+ yield
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ class Circuitbox
2
+ class Timer
3
+ class Simple
4
+ def time(service, notifier, metric_name)
5
+ before = Time.now.to_f
6
+ result = yield
7
+ total_time = Time.now.to_f - before
8
+ notifier.metric_gauge(service, metric_name, total_time)
9
+ result
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  class Circuitbox
2
- VERSION='1.0.3'
2
+ VERSION = '2.0.0.pre3'.freeze
3
3
  end
metadata CHANGED
@@ -1,278 +1,220 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circuitbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0.pre3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fahim Ferdous
8
+ - Matthew Shafer
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-03-19 00:00:00.000000000 Z
12
+ date: 2020-05-28 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - ">="
18
+ - - ">"
18
19
  - !ruby/object:Gem::Version
19
- version: '0'
20
+ version: '1.16'
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ">="
25
+ - - ">"
25
26
  - !ruby/object:Gem::Version
26
- version: '0'
27
+ version: '1.16'
27
28
  - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rack
29
+ name: excon
43
30
  requirement: !ruby/object:Gem::Requirement
44
31
  requirements:
45
- - - ">="
32
+ - - "~>"
46
33
  - !ruby/object:Gem::Version
47
- version: '0'
34
+ version: '0.71'
48
35
  type: :development
49
36
  prerelease: false
50
37
  version_requirements: !ruby/object:Gem::Requirement
51
38
  requirements:
52
- - - ">="
39
+ - - "~>"
53
40
  - !ruby/object:Gem::Version
54
- version: '0'
41
+ version: '0.71'
55
42
  - !ruby/object:Gem::Dependency
56
- name: gimme
43
+ name: faraday
57
44
  requirement: !ruby/object:Gem::Requirement
58
45
  requirements:
59
46
  - - ">="
60
47
  - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: minitest
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
48
+ version: '0.15'
49
+ - - "<"
74
50
  - !ruby/object:Gem::Version
75
- version: '0'
51
+ version: '2.0'
76
52
  type: :development
77
53
  prerelease: false
78
54
  version_requirements: !ruby/object:Gem::Requirement
79
55
  requirements:
80
56
  - - ">="
81
57
  - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: mocha
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
58
+ version: '0.15'
59
+ - - "<"
95
60
  - !ruby/object:Gem::Version
96
- version: '0'
61
+ version: '2.0'
97
62
  - !ruby/object:Gem::Dependency
98
- name: typhoeus
63
+ name: gimme
99
64
  requirement: !ruby/object:Gem::Requirement
100
65
  requirements:
101
- - - ">="
66
+ - - "~>"
102
67
  - !ruby/object:Gem::Version
103
- version: '0'
68
+ version: '0.5'
104
69
  type: :development
105
70
  prerelease: false
106
71
  version_requirements: !ruby/object:Gem::Requirement
107
72
  requirements:
108
- - - ">="
73
+ - - "~>"
109
74
  - !ruby/object:Gem::Version
110
- version: '0'
75
+ version: '0.5'
111
76
  - !ruby/object:Gem::Dependency
112
- name: timecop
77
+ name: minitest
113
78
  requirement: !ruby/object:Gem::Requirement
114
79
  requirements:
115
- - - ">="
80
+ - - "~>"
116
81
  - !ruby/object:Gem::Version
117
- version: '0'
82
+ version: '5.11'
118
83
  type: :development
119
84
  prerelease: false
120
85
  version_requirements: !ruby/object:Gem::Requirement
121
86
  requirements:
122
- - - ">="
87
+ - - "~>"
123
88
  - !ruby/object:Gem::Version
124
- version: '0'
89
+ version: '5.11'
125
90
  - !ruby/object:Gem::Dependency
126
- name: faraday
91
+ name: minitest-excludes
127
92
  requirement: !ruby/object:Gem::Requirement
128
93
  requirements:
129
- - - ">="
94
+ - - "~>"
130
95
  - !ruby/object:Gem::Version
131
- version: '0'
96
+ version: '2.0'
132
97
  type: :development
133
98
  prerelease: false
134
99
  version_requirements: !ruby/object:Gem::Requirement
135
100
  requirements:
136
- - - ">="
101
+ - - "~>"
137
102
  - !ruby/object:Gem::Version
138
- version: '0'
103
+ version: '2.0'
139
104
  - !ruby/object:Gem::Dependency
140
- name: excon
105
+ name: mocha
141
106
  requirement: !ruby/object:Gem::Requirement
142
107
  requirements:
143
- - - ">="
108
+ - - "~>"
144
109
  - !ruby/object:Gem::Version
145
- version: '0'
110
+ version: '1.7'
146
111
  type: :development
147
112
  prerelease: false
148
113
  version_requirements: !ruby/object:Gem::Requirement
149
114
  requirements:
150
- - - ">="
115
+ - - "~>"
151
116
  - !ruby/object:Gem::Version
152
- version: '0'
117
+ version: '1.7'
153
118
  - !ruby/object:Gem::Dependency
154
- name: logger
119
+ name: rack
155
120
  requirement: !ruby/object:Gem::Requirement
156
121
  requirements:
157
- - - ">="
122
+ - - "~>"
158
123
  - !ruby/object:Gem::Version
159
- version: '0'
124
+ version: '2.0'
160
125
  type: :development
161
126
  prerelease: false
162
127
  version_requirements: !ruby/object:Gem::Requirement
163
128
  requirements:
164
- - - ">="
129
+ - - "~>"
165
130
  - !ruby/object:Gem::Version
166
- version: '0'
131
+ version: '2.0'
167
132
  - !ruby/object:Gem::Dependency
168
- name: bundler-gem_version_tasks
133
+ name: rake
169
134
  requirement: !ruby/object:Gem::Requirement
170
135
  requirements:
171
- - - ">="
136
+ - - "~>"
172
137
  - !ruby/object:Gem::Version
173
- version: '0'
138
+ version: '13.0'
174
139
  type: :development
175
140
  prerelease: false
176
141
  version_requirements: !ruby/object:Gem::Requirement
177
142
  requirements:
178
- - - ">="
143
+ - - "~>"
179
144
  - !ruby/object:Gem::Version
180
- version: '0'
145
+ version: '13.0'
181
146
  - !ruby/object:Gem::Dependency
182
- name: lmdb
147
+ name: timecop
183
148
  requirement: !ruby/object:Gem::Requirement
184
149
  requirements:
185
- - - ">="
150
+ - - "~>"
186
151
  - !ruby/object:Gem::Version
187
- version: '0'
152
+ version: '0.9'
188
153
  type: :development
189
154
  prerelease: false
190
155
  version_requirements: !ruby/object:Gem::Requirement
191
156
  requirements:
192
- - - ">="
157
+ - - "~>"
193
158
  - !ruby/object:Gem::Version
194
- version: '0'
159
+ version: '0.9'
195
160
  - !ruby/object:Gem::Dependency
196
- name: daybreak
161
+ name: typhoeus
197
162
  requirement: !ruby/object:Gem::Requirement
198
163
  requirements:
199
- - - ">="
164
+ - - "~>"
200
165
  - !ruby/object:Gem::Version
201
- version: '0'
166
+ version: '1.3'
202
167
  type: :development
203
168
  prerelease: false
204
169
  version_requirements: !ruby/object:Gem::Requirement
205
170
  requirements:
206
- - - ">="
171
+ - - "~>"
207
172
  - !ruby/object:Gem::Version
208
- version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: activesupport
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - ">="
214
- - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :runtime
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - ">="
221
- - !ruby/object:Gem::Version
222
- version: '0'
173
+ version: '1.3'
223
174
  - !ruby/object:Gem::Dependency
224
175
  name: moneta
225
176
  requirement: !ruby/object:Gem::Requirement
226
177
  requirements:
227
- - - ">="
178
+ - - "~>"
228
179
  - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :runtime
180
+ version: '1.0'
181
+ type: :development
231
182
  prerelease: false
232
183
  version_requirements: !ruby/object:Gem::Requirement
233
184
  requirements:
234
- - - ">="
185
+ - - "~>"
235
186
  - !ruby/object:Gem::Version
236
- version: '0'
237
- description: A robust circuit breaker that manages failing external services.
187
+ version: '1.0'
188
+ description:
238
189
  email:
239
190
  - fahimfmf@gmail.com
240
191
  executables: []
241
192
  extensions: []
242
193
  extra_rdoc_files: []
243
194
  files:
244
- - ".gitignore"
245
- - ".ruby-version"
246
- - ".travis.yml"
247
- - Gemfile
248
195
  - LICENSE
249
196
  - README.md
250
- - Rakefile
251
- - benchmark/circuit_store_benchmark.rb
252
- - circuitbox.gemspec
253
197
  - lib/circuitbox.rb
254
198
  - lib/circuitbox/circuit_breaker.rb
199
+ - lib/circuitbox/circuit_breaker/logger_messages.rb
200
+ - lib/circuitbox/configuration.rb
255
201
  - lib/circuitbox/errors/error.rb
256
202
  - lib/circuitbox/errors/open_circuit_error.rb
257
203
  - lib/circuitbox/errors/service_failure_error.rb
258
204
  - lib/circuitbox/excon_middleware.rb
259
205
  - lib/circuitbox/faraday_middleware.rb
260
- - lib/circuitbox/memcache_store.rb
261
- - lib/circuitbox/notifier.rb
206
+ - lib/circuitbox/memory_store.rb
207
+ - lib/circuitbox/memory_store/container.rb
208
+ - lib/circuitbox/memory_store/monotonic_time.rb
209
+ - lib/circuitbox/notifier/active_support.rb
210
+ - lib/circuitbox/notifier/null.rb
211
+ - lib/circuitbox/timer/monotonic.rb
212
+ - lib/circuitbox/timer/null.rb
213
+ - lib/circuitbox/timer/simple.rb
262
214
  - lib/circuitbox/version.rb
263
- - test/circuit_breaker_test.rb
264
- - test/circuitbox_test.rb
265
- - test/excon_middleware_test.rb
266
- - test/faraday_middleware_test.rb
267
- - test/integration/circuitbox_cross_process_open_test.rb
268
- - test/integration/faraday_middleware_test.rb
269
- - test/integration_helper.rb
270
- - test/notifier_test.rb
271
- - test/service_failure_error_test.rb
272
- - test/test_helper.rb
273
- homepage: ''
215
+ homepage: https://github.com/yammer/circuitbox
274
216
  licenses:
275
- - MIT
217
+ - Apache-2.0
276
218
  metadata: {}
277
219
  post_install_message:
278
220
  rdoc_options: []
@@ -285,23 +227,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
285
227
  version: '0'
286
228
  required_rubygems_version: !ruby/object:Gem::Requirement
287
229
  requirements:
288
- - - ">="
230
+ - - ">"
289
231
  - !ruby/object:Gem::Version
290
- version: '0'
232
+ version: 1.3.1
291
233
  requirements: []
292
234
  rubyforge_project:
293
- rubygems_version: 2.4.3
235
+ rubygems_version: 2.5.2.3
294
236
  signing_key:
295
237
  specification_version: 4
296
238
  summary: A robust circuit breaker that manages failing external services.
297
- test_files:
298
- - test/circuit_breaker_test.rb
299
- - test/circuitbox_test.rb
300
- - test/excon_middleware_test.rb
301
- - test/faraday_middleware_test.rb
302
- - test/integration/circuitbox_cross_process_open_test.rb
303
- - test/integration/faraday_middleware_test.rb
304
- - test/integration_helper.rb
305
- - test/notifier_test.rb
306
- - test/service_failure_error_test.rb
307
- - test/test_helper.rb
239
+ test_files: []