freekiqs 0.1.0 → 0.2.0
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 +4 -4
- data/README.md +10 -0
- data/Rakefile +4 -5
- data/freekiqs.gemspec +2 -2
- data/lib/sidekiq/middleware/server/freekiqs.rb +16 -1
- data/spec/freekiqs_spec.rb +33 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c3fd9d32956c0caab13e95a0a6738d7ce66eb33
|
4
|
+
data.tar.gz: 8c42f1a66be5cb37ac7bcd83c7a9653625010a6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b7084b08cc39dc0ab99e67fe0313ae36dc9abe960b133ce1ed0214b18746d2f0e09a18d9270fec00d19a173ecf5621a6ef2a37a946f9312128850d8030bab1b
|
7
|
+
data.tar.gz: 1cf24ca22cab4863beb6874be99a021e4b60030de4e743e5bb91c8998375958224c698d15405d79d5641efd313d0c81d40121a639f15d0ad1ad3ed302cab284f
|
data/README.md
CHANGED
@@ -40,6 +40,16 @@ Example:
|
|
40
40
|
end
|
41
41
|
```
|
42
42
|
|
43
|
+
A callback can be fired when a freekiq happens.
|
44
|
+
This can be useful for tracking or logging freekiqs separately from the sidekiq logs.
|
45
|
+
|
46
|
+
Example:
|
47
|
+
``` ruby
|
48
|
+
Sidekiq::Middleware::Server::Freekiqs::callback = ->(worker, msg, queue) do
|
49
|
+
Librato::Metrics.submit freekiqs: { value: 1, source: worker.class.name }
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
43
53
|
## Overview
|
44
54
|
|
45
55
|
Up to the configured number of "freekiqs", catch exceptions thrown
|
data/Rakefile
CHANGED
data/freekiqs.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = 'freekiqs'
|
5
|
-
gem.version = '0.
|
5
|
+
gem.version = '0.2.0'
|
6
6
|
gem.authors = ['Rob Lewis']
|
7
7
|
gem.email = ['rob@bookbub.com']
|
8
8
|
gem.summary = 'Sidekiq middleware extending RetryJobs to allow silient errors.'
|
@@ -17,5 +17,5 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.required_ruby_version = '>= 1.9.3'
|
18
18
|
|
19
19
|
gem.add_dependency 'sidekiq', '>= 1.0.0', '< 4.0.0'
|
20
|
-
gem.add_development_dependency 'rspec', '
|
20
|
+
gem.add_development_dependency 'rspec', '>= 2.14.1'
|
21
21
|
end
|
@@ -8,6 +8,7 @@ module Sidekiq
|
|
8
8
|
module Server
|
9
9
|
class Freekiqs
|
10
10
|
include Sidekiq::Util
|
11
|
+
@@callback = nil
|
11
12
|
|
12
13
|
def initialize(opts={})
|
13
14
|
@default_freekiqs = opts[:freekiqs]
|
@@ -19,7 +20,13 @@ module Sidekiq
|
|
19
20
|
freekiqs = get_freekiqs_if_enabled(worker, msg)
|
20
21
|
if freekiqs
|
21
22
|
if msg['retry_count'].nil? || msg['retry_count'] < freekiqs-1
|
22
|
-
|
23
|
+
begin
|
24
|
+
@@callback.call(worker, msg, queue) if @@callback
|
25
|
+
rescue => callback_exception
|
26
|
+
Sidekiq.logger.info { "Freekiq callback failed for #{msg['class']} job #{msg['jid']}" }
|
27
|
+
ensure
|
28
|
+
raise FreekiqException, ex.message
|
29
|
+
end
|
23
30
|
else
|
24
31
|
Sidekiq.logger.info { "Out of free kiqs for #{msg['class']} job #{msg['jid']}" }
|
25
32
|
end
|
@@ -40,6 +47,14 @@ module Sidekiq
|
|
40
47
|
end
|
41
48
|
freekiqs
|
42
49
|
end
|
50
|
+
|
51
|
+
def self.callback
|
52
|
+
@@callback
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.callback=(callback_lambda)
|
56
|
+
@@callback = callback_lambda
|
57
|
+
end
|
43
58
|
end
|
44
59
|
end
|
45
60
|
end
|
data/spec/freekiqs_spec.rb
CHANGED
@@ -165,4 +165,37 @@ describe Sidekiq::Middleware::Server::Freekiqs do
|
|
165
165
|
expect(Sidekiq::RetrySet.new.size).to eq(0)
|
166
166
|
expect(Sidekiq::DeadSet.new.size).to eq(0)
|
167
167
|
end
|
168
|
+
|
169
|
+
it 'should execute a defined callback' do
|
170
|
+
Sidekiq::Middleware::Server::Freekiqs::callback = ->(worker, msg, queue) do
|
171
|
+
return true
|
172
|
+
end
|
173
|
+
|
174
|
+
handler = build_handler_chain
|
175
|
+
worker = worker_with_freekiqs_enabled
|
176
|
+
job = build_job
|
177
|
+
|
178
|
+
expect(Sidekiq::Middleware::Server::Freekiqs::callback).to receive(:call)
|
179
|
+
expect {
|
180
|
+
handler.invoke(worker, job, 'default') do
|
181
|
+
raise ArgumentError, 'overlooked'
|
182
|
+
end
|
183
|
+
}.to raise_error(Sidekiq::FreekiqException, 'overlooked')
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'should still raise FreekiqException if the callback fails' do
|
187
|
+
Sidekiq::Middleware::Server::Freekiqs::callback = ->(worker, msg, queue) do
|
188
|
+
raise 'callback error'
|
189
|
+
end
|
190
|
+
|
191
|
+
handler = build_handler_chain
|
192
|
+
worker = worker_with_freekiqs_enabled
|
193
|
+
job = build_job
|
194
|
+
|
195
|
+
expect {
|
196
|
+
handler.invoke(worker, job, 'default') do
|
197
|
+
raise ArgumentError, 'overlooked'
|
198
|
+
end
|
199
|
+
}.to raise_error(Sidekiq::FreekiqException, 'overlooked')
|
200
|
+
end
|
168
201
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freekiqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Lewis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -34,14 +34,14 @@ dependencies:
|
|
34
34
|
name: rspec
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 2.14.1
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - "
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.14.1
|
47
47
|
description: Sidekiq middleware extending RetryJobs to allow configuring how many
|