circuitbox 1.0.3 → 2.0.0.pre3

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.
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: []