freekiqs 0.1.0 → 0.2.0

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
  SHA1:
3
- metadata.gz: 638d7e5e400a98fe5dbde8e7c145c8caf279a145
4
- data.tar.gz: 967ad2c2b650ed7a27f4573dfdaaf3ac61070e0c
3
+ metadata.gz: 0c3fd9d32956c0caab13e95a0a6738d7ce66eb33
4
+ data.tar.gz: 8c42f1a66be5cb37ac7bcd83c7a9653625010a6c
5
5
  SHA512:
6
- metadata.gz: 01e4a44ec9eebe9e8328f258c69c18ff42ce1e7c8cc50d0166b958dab857a95e5cf30e5c2bac0fcb1af5bcdd0a37817b14bf9d5df5437927a37446760bdf523e
7
- data.tar.gz: 65a722fce7bd7eaf1dc575dcf227a3d33efaaf9fa81f05989b70e4349ac5d92eff246d672bf0897fd6c25955bbdc5bc808e368437bbbd2a1fd83bf4adb25ca73
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
@@ -1,7 +1,6 @@
1
- begin
2
- require 'rspec/core/rake_task'
3
- RSpec::Core::RakeTask.new(:spec)
4
- rescue LoadError
5
- end
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
6
5
 
7
6
  task default: :spec
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.1.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', '~> 2.14.1'
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
- raise FreekiqException, ex.message
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
@@ -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.1.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-13 00:00:00.000000000 Z
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