circuitbox 1.1.1 → 2.0.0.pre4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +53 -187
  3. data/lib/circuitbox/circuit_breaker/logger_messages.rb +31 -0
  4. data/lib/circuitbox/circuit_breaker.rb +134 -154
  5. data/lib/circuitbox/configuration.rb +51 -0
  6. data/lib/circuitbox/errors/error.rb +3 -2
  7. data/lib/circuitbox/errors/open_circuit_error.rb +3 -1
  8. data/lib/circuitbox/errors/service_failure_error.rb +5 -1
  9. data/lib/circuitbox/excon_middleware.rb +23 -30
  10. data/lib/circuitbox/faraday_middleware.rb +43 -63
  11. data/lib/circuitbox/memory_store/container.rb +30 -0
  12. data/lib/circuitbox/memory_store/monotonic_time.rb +13 -0
  13. data/lib/circuitbox/memory_store.rb +85 -0
  14. data/lib/circuitbox/notifier/active_support.rb +19 -0
  15. data/lib/circuitbox/notifier/null.rb +13 -0
  16. data/lib/circuitbox/timer.rb +51 -0
  17. data/lib/circuitbox/version.rb +3 -1
  18. data/lib/circuitbox.rb +14 -54
  19. metadata +106 -117
  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 -30
  25. data/benchmark/circuit_store_benchmark.rb +0 -114
  26. data/circuitbox.gemspec +0 -48
  27. data/lib/circuitbox/notifier.rb +0 -34
  28. data/test/circuit_breaker_test.rb +0 -436
  29. data/test/circuitbox_test.rb +0 -45
  30. data/test/excon_middleware_test.rb +0 -131
  31. data/test/faraday_middleware_test.rb +0 -175
  32. data/test/integration/circuitbox_cross_process_open_test.rb +0 -56
  33. data/test/integration/faraday_middleware_test.rb +0 -78
  34. data/test/integration_helper.rb +0 -48
  35. data/test/notifier_test.rb +0 -21
  36. data/test/service_failure_error_test.rb +0 -23
  37. 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: 1.1.1
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: 2017-03-02 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/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
261
268
  - lib/circuitbox/version.rb
262
- - test/circuit_breaker_test.rb
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
- - MIT
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: '0'
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: '0'
289
+ version: 1.3.1
290
290
  requirements: []
291
- rubyforge_project:
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
@@ -1,20 +0,0 @@
1
- *.gem
2
- .vagrant
3
- *.rbc
4
- .bundle
5
- .config
6
- .yardoc
7
- Gemfile.lock
8
- InstalledFiles
9
- _yardoc
10
- coverage
11
- doc/
12
- lib/bundler/man
13
- pkg
14
- rdoc
15
- spec/reports
16
- test/tmp
17
- test/reports
18
- test/version_tmp
19
- tmp
20
- .idea
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.2.2
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1
6
- - 2.2
7
- - 2.2.2
8
- before_install:
9
- - gem install bundler
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in circuitbox.gemspec
4
- gemspec
5
-
6
- gem "pry"
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
@@ -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