Add hooks to ActiveJob around retries and discards

This commit is contained in:
Steve S 2018-08-29 13:28:55 -04:00
parent 7e881a18d9
commit 26dc9bc8ee
No known key found for this signature in database
GPG Key ID: BE0ADD2E321CD624
3 changed files with 53 additions and 7 deletions

View File

@ -1,3 +1,7 @@
* Added `enqueue_retry.active_job`, `retry_stopped.active_job`, and `discard.active_job` hooks.
*steves*
* Allow `assert_performed_with` to be called without a block.
*bogdanvlviv*

View File

@ -44,12 +44,22 @@ module ActiveJob
# end
def retry_on(*exceptions, wait: 3.seconds, attempts: 5, queue: nil, priority: nil)
rescue_from(*exceptions) do |error|
payload = {
job: self,
adapter: self.class.queue_adapter,
error: error,
}
if executions < attempts
logger.error "Retrying #{self.class} in #{wait} seconds, due to a #{error.class}. The original exception was #{error.cause.inspect}."
retry_job wait: determine_delay(wait), queue: queue, priority: priority
ActiveSupport::Notifications.instrument("enqueue_retry.active_job", payload) do
logger.error "Retrying #{self.class} in #{wait} seconds, due to a #{error.class}. The original exception was #{error.cause.inspect}."
retry_job wait: determine_delay(wait), queue: queue, priority: priority
end
else
if block_given?
yield self, error
ActiveSupport::Notifications.instrument("retry_stopped.active_job", payload) do
yield self, error
end
else
logger.error "Stopped retrying #{self.class} due to a #{error.class}, which reoccurred on #{executions} attempts. The original exception was #{error.cause.inspect}."
raise error
@ -78,10 +88,18 @@ module ActiveJob
# end
def discard_on(*exceptions)
rescue_from(*exceptions) do |error|
if block_given?
yield self, error
else
logger.error "Discarded #{self.class} due to a #{error.class}. The original exception was #{error.cause.inspect}."
payload = {
job: self,
adapter: self.class.queue_adapter,
error: error,
}
ActiveSupport::Notifications.instrument("discard.active_job", payload) do
if block_given?
yield self, error
else
logger.error "Discarded #{self.class} due to a #{error.class}. The original exception was #{error.cause.inspect}."
end
end
end
end

View File

@ -458,6 +458,14 @@ Active Job
| `:adapter` | QueueAdapter object processing the job |
| `:job` | Job object |
### enqueue_retry.active_job
| Key | Value |
| ------------ | -------------------------------------- |
| `:job` | Job object |
| `:adapter` | QueueAdapter object processing the job |
| `:error` | The error that caused the retry |
### perform_start.active_job
| Key | Value |
@ -472,6 +480,22 @@ Active Job
| `:adapter` | QueueAdapter object processing the job |
| `:job` | Job object |
### retry_stopped.active_job
| Key | Value |
| ------------ | -------------------------------------- |
| `:adapter` | QueueAdapter object processing the job |
| `:job` | Job object |
| `:error` | The error that caused the retry |
### discard.active_job
| Key | Value |
| ------------ | -------------------------------------- |
| `:adapter` | QueueAdapter object processing the job |
| `:job` | Job object |
| `:error` | The error that caused the discard |
Action Cable
------------