circuitbox 1.1.0 → 2.0.0.pre4

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 (38) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +56 -187
  3. data/lib/circuitbox.rb +14 -57
  4. data/lib/circuitbox/circuit_breaker.rb +137 -161
  5. data/lib/circuitbox/circuit_breaker/logger_messages.rb +31 -0
  6. data/lib/circuitbox/configuration.rb +51 -0
  7. data/lib/circuitbox/errors/error.rb +3 -2
  8. data/lib/circuitbox/errors/open_circuit_error.rb +3 -1
  9. data/lib/circuitbox/errors/service_failure_error.rb +5 -1
  10. data/lib/circuitbox/excon_middleware.rb +23 -30
  11. data/lib/circuitbox/faraday_middleware.rb +43 -63
  12. data/lib/circuitbox/memory_store.rb +85 -0
  13. data/lib/circuitbox/memory_store/container.rb +30 -0
  14. data/lib/circuitbox/memory_store/monotonic_time.rb +13 -0
  15. data/lib/circuitbox/notifier/active_support.rb +19 -0
  16. data/lib/circuitbox/notifier/null.rb +13 -0
  17. data/lib/circuitbox/timer.rb +51 -0
  18. data/lib/circuitbox/version.rb +3 -1
  19. metadata +106 -118
  20. data/.gitignore +0 -20
  21. data/.ruby-version +0 -1
  22. data/.travis.yml +0 -9
  23. data/Gemfile +0 -6
  24. data/Rakefile +0 -18
  25. data/benchmark/circuit_store_benchmark.rb +0 -114
  26. data/circuitbox.gemspec +0 -48
  27. data/lib/circuitbox/memcache_store.rb +0 -31
  28. data/lib/circuitbox/notifier.rb +0 -34
  29. data/test/circuit_breaker_test.rb +0 -428
  30. data/test/circuitbox_test.rb +0 -45
  31. data/test/excon_middleware_test.rb +0 -131
  32. data/test/faraday_middleware_test.rb +0 -175
  33. data/test/integration/circuitbox_cross_process_open_test.rb +0 -56
  34. data/test/integration/faraday_middleware_test.rb +0 -78
  35. data/test/integration_helper.rb +0 -48
  36. data/test/notifier_test.rb +0 -21
  37. data/test/service_failure_error_test.rb +0 -23
  38. data/test/test_helper.rb +0 -15
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Circuitbox
4
+ class Notifier
5
+ class Null
6
+ def notify(_, _); end
7
+
8
+ def notify_warning(_, _); end
9
+
10
+ def metric_gauge(_, _, _); end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Circuitbox
4
+ class Timer
5
+ class Monotonic
6
+ class << self
7
+ def supported?
8
+ defined?(Process::CLOCK_MONOTONIC)
9
+ end
10
+
11
+ def now
12
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
13
+ end
14
+ end
15
+ end
16
+
17
+ class Default
18
+ class << self
19
+ def supported?
20
+ true
21
+ end
22
+
23
+ def now
24
+ Time.now.to_f
25
+ end
26
+ end
27
+ end
28
+
29
+ class << self
30
+ def measure(service, notifier, metric_name)
31
+ before = now
32
+ result = yield
33
+ total_time = now - before
34
+ notifier.metric_gauge(service, metric_name, total_time)
35
+ result
36
+ end
37
+
38
+ private
39
+
40
+ if Monotonic.supported?
41
+ def now
42
+ Monotonic.now
43
+ end
44
+ else
45
+ def now
46
+ Default.now
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Circuitbox
2
- VERSION='1.1.0'
4
+ VERSION = '2.0.0.pre4'
3
5
  end
metadata CHANGED
@@ -1,279 +1,278 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circuitbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0.pre4
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-07-26 00:00:00.000000000 Z
12
+ date: 2021-01-21 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
+ name: excon
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - ">="
32
+ - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '0'
34
+ version: '0.71'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - ">="
39
+ - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '0'
41
+ version: '0.71'
41
42
  - !ruby/object:Gem::Dependency
