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.
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