circuitbox 1.1.0 → 2.0.0.pre4

Sign up to get free protection for your applications and to get access to all the features.
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: []