42
- name: rack
43
+ name: faraday
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - ">="
46
47
  - !ruby/object:Gem::Version
47
- version: '0'
48
+ version: '0.8'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '2.0'
48
52
  type: :development
49
53
  prerelease: false
50
54
  version_requirements: !ruby/object:Gem::Requirement
51
55
  requirements:
52
56
  - - ">="
53
57
  - !ruby/object:Gem::Version
54
- version: '0'
58
+ version: '0.8'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: gimme
57
64
  requirement: !ruby/object:Gem::Requirement
58
65
  requirements:
59
- - - ">="
66
+ - - "~>"
60
67
  - !ruby/object:Gem::Version
61
- version: '0'
68
+ version: '0.5'
62
69
  type: :development
63
70
  prerelease: false
64
71
  version_requirements: !ruby/object:Gem::Requirement
65
72
  requirements:
66
- - - ">="
73
+ - - "~>"
67
74
  - !ruby/object:Gem::Version
68
- version: '0'
75
+ version: '0.5'
69
76
  - !ruby/object:Gem::Dependency
70
77
  name: minitest
71
78
  requirement: !ruby/object:Gem::Requirement
72
79
  requirements:
73
- - - ">="
80
+ - - "~>"
74
81
  - !ruby/object:Gem::Version
75
- version: '0'
82
+ version: '5.11'
76
83
  type: :development
77
84
  prerelease: false
78
85
  version_requirements: !ruby/object:Gem::Requirement
79
86
  requirements:
80
- - - ">="
87
+ - - "~>"
81
88
  - !ruby/object:Gem::Version
82
- version: '0'
89
+ version: '5.11'
83
90
  - !ruby/object:Gem::Dependency
84
- name: mocha
91
+ name: minitest-excludes
85
92
  requirement: !ruby/object:Gem::Requirement
86
93
  requirements:
87
- - - ">="
94
+ - - "~>"
88
95
  - !ruby/object:Gem::Version
89
- version: '0'
96
+ version: '2.0'
90
97
  type: :development
91
98
  prerelease: false
92
99
  version_requirements: !ruby/object:Gem::Requirement
93
100
  requirements:
94
- - - ">="
101
+ - - "~>"
95
102
  - !ruby/object:Gem::Version
96
- version: '0'
103
+ version: '2.0'
97
104
  - !ruby/object:Gem::Dependency
98
- name: typhoeus
105
+ name: mocha
99
106
  requirement: !ruby/object:Gem::Requirement
100
107
  requirements:
101
- - - ">="
108
+ - - "~>"
102
109
  - !ruby/object:Gem::Version
103
- version: '0'
110
+ version: '1.7'
104
111
  type: :development
105
112
  prerelease: false
106
113
  version_requirements: !ruby/object:Gem::Requirement
107
114
  requirements:
108
- - - ">="
115
+ - - "~>"
109
116
  - !ruby/object:Gem::Version
110
- version: '0'
117
+ version: '1.7'
111
118
  - !ruby/object:Gem::Dependency
112
- name: timecop
119
+ name: moneta
113
120
  requirement: !ruby/object:Gem::Requirement
114
121
  requirements:
115
- - - ">="
122
+ - - "~>"
116
123
  - !ruby/object:Gem::Version
117
- version: '0'
124
+ version: '1.0'
118
125
  type: :development
119
126
  prerelease: false
120
127
  version_requirements: !ruby/object:Gem::Requirement
121
128
  requirements:
122
- - - ">="
129
+ - - "~>"
123
130
  - !ruby/object:Gem::Version
124
- version: '0'
131
+ version: '1.0'
125
132
  - !ruby/object:Gem::Dependency
126
- name: faraday
133
+ name: rack
127
134
  requirement: !ruby/object:Gem::Requirement
128
135
  requirements:
