sidekiq-circuit-breaker 0.1.0 → 0.1.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: 01760e5030cfb4c3d6032deed7cc1747c6d5c955d9fc021ce0b2b7ee97a9f908
4
- data.tar.gz: f79eb83bf8fdfd2221b73484b62309d976810faa99b4641f4ca5552ff2d3c786
3
+ metadata.gz: aae6bd24fc3af2bdfeb344bacc69ec93e6f4175150b1115a03fda4afa9100a2c
4
+ data.tar.gz: fbe37e0353ed5b7a7511d356e2109bc3df69d50cfd9ad1c495496580bd3b1e37
5
5
  SHA512:
6
- metadata.gz: 1931812d56c30710e8107152ee9ad9dc2b6174d12f090ed3d9c5aa0f6eac3c99604dd21791510175e9c6c2db5eed7adb36d899804c28ddb4128f90df258ffdd3
7
- data.tar.gz: 268d6a3d12d94a6426de7528c373aa1df68092fa8e943dca216c4df18aabf9fbd9a49901f42c606ed0eb342d5dcb161ce3a276d0852dd97ed7076606c024b4f4
6
+ metadata.gz: 69e364ebd646ce52632043ff1839c20165cfb2a16051a41eacefe8d74f7f20f5e50ceb5f63c85914a3ddf49dcfbbd381a2da7422a6849b7d5133446766799401
7
+ data.tar.gz: 3a4b270002105a6edb203bbbe66bbcdc3cd4745c6af682d1157cee89725013e0190bf3e3d552f370bb0d795627577d8247d337b76b27864e76c47949cda6edd5
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ *.gem
data/README.md CHANGED
@@ -1,15 +1,15 @@
1
- # Sidekiq::Circuitbreaker
1
+ # Sidekiq::CircuitBreaker
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/sidekiq/circuitbreaker`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ CircuitBreaker is a Sidekiq plugin that adds circuit breaker functionality.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ Based on [Circuit Breaker pattern](https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker).
6
6
 
7
7
  ## Installation
8
8
 
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'sidekiq-circuitbreaker'
12
+ gem 'sidekiq-circuit-breaker', require: 'sidekiq/circuit_breaker'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -18,11 +18,43 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install sidekiq-circuitbreaker
21
+ $ gem install sidekiq-circuit-breaker
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ Let's say you have a Worker called WebhookNotificationJob, that basically sends webhook notifications to extenal customer endpoints.
26
+
27
+ ```ruby
28
+ class WebhookNotificationJob
29
+ include Sidekiq::Worker
30
+
31
+ def perform(endpoint, payload)
32
+ post_to_endpoint(endpoint, body: payload)
33
+ end
34
+ end
35
+ ```
36
+
37
+ The problem of this is when some endpoint start to respond with errors or take to long to respond, the overall queue latency increases significantly.
38
+
39
+ With this gem you can apply CircuiBreaker pattern like this:
40
+
41
+ ```ruby
42
+ class WebhookNotificationJob
43
+ include Sidekiq::Worker
44
+ include Sidekiq::CircuitBreaker::Worker
45
+
46
+ sidekiq_circuit_breaker do |config|
47
+ config.set_scope ->(endpoint, _payload) do
48
+ uri = URI.parse(endpoint)
49
+ uri.hostname #=> The scope will be only the hostname i.e: google.com
50
+ end
51
+ end
52
+
53
+ def perform(endpoint, payload)
54
+ post_to_endpoint(endpoint, payload)
55
+ end
56
+ end
57
+ ```
26
58
 
27
59
  ## Development
28
60
 
@@ -32,7 +64,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
64
 
33
65
  ## Contributing
34
66
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/sidekiq-circuitbreaker.
67
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ResultadosDigitais/sidekiq-circuitbreaker.
36
68
 
37
69
  ## License
38
70
 
@@ -16,7 +16,7 @@ module Sidekiq
16
16
 
17
17
  mgr = CircuitBreaker::Manager.new(scope, options)
18
18
  if mgr.open? && msg['at'].nil?
19
- msg['at'] = (Time.now + mgr.time_to_open).to_f
19
+ msg['at'] = (Time.now + mgr.time_to_open + rand(10)).to_f
20
20
  end
21
21
 
22
22
  yield
@@ -43,8 +43,8 @@ module Sidekiq
43
43
 
44
44
  class Server
45
45
  def call(worker, msg, queue)
46
- circuit_breaker_enabled = worker.respond_to?(:sidekiq_circuit_breaker_enabled?)
47
- return unless circuit_breaker_enabled
46
+ circuit_breaker_enabled = worker.class.respond_to?(:sidekiq_circuit_breaker_enabled?)
47
+ return yield unless circuit_breaker_enabled
48
48
 
49
49
  def worker.perform(*args)
50
50
  manager = sidekiq_circuit_breaker_manager(args)
@@ -62,12 +62,11 @@ module Sidekiq
62
62
  super(*args)
63
63
  end
64
64
 
65
- options = worker.class.sidekiq_circuit_breaker_options
66
- manager = worker.sidekiq_circuit_breaker_manager(args, options)
65
+ manager = worker.sidekiq_circuit_breaker_manager(msg['args'])
67
66
 
68
67
  begin
69
68
  yield
70
- rescue Exception => e
69
+ rescue => e
71
70
  manager.evaluate_failure
72
71
  raise e
73
72
  end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module CircuitBreaker
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-circuit-breaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Sousa