evt-retry 0.1.2.0 → 0.1.2.1

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: ead5a0d5b48258bfa2e98064a2c647fa6acf795149b68ec7ea73d94756b5b97f
4
- data.tar.gz: 1d9aae6ee82c7dd3d38f3f102abc9a595e8eddd25fd0ff99a67d13b9b1610fee
3
+ metadata.gz: d0858ebb71e9f1bf0136bee2cd4a95e9bce3d2896afe53093fd6954323c60e2b
4
+ data.tar.gz: 7050a039f26137b3b54be6c854ee4f44b832d2e0698002dfa6d3d8b4b4ef67fc
5
5
  SHA512:
6
- metadata.gz: 4c2af64e361bd3c9d50cedda46d6cdd598c28340c1aa1ab5b6141faf2db2070d48544f883d1a3133dc60b7494b3003cc9b7497595ef62a9746980a1a1f8a3fce
7
- data.tar.gz: 532d792246a1b2980e57f2dafc07ea42db7f0c5cf63e752f25beb565211398b6a656b5cb20e93c4da90a3b45833aaa9a244977df7c2378d078fbf3f4892a8210
6
+ metadata.gz: 3c7fe677fee3673097930922eb50176d30e0cb94850213beb69c788b8a1a837071166c104e839ad6b732c03b4cc2d80b98ee1df4b0164997d1b4aa0cc5223423
7
+ data.tar.gz: 7fe3bd1a7868b0221ebc9ea18a516748fb1701840beea24c63d40429f8bf8130d92a07fe3af95733941714b839dfa0d7684954872d07e98984a3cc7cd231035b
@@ -2,7 +2,9 @@ require 'try'
2
2
  require 'initializer'; Initializer.activate
3
3
  require 'dependency'; Dependency.activate
4
4
  require 'telemetry'
5
+ require 'log'
5
6
 
7
+ require 'retry/log'
6
8
  require 'retry/substitute'
7
9
  require 'retry/telemetry'
8
10
  require 'retry/retry'
@@ -0,0 +1,9 @@
1
+ class Retry
2
+ class Log < ::Log
3
+ def tag!(tags)
4
+ tags << :retry
5
+ tags << :library
6
+ tags << :verbose
7
+ end
8
+ end
9
+ end
@@ -1,4 +1,5 @@
1
1
  class Retry
2
+ include Log::Dependency
2
3
  include ::Telemetry::Dependency
3
4
  extend Retry::Telemetry::Register
4
5
 
@@ -12,7 +13,7 @@ class Retry
12
13
  attr_writer :action_executed
13
14
 
14
15
  def self.build
15
- new
16
+ instance = new
16
17
  end
17
18
 
18
19
  def self.configure(receiver, attr_name: nil)
@@ -31,37 +32,51 @@ class Retry
31
32
  errors = errors.flatten
32
33
  millisecond_intervals ||= [0]
33
34
 
35
+ logger.trace { "Starting retry (Errors: #{errors.join(', ')}, Millisecond Intervals: #{millisecond_intervals.join(', ')})" }
36
+
34
37
  intervals = millisecond_intervals.to_enum
35
38
 
36
- retries = 0
39
+ cycle = 0
37
40
 
38
41
  error = nil
39
42
  probe = proc { |e| error = e }
40
43
 
41
44
  loop do
42
45
  success = Try.(errors, error_probe: probe) do
43
- action.call(retries)
46
+ logger.debug { "Attempting (Cycle: #{cycle})" }
47
+ action.call(cycle)
44
48
  end
45
49
 
46
- action_executed&.call(retries)
47
-
48
- break if success
50
+ action_executed&.call(cycle)
49
51
 
50
- retries += 1
52
+ if success
53
+ logger.debug { "Attempt succeed (Cycle: #{cycle})" }
54
+ break
55
+ end
51
56
 
52
57
  interval = intervals.next
53
58
 
54
- telemetry.record :retried, Retry::Telemetry::Data.new(retries, error.class, interval)
59
+ logger.debug { "Attempt failed (Cycle: #{cycle}, Error: #{error.class.name})" }
60
+ telemetry.record :retried, Retry::Telemetry::Data.new(cycle, error.class, interval)
55
61
 
56
- break if interval.nil?
62
+ if interval.nil?
63
+ logger.debug { "No more attempts. Intervals depleted." }
64
+ break
65
+ end
57
66
 
67
+ logger.debug { "Will retry. Sleeping #{interval} milliseconds before next attempt." }
58
68
  sleep (interval/1000.0)
69
+
70
+ cycle += 1
59
71
  end
60
72
 
61
73
  unless error.nil?
74
+ logger.debug { "All attempts failed. Will not retry. (Cycle: #{cycle}, Error: #{error.class.name})" }
62
75
  raise error
63
76
  end
64
77
 
65
- retries
78
+ logger.info { "Attempt succeeded (Cycle: #{cycle})" }
79
+
80
+ cycle
66
81
  end
67
82
  end
@@ -6,7 +6,7 @@ class Retry
6
6
  record :retried
7
7
  end
8
8
 
9
- Data = Struct.new :retry, :error, :millisecond_interval
9
+ Data = Struct.new :cycle, :error, :millisecond_interval
10
10
 
11
11
  def self.sink
12
12
  Sink.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-retry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2.0
4
+ version: 0.1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Eventide Project
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-13 00:00:00.000000000 Z
11
+ date: 2018-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-try
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: evt-log
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: test_bench
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +106,7 @@ files:
92
106
  - lib/retry/controls/error.rb
93
107
  - lib/retry/controls/receiver.rb
94
108
  - lib/retry/controls/time.rb
109
+ - lib/retry/log.rb
95
110
  - lib/retry/retry.rb
96
111
  - lib/retry/substitute.rb
97
112
  - lib/retry/telemetry.rb