129
- - - ">="
136
+ - - "~>"
130
137
  - !ruby/object:Gem::Version
131
- version: '0'
138
+ version: '2.0'
132
139
  type: :development
133
140
  prerelease: false
134
141
  version_requirements: !ruby/object:Gem::Requirement
135
142
  requirements:
136
- - - ">="
143
+ - - "~>"
137
144
  - !ruby/object:Gem::Version
138
- version: '0'
145
+ version: '2.0'
139
146
  - !ruby/object:Gem::Dependency
140
- name: excon
147
+ name: rake
141
148
  requirement: !ruby/object:Gem::Requirement
142
149
  requirements:
143
- - - ">="
150
+ - - "~>"
144
151
  - !ruby/object:Gem::Version
145
- version: '0'
152
+ version: '13.0'
146
153
  type: :development
147
154
  prerelease: false
148
155
  version_requirements: !ruby/object:Gem::Requirement
149
156
  requirements:
150
- - - ">="
157
+ - - "~>"
151
158
  - !ruby/object:Gem::Version
152
- version: '0'
159
+ version: '13.0'
153
160
  - !ruby/object:Gem::Dependency
154
- name: logger
161
+ name: rubocop
155
162
  requirement: !ruby/object:Gem::Requirement
156
163
  requirements:
157
- - - ">="
164
+ - - '='
158
165
  - !ruby/object:Gem::Version
159
- version: '0'
166
+ version: 1.8.1
160
167
  type: :development
161
168
  prerelease: false
162
169
  version_requirements: !ruby/object:Gem::Requirement
163
170
  requirements:
164
- - - ">="
171
+ - - '='
165
172
  - !ruby/object:Gem::Version
166
- version: '0'
173
+ version: 1.8.1
167
174
  - !ruby/object:Gem::Dependency
168
- name: bundler-gem_version_tasks
175
+ name: rubocop-minitest
169
176
  requirement: !ruby/object:Gem::Requirement
170
177
  requirements:
171
- - - ">="
178
+ - - '='
172
179
  - !ruby/object:Gem::Version
173
- version: '0'
180
+ version: 0.10.3
174
181
  type: :development
175
182
  prerelease: false
176
183
  version_requirements: !ruby/object:Gem::Requirement
177
184
  requirements:
178
- - - ">="
185
+ - - '='
179
186
  - !ruby/object:Gem::Version
180
- version: '0'
187
+ version: 0.10.3
181
188
  - !ruby/object:Gem::Dependency
182
- name: lmdb
189
+ name: rubocop-performance
183
190
  requirement: !ruby/object:Gem::Requirement
184
191
  requirements:
185
- - - ">="
192
+ - - '='
186
193
  - !ruby/object:Gem::Version
187
- version: '0'
194
+ version: 1.9.2
188
195
  type: :development
189
196
  prerelease: false
190
197
  version_requirements: !ruby/object:Gem::Requirement
191
198
  requirements:
192
- - - ">="
199
+ - - '='
193
200
  - !ruby/object:Gem::Version
194
- version: '0'
201
+ version: 1.9.2
195
202
  - !ruby/object:Gem::Dependency
196
- name: daybreak
203
+ name: rubocop-rake
197
204
  requirement: !ruby/object:Gem::Requirement
198
205
  requirements:
199
- - - ">="
206
+ - - '='
200
207
  - !ruby/object:Gem::Version
201
- version: '0'
208
+ version: 0.5.1
202
209
  type: :development
203
210
  prerelease: false
204
211
  version_requirements: !ruby/object:Gem::Requirement
205
212
  requirements:
206
- - - ">="
213
+ - - '='
207
214
  - !ruby/object:Gem::Version
208
- version: '0'
215
+ version: 0.5.1
209
216
  - !ruby/object:Gem::Dependency
210
- name: activesupport
217
+ name: timecop
211
218
  requirement: !ruby/object:Gem::Requirement
