Class: Amigo::Retry::ServerMiddleware
- Inherits:
-
Object
- Object
- Amigo::Retry::ServerMiddleware
- Defined in:
- lib/amigo/retry.rb
Instance Method Summary collapse
- #amigo_retry_in(worker_class, item, interval) ⇒ Object
- #call(worker, job, _queue) ⇒ Object
- #handle_die(_worker, job, e) ⇒ Object
- #handle_retry(worker, job, e) ⇒ Object
- #handle_retry_or_die(worker, job, e) ⇒ Object
Instance Method Details
#amigo_retry_in(worker_class, item, interval) ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/amigo/retry.rb', line 99 def amigo_retry_in(worker_class, item, interval) # pulled from perform_in int = interval.to_f now = Time.now.to_f ts = (int < 1_000_000_000 ? now + int : int) item["at"] = ts if ts > now item["retry_count"] = item.fetch("retry_count", 0) + 1 worker_class.client_push(item) end |
#call(worker, job, _queue) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/amigo/retry.rb', line 62 def call(worker, job, _queue) yield rescue Amigo::Retry::Retry => e handle_retry(worker, job, e) rescue Amigo::Retry::Die => e handle_die(worker, job, e) rescue Amigo::Retry::OrDie => e handle_retry_or_die(worker, job, e) rescue Amigo::Retry::Quit Sidekiq.logger.info("job_quit") return end |
#handle_die(_worker, job, e) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/amigo/retry.rb', line 82 def handle_die(_worker, job, e) Sidekiq.logger.warn("sending_to_deadset") job["error_class"] = e.class.to_s job["error_message"] = e.to_s payload = Sidekiq.dump_json(job) Sidekiq::DeadSet.new.kill(payload, notify_failure: false) end |
#handle_retry(worker, job, e) ⇒ Object
75 76 77 78 79 80 |
# File 'lib/amigo/retry.rb', line 75 def handle_retry(worker, job, e) Sidekiq.logger.info("scheduling_retry") job["error_class"] = e.class.to_s job["error_message"] = e.to_s self.amigo_retry_in(worker.class, job, e.) end |
#handle_retry_or_die(worker, job, e) ⇒ Object
90 91 92 93 94 95 96 97 |
# File 'lib/amigo/retry.rb', line 90 def handle_retry_or_die(worker, job, e) retry_count = job.fetch("retry_count", 0) if retry_count <= e.attempts handle_retry(worker, job, e) else handle_die(worker, job, e) end end |