circuitbox 1.1.1 → 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.
- checksums.yaml +5 -5
- data/README.md +53 -187
- data/lib/circuitbox/circuit_breaker/logger_messages.rb +31 -0
- data/lib/circuitbox/circuit_breaker.rb +134 -154
- data/lib/circuitbox/configuration.rb +51 -0
- data/lib/circuitbox/errors/error.rb +3 -2
- data/lib/circuitbox/errors/open_circuit_error.rb +3 -1
- data/lib/circuitbox/errors/service_failure_error.rb +5 -1
- data/lib/circuitbox/excon_middleware.rb +23 -30
- data/lib/circuitbox/faraday_middleware.rb +43 -63
- data/lib/circuitbox/memory_store/container.rb +30 -0
- data/lib/circuitbox/memory_store/monotonic_time.rb +13 -0
- data/lib/circuitbox/memory_store.rb +85 -0
- data/lib/circuitbox/notifier/active_support.rb +19 -0
- data/lib/circuitbox/notifier/null.rb +13 -0
- data/lib/circuitbox/timer.rb +51 -0
- data/lib/circuitbox/version.rb +3 -1
- data/lib/circuitbox.rb +14 -54
- metadata +106 -117
- data/.gitignore +0 -20
- data/.ruby-version +0 -1
- data/.travis.yml +0 -9
- data/Gemfile +0 -6
- data/Rakefile +0 -30
- data/benchmark/circuit_store_benchmark.rb +0 -114
- data/circuitbox.gemspec +0 -48
- data/lib/circuitbox/notifier.rb +0 -34
- data/test/circuit_breaker_test.rb +0 -436
- data/test/circuitbox_test.rb +0 -45
- data/test/excon_middleware_test.rb +0 -131
- data/test/faraday_middleware_test.rb +0 -175
- data/test/integration/circuitbox_cross_process_open_test.rb +0 -56
- data/test/integration/faraday_middleware_test.rb +0 -78
- data/test/integration_helper.rb +0 -48
- data/test/notifier_test.rb +0 -21
- data/test/service_failure_error_test.rb +0 -23
- data/test/test_helper.rb +0 -15
metadata
CHANGED
@@ -1,278 +1,278 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: circuitbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
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:
|
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: '
|
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: '
|
27
|
+
version: '1.16'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
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:
|
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: '
|
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: '
|
89
|
+
version: '5.11'
|
83
90
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
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:
|
105
|
+
name: mocha
|
99
106
|
requirement: !ruby/object:Gem::Requirement
|
100
107
|
requirements:
|
101
|
-
- - "
|
108
|
+
- - "~>"
|
102
109
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
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: '
|
117
|
+
version: '1.7'
|
111
118
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
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:
|
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:
|
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:
|
161
|
+
name: rubocop
|
155
162
|
requirement: !ruby/object:Gem::Requirement
|
156
163
|
requirements:
|
157
|
-
- -
|
164
|
+
- - '='
|
158
165
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
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:
|
173
|
+
version: 1.8.1
|
167
174
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
175
|
+
name: rubocop-minitest
|
169
176
|
requirement: !ruby/object:Gem::Requirement
|
170
177
|
requirements:
|
171
|
-
- -
|
178
|
+
- - '='
|
172
179
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
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:
|
187
|
+
version: 0.10.3
|
181
188
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
189
|
+
name: rubocop-performance
|
183
190
|
requirement: !ruby/object:Gem::Requirement
|
184
191
|
requirements:
|
185
|
-
- -
|
192
|
+
- - '='
|
186
193
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
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:
|
201
|
+
version: 1.9.2
|
195
202
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
203
|
+
name: rubocop-rake
|
197
204
|
requirement: !ruby/object:Gem::Requirement
|
198
205
|
requirements:
|
199
|
-
- -
|
206
|
+
- - '='
|
200
207
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
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:
|
215
|
+
version: 0.5.1
|
209
216
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
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: :
|
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:
|
231
|
+
name: typhoeus
|
225
232
|
requirement: !ruby/object:Gem::Requirement
|
226
233
|
requirements:
|
227
|
-
- - "
|
234
|
+
- - "~>"
|
228
235
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
230
|
-
type: :
|
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: '
|
237
|
-
description:
|
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/
|
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
|
261
268
|
- lib/circuitbox/version.rb
|
262
|
-
|
263
|
-
- test/circuitbox_test.rb
|
264
|
-
- test/excon_middleware_test.rb
|
265
|
-
- test/faraday_middleware_test.rb
|
266
|
-
- test/integration/circuitbox_cross_process_open_test.rb
|
267
|
-
- test/integration/faraday_middleware_test.rb
|
268
|
-
- test/integration_helper.rb
|
269
|
-
- test/notifier_test.rb
|
270
|
-
- test/service_failure_error_test.rb
|
271
|
-
- test/test_helper.rb
|
272
|
-
homepage: ''
|
269
|
+
homepage: https://github.com/yammer/circuitbox
|
273
270
|
licenses:
|
274
|
-
-
|
275
|
-
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
|
276
276
|
post_install_message:
|
277
277
|
rdoc_options: []
|
278
278
|
require_paths:
|
@@ -281,26 +281,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
281
281
|
requirements:
|
282
282
|
- - ">="
|
283
283
|
- !ruby/object:Gem::Version
|
284
|
-
version:
|
284
|
+
version: 2.4.0
|
285
285
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
286
286
|
requirements:
|
287
|
-
- - "
|
287
|
+
- - ">"
|
288
288
|
- !ruby/object:Gem::Version
|
289
|
-
version:
|
289
|
+
version: 1.3.1
|
290
290
|
requirements: []
|
291
|
-
|
292
|
-
rubygems_version: 2.5.2
|
291
|
+
rubygems_version: 3.1.4
|
293
292
|
signing_key:
|
294
293
|
specification_version: 4
|
295
294
|
summary: A robust circuit breaker that manages failing external services.
|
296
|
-
test_files:
|
297
|
-
- test/circuit_breaker_test.rb
|
298
|
-
- test/circuitbox_test.rb
|
299
|
-
- test/excon_middleware_test.rb
|
300
|
-
- test/faraday_middleware_test.rb
|
301
|
-
- test/integration/circuitbox_cross_process_open_test.rb
|
302
|
-
- test/integration/faraday_middleware_test.rb
|
303
|
-
- test/integration_helper.rb
|
304
|
-
- test/notifier_test.rb
|
305
|
-
- test/service_failure_error_test.rb
|
306
|
-
- test/test_helper.rb
|
295
|
+
test_files: []
|
data/.gitignore
DELETED
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.2.2
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require "rake/testtask"
|
2
|
-
require "bundler/gem_version_tasks"
|
3
|
-
|
4
|
-
namespace :test do
|
5
|
-
desc "Run complete test suite"
|
6
|
-
task :all => [:unit, :integration]
|
7
|
-
|
8
|
-
desc "Run unit tests"
|
9
|
-
Rake::TestTask.new(:unit) do |t|
|
10
|
-
t.libs << "test"
|
11
|
-
t.test_files = FileList["test/*_test.rb"]
|
12
|
-
end
|
13
|
-
|
14
|
-
desc "Run integration tests"
|
15
|
-
Rake::TestTask.new(:integration) do |t|
|
16
|
-
t.libs << "test"
|
17
|
-
t.test_files = FileList["test/integration/*_test.rb"]
|
18
|
-
end
|
19
|
-
|
20
|
-
desc "Run the circuitbox benchmarks"
|
21
|
-
task :benchmark do
|
22
|
-
benchmark_scripts = FileList.new("./benchmark/*_benchmark.rb")
|
23
|
-
benchmark_scripts.each do |script|
|
24
|
-
system "bundle exec ruby #{script}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
desc "Run tests"
|
30
|
-
task :default => ["test:all"]
|
@@ -1,114 +0,0 @@
|
|
1
|
-
require 'circuitbox'
|
2
|
-
require 'benchmark'
|
3
|
-
require 'pstore'
|
4
|
-
require 'tempfile'
|
5
|
-
require 'tmpdir'
|
6
|
-
require 'lmdb'
|
7
|
-
require 'pry'
|
8
|
-
|
9
|
-
|
10
|
-
class Circuitbox
|
11
|
-
class CircuitBreaker
|
12
|
-
# silence the circuitbreaker logger
|
13
|
-
DEV_NULL = (RUBY_PLATFORM =~ /mswin|mingw/ ? "NUL" : "/dev/null")
|
14
|
-
def logger
|
15
|
-
@_dev_null_logger ||= Logger.new DEV_NULL
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def service
|
21
|
-
# 10% success rate to make the circuitbreaker flip flop
|
22
|
-
if rand(10) <= 0
|
23
|
-
"success"
|
24
|
-
else
|
25
|
-
raise RuntimeError, "fail"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def run_flip_flopping circuit
|
30
|
-
circuit.run { service }
|
31
|
-
circuit.try_close_next_time if circuit.open?
|
32
|
-
end
|
33
|
-
|
34
|
-
def without_gc
|
35
|
-
GC.start
|
36
|
-
GC.disable
|
37
|
-
yield
|
38
|
-
GC.enable
|
39
|
-
end
|
40
|
-
|
41
|
-
def benchmark_circuitbox_method_with_reporter method, reporter
|
42
|
-
without_gc { send(method, reporter) }
|
43
|
-
Circuitbox.reset
|
44
|
-
end
|
45
|
-
|
46
|
-
def circuit_with_cache cache
|
47
|
-
Circuitbox.circuit :performance, CIRCUIT_OPTIONS.merge(cache: cache)
|
48
|
-
end
|
49
|
-
|
50
|
-
CIRCUIT_OPTIONS = {
|
51
|
-
exceptions: [RuntimeError],
|
52
|
-
sleep_window: 0,
|
53
|
-
time_window: 1
|
54
|
-
}
|
55
|
-
|
56
|
-
RUNS = 10000
|
57
|
-
|
58
|
-
def circuit_store_memory_one_process reporter
|
59
|
-
circuit = circuit_with_cache Moneta.new(:Memory)
|
60
|
-
|
61
|
-
reporter.report "memory:" do
|
62
|
-
RUNS.times { run_flip_flopping circuit }
|
63
|
-
end
|
64
|
-
|
65
|
-
circuit.circuit_store.close
|
66
|
-
end
|
67
|
-
|
68
|
-
def circuit_store_pstore_one_process reporter
|
69
|
-
Tempfile.create("test_circuit_store_pstore_one_process") do |dbfile|
|
70
|
-
circuit = circuit_with_cache Moneta.new(:PStore, file: dbfile)
|
71
|
-
|
72
|
-
reporter.report "pstore:" do
|
73
|
-
RUNS.times { run_flip_flopping circuit }
|
74
|
-
end
|
75
|
-
|
76
|
-
circuit.circuit_store.close
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def circuit_store_lmdb_one_process reporter
|
81
|
-
Dir.mktmpdir("test_circuit_store_lmdb_one_process") do |dbdir|
|
82
|
-
circuit = circuit_with_cache Moneta.new(:LMDB, dir: dbdir, db: "circuitbox_lmdb")
|
83
|
-
|
84
|
-
reporter.report "lmdb:" do
|
85
|
-
RUNS.times { run_flip_flopping circuit }
|
86
|
-
end
|
87
|
-
|
88
|
-
circuit.circuit_store.close
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def circuit_store_daybreak_one_process reporter
|
93
|
-
Tempfile.create("test_circuit_store_daybreak_one_process") do |dbfile|
|
94
|
-
circuit = circuit_with_cache Moneta.new(:Daybreak, file: dbfile)
|
95
|
-
|
96
|
-
reporter.report "daybreak:" do
|
97
|
-
RUNS.times { run_flip_flopping circuit }
|
98
|
-
end
|
99
|
-
|
100
|
-
circuit.circuit_store.close
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
Benchmark.bm(8) do |x|
|
105
|
-
benchmark_circuitbox_method_with_reporter :circuit_store_memory_one_process, x
|
106
|
-
benchmark_circuitbox_method_with_reporter :circuit_store_lmdb_one_process, x
|
107
|
-
benchmark_circuitbox_method_with_reporter :circuit_store_pstore_one_process, x
|
108
|
-
benchmark_circuitbox_method_with_reporter :circuit_store_daybreak_one_process, x
|
109
|
-
end
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
data/circuitbox.gemspec
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'circuitbox/version'
|
5
|
-
|
6
|
-
ruby_2_2_2_plus = Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.2")
|
7
|
-
|
8
|
-
Gem::Specification.new do |spec|
|
9
|
-
spec.name = "circuitbox"
|
10
|
-
spec.version = Circuitbox::VERSION
|
11
|
-
spec.authors = ["Fahim Ferdous"]
|
12
|
-
spec.email = ["fahimfmf@gmail.com"]
|
13
|
-
spec.description = %q{A robust circuit breaker that manages failing external services.}
|
14
|
-
spec.summary = %q{A robust circuit breaker that manages failing external services.}
|
15
|
-
spec.homepage = ""
|
16
|
-
spec.license = "MIT"
|
17
|
-
|
18
|
-
spec.files = `git ls-files`.split($/)
|
19
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
|
-
spec.require_paths = ["lib"]
|
22
|
-
|
23
|
-
spec.add_development_dependency "bundler"
|
24
|
-
spec.add_development_dependency "rake"
|
25
|
-
if ruby_2_2_2_plus
|
26
|
-
spec.add_development_dependency "rack"
|
27
|
-
else
|
28
|
-
spec.add_development_dependency "rack", '< 2'
|
29
|
-
end
|
30
|
-
spec.add_development_dependency "gimme"
|
31
|
-
spec.add_development_dependency "minitest"
|
32
|
-
spec.add_development_dependency "mocha"
|
33
|
-
spec.add_development_dependency "typhoeus"
|
34
|
-
spec.add_development_dependency "timecop"
|
35
|
-
spec.add_development_dependency "faraday"
|
36
|
-
spec.add_development_dependency "excon"
|
37
|
-
spec.add_development_dependency "logger"
|
38
|
-
spec.add_development_dependency "bundler-gem_version_tasks"
|
39
|
-
spec.add_development_dependency "lmdb"
|
40
|
-
spec.add_development_dependency "daybreak"
|
41
|
-
|
42
|
-
if ruby_2_2_2_plus
|
43
|
-
spec.add_dependency "activesupport"
|
44
|
-
else
|
45
|
-
spec.add_dependency "activesupport", '< 5'
|
46
|
-
end
|
47
|
-
spec.add_dependency "moneta"
|
48
|
-
end
|
data/lib/circuitbox/notifier.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
class Circuitbox
|
2
|
-
class Notifier
|
3
|
-
def initialize(service, partition=nil)
|
4
|
-
@service = service
|
5
|
-
@partition = partition
|
6
|
-
end
|
7
|
-
|
8
|
-
def notify(event)
|
9
|
-
return unless notification_available?
|
10
|
-
ActiveSupport::Notifications.instrument("circuit_#{event}", circuit: circuit_name)
|
11
|
-
end
|
12
|
-
|
13
|
-
def notify_warning(message)
|
14
|
-
return unless notification_available?
|
15
|
-
ActiveSupport::Notifications.instrument("circuit_warning", { circuit: circuit_name, message: message})
|
16
|
-
end
|
17
|
-
|
18
|
-
def metric_gauge(gauge, value)
|
19
|
-
return unless notification_available?
|
20
|
-
ActiveSupport::Notifications.instrument("circuit_gauge", { circuit: circuit_name, gauge: gauge.to_s, value: value })
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
def circuit_name
|
25
|
-
circuit_name = @service.to_s
|
26
|
-
circuit_name += ":#{@partition}" if @partition
|
27
|
-
circuit_name
|
28
|
-
end
|
29
|
-
|
30
|
-
def notification_available?
|
31
|
-
defined? ActiveSupport::Notifications
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|