212
219
  requirements:
213
- - - ">="
220
+ - - "~>"
214
221
  - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :runtime
222
+ version: '0.9'
223
+ type: :development
217
224
  prerelease: false
218
225
  version_requirements: !ruby/object:Gem::Requirement
219
226
  requirements:
220
- - - ">="
227
+ - - "~>"
221
228
  - !ruby/object:Gem::Version
222
- version: '0'
229
+ version: '0.9'
223
230
  - !ruby/object:Gem::Dependency
224
- name: moneta
231
+ name: typhoeus
225
232
  requirement: !ruby/object:Gem::Requirement
226
233
  requirements:
227
- - - ">="
234
+ - - "~>"
228
235
  - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :runtime
236
+ version: '1.3'
237
+ type: :development
231
238
  prerelease: false
232
239
  version_requirements: !ruby/object:Gem::Requirement
233
240
  requirements:
234
- - - ">="
241
+ - - "~>"
235
242
  - !ruby/object:Gem::Version
236
- version: '0'
237
- description: A robust circuit breaker that manages failing external services.
243
+ version: '1.3'
244
+ description:
238
245
  email:
239
246
  - fahimfmf@gmail.com
240
247
  executables: []
241
248
  extensions: []
242
249
  extra_rdoc_files: []
243
250
  files:
244
- - ".gitignore"
245
- - ".ruby-version"
246
- - ".travis.yml"
247
- - Gemfile
248
251
  - LICENSE
249
252
  - README.md
250
- - Rakefile
251
- - benchmark/circuit_store_benchmark.rb
252
- - circuitbox.gemspec
253
253
  - lib/circuitbox.rb
254
254
  - lib/circuitbox/circuit_breaker.rb
255
+ - lib/circuitbox/circuit_breaker/logger_messages.rb
256
+ - lib/circuitbox/configuration.rb
255
257
  - lib/circuitbox/errors/error.rb
256
258
  - lib/circuitbox/errors/open_circuit_error.rb
257
259
  - lib/circuitbox/errors/service_failure_error.rb
258
260
  - lib/circuitbox/excon_middleware.rb
259
261
  - lib/circuitbox/faraday_middleware.rb
260
- - lib/circuitbox/memcache_store.rb
261
- - lib/circuitbox/notifier.rb
262
+ - lib/circuitbox/memory_store.rb
263
+ - lib/circuitbox/memory_store/container.rb
264
+ - lib/circuitbox/memory_store/monotonic_time.rb
265
+ - lib/circuitbox/notifier/active_support.rb
266
+ - lib/circuitbox/notifier/null.rb
267
+ - lib/circuitbox/timer.rb
262
268
  - 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: ''
269
+ homepage: https://github.com/yammer/circuitbox
274
270
  licenses:
275
- - MIT
276
- metadata: {}
271
+ - Apache-2.0
272
+ metadata:
273
+ bug_tracker_uri: https://github.com/yammer/circuitbox/issues
274
+ changelog_uri: https://github.com/yammer/circuitbox/blob/main/CHANGELOG.md
275
+ source_code_uri: https://github.com/yammer/circuitbox
277
276
  post_install_message:
278
277
  rdoc_options: []
279
278
  require_paths:
@@ -282,26 +281,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
282
281
  requirements:
283
282
  - - ">="
284
283
  - !ruby/object:Gem::Version
285
- version: '0'
284
+ version: 2.4.0
286
285
  required_rubygems_version: !ruby/object:Gem::Requirement
287
286
  requirements:
288
- - - ">="
287
+ - - ">"
289
288
  - !ruby/object:Gem::Version
290
- version: '0'
289
+ version: 1.3.1
291
290
  requirements: []
292
- rubyforge_project:
293
- rubygems_version: 2.4.8
291
+ rubygems_version: 3.1.4
294
292
  signing_key:
295
293
  specification_version: 4
296
294
  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
295
+ test_files: []