sc4ry 0.1.0 → 0.1.3

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: ad841dbab3af84cbf8d7153d083add74200824d502a73aacc6d452f8e42a58d8
4
- data.tar.gz: 7a6fdee9c2e076ba750adcd421bbf1d2115acd9db7778b75e6ffe475234d4db3
3
+ metadata.gz: 9cc6197c11f5b2946c2a7d7ac2057de82866228b4628f5b2d3c0613a3c821ca2
4
+ data.tar.gz: 306af4cfc3217b7ccc174b9f93407a995faad9fd691b83b0c6848a620313647f
5
5
  SHA512:
6
- metadata.gz: dc1df50beebe4fb869ee88118c0cd922c45a02a79bf64b3f5dd9f539942980e0003b1444a1928f6ef0fced339a7672f8b6a65de463cec7ae87976a0c6f7e074e
7
- data.tar.gz: 3b0d6aed86e5196a7ac829c6efe692d621a410933f2b0213ba37b6fc56748b405e036195cd91375ba581b71a6bfe24d7386fc8335ba600ebc0e0913f2db86f9b
6
+ metadata.gz: d501193d93a2c0fca6db0b0d7429ff00510253f741347a03a6c6b26b872acb24cb14490ea8a9a61e8b768fce541fbda8c56555e2ba940a1bebe225c4b9065c9b
7
+ data.tar.gz: e7416163124dee124d7573f37cd2ef51f7d8152105727d057256b5b6738435ab28949c2ebfd5ff5a0d5604b20b40dad32b1ff5f755e3b0b0ab26409b605c710a
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Sc4ry provide the Circuit Breaker Design Pattern for your applications
4
4
 
5
+ ![Sc4ry logo](assets/images/logo_sc4ry.png) _Simple CircuitBreacker 4 RubY_
6
+
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
@@ -20,7 +22,51 @@ Or install it yourself as:
20
22
 
21
23
  ## Usage
22
24
 
23
- TODO: Write usage instructions here
25
+ ### sample with Restclient
26
+
27
+ ```ruby
28
+
29
+ require 'rubygems'
30
+ require 'sc4ry'
31
+
32
+
33
+ # defining a circuit, config must be empty or override from default
34
+ Sc4ry::Circuits.register({:circuit =>:test, :config => {:notifiers => [:prometheus, :mattermost], :exceptions => [Errno::ECONNREFUSED], :timeout => true, :timeout_value => 3, :check_delay => 5 }})
35
+
36
+ # display the list of known circuit
37
+ pp Sc4ry::Circuits.list
38
+
39
+ # display default config, must be override with a nested hash by calling default_config= method
40
+ pp Sc4ry::Circuits.default_config
41
+
42
+ # default values, circuit is half open before one of the max count is reached
43
+
44
+ # {:max_failure_count=>5, => maximum failure before opening circuit
45
+ # :timeout_value=>20, => timeout value, if :timeout => true
46
+ # :timeout=>false, => activate internal timeout
47
+ # :max_timeout_count=>5, => maximum timeout try before opening circuit
48
+ # :max_time=>10, => maximum time for a circuit run
49
+ # :max_overtime_count=>3, => maximum count of overtime before opening circuit
50
+ # :check_delay=>30, => delay after opening, before trying again to closed circuit or after an other check
51
+ # :notifiers=>[], => active notifier, must be :symbol in [:prometheus, :mattermost]
52
+ # :exceptions=>[StandardError, RuntimeError]} => list of selected Exceptions considered for failure, others are SKIPPED.
53
+
54
+ # display configuration for a specific circuit
55
+ pp Sc4ry::Circuits.get circuit: :test
56
+
57
+ # sample Mattermost notification
58
+ #Sc4ry::Notifiers::config({:name => :mattermost, :config => {:url => 'https://mattermost.mycorp.com', :token => "<TOKEN>"}})
59
+
60
+ # sample loop
61
+ 100.times do
62
+ sleep 1
63
+ Sc4ry::Circuits.run circuit: :test do
64
+ # for the test choose or build an endpoint you must shutdown
65
+ puts RestClient.get('http://<URL_OF_A_ENDPOINT>')
66
+ end
67
+ end
68
+
69
+ ```
24
70
 
