breakers 1.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 194de9e7c8098e9f42bbcef74c01a05d5dcd21549745ad926a3d91e45683e51a
4
- data.tar.gz: 3821978885ed7aa4c18d17e1575965be6093219a30f4bbfa83bbbf53a595da11
3
+ metadata.gz: 1471486e4b71db051dc6b073a4f5f98cd3a2bb6a10b51a3da6d12d24b1bba5f6
4
+ data.tar.gz: d7703097ccb4bb819a32c80c28cfabc6563520ffd7552961546873243ab2f125
5
5
  SHA512:
6
- metadata.gz: 5f8100e0b7f6a97c2afc9005656432357c4ae727e20b44370b4267e647cbca6d0f75fa00aa59b5129d9abf17948da944cd6e016cb1dad02d0ac1d709cff917b5
7
- data.tar.gz: d80a4a4df1b473e5da6cf4ec1b3ce61043fc3e9b99ffd65a70934edc4c827ebed130636546e9999ed71fafb64087fc2a2e3d5bcdfbae8914f0212820f80cb9c7
6
+ metadata.gz: b99274dd003feb7f3b362950844eca5f9b194b9a30b0959dfdf8003e4163752dc0400cf69d868069a816089467c6d529788de5b4024186fe1c52f0e70db43ebf
7
+ data.tar.gz: a112b8f32680017e9c98fbd55b122aa2ab30bc33a1a950e9e2c9236ca4d294df4b96338012dab8e4f23e5e0fb89dba04768b37ee43b9eff0e34a1bebb4e78a4a
data/CHANGELOG.md CHANGED
@@ -3,3 +3,7 @@
3
3
  ## [1.0] - 2025-03-24
4
4
  ### Added
5
5
  - Support matching by service name (#40)
6
+
7
+ ## [1.0.1] - 2025-06-05
8
+ ### Added
9
+ - Allows forced outages to persist until explicitly ended, using `bundle exec rake breakers:end_forced_outage service="VAOS"`, for example.
data/README.md CHANGED
@@ -142,17 +142,14 @@ It's ok for your plugin to implement only part of this interface.
142
142
 
143
143
  ### Forcing an Outage
144
144
 
145
- Some services will have status endpoints that you can use to check their availability, and you may want to create an outage based on that.
146
- Because this is a middleware, it doesn't have the ability to periodically check these endpoints, but you can add that type of check to your
147
- application and then force an outage in breakers:
148
-
149
- ```ruby
150
- service.begin_forced_outage!
151
- service.end_forced_outage!
145
+ You can test an outage by faking or forcing an outage using:
146
+ ```
147
+ Breakers::Outage#begin_forced_outage!
148
+ ```
149
+ Once an forced outage is started, you must manually stop it using:
150
+ ```
151
+ Breakers::Outage#end_forced_outage!
152
152
  ```
153
-
154
- Unlike with outages detected by the middleware, forced outages are not periodically tested to see if they have completed and must be
155
- manually ended with a call to `end_forced_outage!`.
156
153
 
157
154
  ### Changing the Outage Response
158
155
 
@@ -26,13 +26,15 @@ module Breakers
26
26
 
27
27
  latest_outage = service.latest_outage
28
28
 
29
- if latest_outage && !latest_outage.ended?
30
- if latest_outage.ready_for_retest?(wait_seconds: service.seconds_before_retry)
29
+ if !latest_outage.nil? && !latest_outage&.ended?
30
+ if latest_outage.ready_for_retest?(wait_seconds: service.seconds_before_retry) && !latest_outage.forced?
31
+ # No outage detected, proceed with the request
31
32
  handle_request(service: service, request_env: request_env, current_outage: latest_outage)
32
33
  else
33
34
  outage_response(outage: latest_outage, service: service)
34
35
  end
35
36
  else
37
+ # No outage detected, proceed with the request
36
38
  handle_request(service: service, request_env: request_env)
37
39
  end
38
40
  end
@@ -45,9 +47,10 @@ module Breakers
45
47
  end
46
48
  if Breakers.outage_response[:type] == :status_code
47
49
  Faraday::Response.new.tap do |response|
50
+ forced = outage.forced? ? '[FORCED] ' : ''
48
51
  response.finish(
49
52
  status: Breakers.outage_response[:status_code],
50
- body: "Outage detected on #{service.name} beginning at #{outage.start_time.to_i}",
53
+ body: "#{forced}Outage detected on #{service.name} beginning at #{outage.start_time.to_i}",
51
54
  response_headers: {}
52
55
  )
53
56
  end
@@ -1,3 +1,3 @@
1
1
  module Breakers
2
- VERSION = '1.0'.freeze
2
+ VERSION = '1.0.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: breakers
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aubrey Holland
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-03-25 00:00:00.000000000 Z
11
+ date: 2025-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -233,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
233
  - !ruby/object:Gem::Version
234
234
  version: '0'
235
235
  requirements: []
236
- rubygems_version: 3.5.22
236
+ rubygems_version: 3.5.11
237
237
  signing_key:
238
238
  specification_version: 4
239
239
  summary: Handle outages to backend systems with a Faraday middleware