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 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