Class: Sidekiq::Middleware::Server::Freekiqs
- Inherits:
-
Object
- Object
- Sidekiq::Middleware::Server::Freekiqs
- Includes:
- ServerMiddleware
- Defined in:
- lib/sidekiq/middleware/server/freekiqs.rb
Constant Summary collapse
- @@callback =
nil
Class Method Summary collapse
Instance Method Summary collapse
- #call(worker, msg, queue) ⇒ Object
- #error_whitelisted?(ex, errors) ⇒ Boolean
- #get_freekiq_errors(worker) ⇒ Object
- #get_freekiqs(freekiqs, ex, errors) ⇒ Object
- #get_freekiqs_if_enabled(worker, ex) ⇒ Object
-
#initialize(opts = {}) ⇒ Freekiqs
constructor
A new instance of Freekiqs.
Constructor Details
#initialize(opts = {}) ⇒ Freekiqs
Returns a new instance of Freekiqs.
13 14 15 16 17 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 13 def initialize(opts={}) @default_freekiqs = opts[:freekiqs] @default_freekiq_for = opts[:freekiq_for] @@callback = opts[:callback] end |
Class Method Details
.callback ⇒ Object
82 83 84 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 82 def self.callback @@callback end |
.callback=(callback_lambda) ⇒ Object
86 87 88 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 86 def self.callback=(callback_lambda) @@callback = callback_lambda end |
Instance Method Details
#call(worker, msg, queue) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 19 def call(worker, msg, queue) yield rescue => ex freekiqs = get_freekiqs_if_enabled(worker, ex) if freekiqs if msg['retry_count'].nil? || msg['retry_count'] < freekiqs-1 begin @@callback.call(worker, msg, queue) if @@callback rescue => callback_exception logger.info { "Freekiq callback failed for #{msg['class']} job #{msg['jid']}" } ensure raise FreekiqException, ex. end else logger.info { "Out of freekiqs for #{msg['class']} job #{msg['jid']}" } end end raise ex end |
#error_whitelisted?(ex, errors) ⇒ Boolean
72 73 74 75 76 77 78 79 80 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 72 def error_whitelisted?(ex, errors) errors.any? do |error| if error.respond_to?(:name) && error.is_a?(Class) ex.class == error || ex.class < error else ex.class.name == error end end end |
#get_freekiq_errors(worker) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 54 def get_freekiq_errors(worker) if worker.class.['freekiq_for'] worker.class.['freekiq_for'] elsif @default_freekiq_for @default_freekiq_for end end |
#get_freekiqs(freekiqs, ex, errors) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 62 def get_freekiqs(freekiqs, ex, errors) if errors if error_whitelisted?(ex, errors) freekiqs.to_i end else freekiqs.to_i end end |
#get_freekiqs_if_enabled(worker, ex) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/sidekiq/middleware/server/freekiqs.rb', line 39 def get_freekiqs_if_enabled(worker, ex) freekiqs = nil if worker.class.['retry'] if worker.class.['freekiqs'] != false errors = get_freekiq_errors(worker) if worker.class.['freekiqs'] freekiqs = get_freekiqs(worker.class.['freekiqs'], ex, errors) elsif @default_freekiqs freekiqs = get_freekiqs(@default_freekiqs, ex, errors) end end end freekiqs end |