faulty 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d954b29a9efe4360a4b3ab940afa5f4d9b51642c6244bcbc3875fb7bdf569c7
4
- data.tar.gz: b0babca45decf10cf5b0505b301e7c89837385cd21a5727048599f2c9097549d
3
+ metadata.gz: d963d5c58861cc9e39c3222b5dc78a2a537c15fc10e0ed76d9d5b41a6704356b
4
+ data.tar.gz: e31811fc1b5be36975982e966106ea7f323b4e334b87cfaca85667f550245584
5
5
  SHA512:
6
- metadata.gz: 56c406768fe13d23cec5c56b1c6d25f278f578895c90c01731dda8f3b002f7a2ca1b06b17195cf7f86d358699b7b8fc3c9648c8aa6b0a2d30fd12f7a3a0e92e6
7
- data.tar.gz: 0bfed6c5968d43262d4c1e02735339f6a9858a9bbebecbffcb8d9ed36a4bf2ea068fa5c6035675592eaaed3df267815c1e24b73a484f4aa421cac17ab602a805
6
+ metadata.gz: 52aae6a3997fca7d38aebd124399747ee21a687114076e5d73c135d86ab147360e71a9f7a95ee4a5f548b6709089697e77fa472730c3fc18cb9c1d412bdac4ca
7
+ data.tar.gz: 56b02cad8fe96373c916746bfc7c6f83665a74e7a3771d7b761244373b1d4b79aeb44d94fbe9401f82f8671b4e21c625a079b4845a42565dfbfbdfd37a07d2bf
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
+ ## Release v0.7.2
2
+
3
+ * Add Faulty.disable! for disabling globally #38 justinhoward
4
+ * Suppress circuit_success for proxy circuits #39 justinhoward
5
+
1
6
  ## Release v0.7.1
2
7
 
3
- - Fix success event crash in log listener #37 justinhoward
8
+ * Fix success event crash in log listener #37 justinhoward
4
9
 
5
10
  ## Release v0.7.0
6
11
 