25
71
  ## Development
26
72
 
Binary file
Binary file
@@ -11,6 +11,8 @@ module Sc4ry
11
11
  :max_overtime_count => 3,
12
12
  :check_delay => 30,
13
13
  :notifiers => [],
14
+ :forward_unknown_exceptions => true,
15
+ :raise_on_opening => false,
14
16
  :exceptions => [StandardError, RuntimeError]
15
17
  }
16
18
 
@@ -86,7 +88,10 @@ module Sc4ry
86
88
  [:closed,:half_open,:open].each do |status|
87
89
  data[:status][:general] = status if worst_status.include? status
88
90
  end
89
- Sc4ry::Helpers.notify circuit: options[:circuit], config: data if save != data[:status][:general]
91
+ if save != data[:status][:general] then
92
+ raise Sc4ry::Exceptions:CircuitBreaked if data[:status][:general] == :open and data[:raise_on_opening]
93
+ Sc4ry::Helpers.notify circuit: options[:circuit], config: data
94
+ end
90
95
  @@circuits_store.put key: options[:circuit], value: data
91
96
  end
92
97
  end
@@ -13,7 +13,9 @@ require 'uri'
13
13
  require 'json'
14
14
 
15
15
 
16
+
16
17
  require_relative 'helpers'
18
+ require_relative 'exceptions'
17
19
  require_relative 'logger'
18
20
  require_relative 'backends/init'
19
21
  require_relative 'store'
@@ -0,0 +1,6 @@
1
+ module Sc4ry
2
+ module Exceptions
3
+ class CircuitBreaked < StandardError; end
4
+
5
+ end
6
+ end
data/lib/sc4ry/logger.rb CHANGED
@@ -18,8 +18,8 @@ module Sc4ry
18
18
  end
19
19
 
20
20
  def Logger.current=(sym)
21
- raise "Logger not define : #{sim}" unless @@loggers.keys.include? sim
22
- @@default = sym
21
+ raise "Logger not define : #{sym}" unless @@loggers.keys.include? sym
22
+ @@current = sym
23
23
  end
24
24
 
25
25
  def Logger.register(options = {})
@@ -43,7 +43,12 @@ module Sc4ry
43
43
  elsif @circuit[:exceptions].include? e.class
44
44
  @failure = true
45
45
  else
46
- Sc4ry::Loggers.warning "skipped : #{@last_exception}"
46
+ if @circuit[:forward_unknown_exceptions] then
47
+ raise @last_exception.class, "Sc4ry forward: #{@last_exception.message}"
48
+ else
49
+ Sc4ry::Loggers.warning "skipped : #{@last_exception}"
50
+ end
51
+
47
52
  end
48
53
  end
49
54
  @end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
data/lib/sc4ry/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sc4ry
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sc4ry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain GEORGES
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-21 00:00:00.000000000 Z
11
+ date: 2022-03-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Sc4ry provide the design pattern Circuit breaker for your application.
14
14
  email:
@@ -23,6 +23,8 @@ files:
23
23
  - LICENSE.txt
24
24
  - README.md
25
25
  - Rakefile
26
+ - assets/images/logo_sc4ry.png
27
+ - assets/logo_sc4ry.png
26
28
  - bin/console
27
29
  - bin/setup
28
30
  - lib/sc4ry.rb
@@ -31,6 +33,7 @@ files:
31
33
  - lib/sc4ry/backends/redis.rb
32
34
  - lib/sc4ry/circuits.rb
33
35
  - lib/sc4ry/dependencies.rb
36
+ - lib/sc4ry/exceptions.rb
34
37
  - lib/sc4ry/exporters/init.rb
35
38
  - lib/sc4ry/helpers.rb
36
39
  - lib/sc4ry/logger.rb