data/README.md CHANGED
@@ -88,6 +88,7 @@ Also see "Release It!: Design and Deploy Production-Ready Software" by
88
88
  + [CallbackListener](#callbacklistener)
89
89
  + [Other Built-in Listeners](#other-built-in-listeners)
90
90
  + [Custom Listeners](#custom-listeners)
91
+ * [Disabling Faulty Globally](#disabling-faulty-globally)
91
92
  * [How it Works](#how-it-works)
92
93
  + [Caching](#caching)
93
94
  + [Fault Tolerance](#fault-tolerance)
@@ -1124,6 +1125,21 @@ Faulty.init do |config|
1124
1125
  end
1125
1126
  ```
1126
1127
 
1128
+ ## Disabling Faulty Globally
1129
+
1130
+ For testing or for some environments, you may wish to disable Faulty circuits
1131
+ at a global level.
1132
+
1133
+ ```ruby
1134
+ Faulty.disable!
1135
+ ```
1136
+
1137
+ This only affects the process where you run the `#disable!` method and it does
1138
+ not affect the stored state of circuits.
1139
+
1140
+ Faulty will **still use the cache** even when disabled. If you also want to
1141
+ disable the cache, configure Faulty to use a `Faulty::Cache::Null` cache.
1142
+
1127
1143
  ## How it Works
1128
1144
 
1129
1145
  Faulty implements a version of circuit breakers inspired by "Release It!: Design
@@ -33,7 +33,7 @@ class Faulty
33
33
 
34
34
  self.circuit ||= Circuit.new(
35
35
  Faulty::Storage::CircuitProxy.name,
36
- notifier: notifier,
36
+ notifier: Events::FilterNotifier.new(notifier, exclude: %i[circuit_success]),
37
37
  cache: Cache::Null.new
38
38
  )
39
39
  end
@@ -433,6 +433,8 @@ class Faulty
433
433
  #
434
434
  # @return [Storage::Interface]
435
435
  def storage
436
+ return Faulty::Storage::Null.new if Faulty.disabled?
437
+
436
438
  options.storage
437
439
  end
438
440
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Faulty
4
+ module Events
5
+ # Wraps a Notifier and filters events by name
6
+ class FilterNotifier
7
+ # @param notifier [Notifier] The internal notifier to filter events for
8
+ # @param events [Array, nil] An array of events to allow. If nil, all
9
+ # {EVENTS} will be used
10
+ # @param exclude [Array, nil] An array of events to disallow. If nil,
11
+ # no events will be disallowed. Takes priority over `events`.
12
+ def initialize(notifier, events: nil, exclude: nil)
13
+ @notifier = notifier
14
+ @events = Set.new(events || EVENTS)
15
+ exclude&.each { |e| @events.delete(e) }
16
+ end
17
+
18
+ # Notify all listeners of an event
19
+ #
20
+ # If a listener raises an error while handling an event, that error will
21
+ # be captured and written to STDERR.
22
+ #
23
+ # @param (see Notifier)
24
+ def notify(event, payload)
25
+ return unless @events.include?(event)
26
+
27
+ @notifier.notify(event, payload)
28
+ end
29
+ end
30
+ end
31
+ end
data/lib/faulty/events.rb CHANGED
@@ -26,3 +26,4 @@ require 'faulty/events/callback_listener'
26
26
  require 'faulty/events/honeybadger_listener'
27
27
  require 'faulty/events/log_listener'
28
28
  require 'faulty/events/notifier'
29
+ require 'faulty/events/filter_notifier'
@@ -33,7 +33,7 @@ class Faulty
33
33
 
34
34
  self.circuit ||= Circuit.new(
35
35
  Faulty::Storage::CircuitProxy.name,
36
- notifier: notifier,
36
+ notifier: Events::FilterNotifier.new(notifier, exclude: %i[circuit_success]),
37
37
  cache: Cache::Null.new
38
38
  )
39
39
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Faulty
4
+ module Storage
5
+ # A no-op backend for disabling circuits
6
+ class Null
7
+ # Define a single global instance
8
+ @instance = new
9
+
10
+ def self.new
11
+ @instance
12
+ end
13
+
14
+ # @param (see Interface#entry)
15
+ # @return (see Interface#entry)
16
+ def entry(_circuit, _time, _success)
17
+ []
18
+ end
19
+
20
+ # @param (see Interface#open)
21
+ # @return (see Interface#open)
22
+ def open(_circuit, _opened_at)
23
+ true
24
+ end
25
+
26
+ # @param (see Interface#reopen)
27
+ # @return (see Interface#reopen)
28
+ def reopen(_circuit, _opened_at, _previous_opened_at)
29
+ true
30
+ end
31
+
32
+ # @param (see Interface#close)
33
+ # @return (see Interface#close)
34
+ def close(_circuit)
35
+ true
36
+ end
37
+
38
+ # @param (see Interface#lock)
39
+ # @return (see Interface#lock)
40
+ def lock(_circuit, _state)
41
+ end
42
+
43
+ # @param (see Interface#unlock)
44
+ # @return (see Interface#unlock)
45
+ def unlock(_circuit)
46
+ end
47
+
48
+ # @param (see Interface#reset)
49
+ # @return (see Interface#reset)
50
+ def reset(_circuit)
51
+ end
52
+
53
+ # @param (see Interface#status)
54
+ # @return (see Interface#status)
55
+ def status(circuit)
56
+ Faulty::Status.new(
57
+ options: circuit.options,
58
+ stub: true
59
+ )
60
+ end
61
+
62
+ # @param (see Interface#history)
63
+ # @return (see Interface#history)
64
+ def history(_circuit)
65
+ []
66
+ end
67
+
68
+ # @param (see Interface#list)
69
+ # @return (see Interface#list)
70
+ def list
71
+ []
72
+ end
73
+
74
+ # This backend is fault tolerant
75
+ #
76
+ # @param (see Interface#fault_tolerant?)
77
+ # @return (see Interface#fault_tolerant?)
78
+ def fault_tolerant?
79
+ true
80
+ end
81
+ end
82
+ end
83
+ end
@@ -10,5 +10,6 @@ require 'faulty/storage/auto_wire'
10
10
  require 'faulty/storage/circuit_proxy'
11
11
  require 'faulty/storage/fallback_chain'
12
12
  require 'faulty/storage/fault_tolerant_proxy'
13
+ require 'faulty/storage/null'
13
14
  require 'faulty/storage/memory'
14
15
  require 'faulty/storage/redis'
@@ -3,6 +3,6 @@
3
3
  class Faulty
4
4
  # The current Faulty version
5
5
  def self.version
6
- Gem::Version.new('0.7.1')
6
+ Gem::Version.new('0.7.2')
7
7
  end
8
8
  end
data/lib/faulty.rb CHANGED
@@ -128,6 +128,33 @@ class Faulty
128
128
  def current_time
129
129
  Time.now.to_i
130
130
  end
131
+
132
+ # Disable Faulty circuits
133
+ #
134
+ # This allows circuits to run as if they were always closed. Does
135
+ # not disable caching.
136
+ #
137
+ # Intended for use in tests, or to disable Faulty entirely for an
138
+ # environment.
139
+ #
140
+ # @return [void]
141
+ def disable!
142
+ @disabled = true
143
+ end
144
+
145
+ # Re-enable Faulty if disabled with {#disable!}
146
+ #
147
+ # @return [void]
148
+ def enable!
149
+ @disabled = false
150
+ end
151
+
152
+ # Check whether Faulty was disabled with {#disable!}
153
+ #
154
+ # @return [Boolean] True if disabled
155
+ def disabled?
156
+ @disabled == true
157
+ end
131
158
  end
132
159
 
133
160
  attr_reader :options
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faulty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Howard
@@ -147,6 +147,7 @@ files:
147
147
  - lib/faulty/error.rb
148
148
  - lib/faulty/events.rb
149
149
  - lib/faulty/events/callback_listener.rb
150
+ - lib/faulty/events/filter_notifier.rb
150
151
  - lib/faulty/events/honeybadger_listener.rb
151
152
  - lib/faulty/events/listener_interface.rb
152
153
  - lib/faulty/events/log_listener.rb
@@ -165,6 +166,7 @@ files:
165
166
  - lib/faulty/storage/fault_tolerant_proxy.rb
166
167
  - lib/faulty/storage/interface.rb
167
168
  - lib/faulty/storage/memory.rb
169
+ - lib/faulty/storage/null.rb
168
170
  - lib/faulty/storage/redis.rb
169
171
  - lib/faulty/version.rb
170
172
  homepage: https://github.com/ParentSquare/faulty