From 9f4568e81a06f43dda350bcbbbb177e73fe96111 Mon Sep 17 00:00:00 2001 From: Adam Cooke Date: Fri, 2 Jun 2017 14:25:25 +0100 Subject: [PATCH] callbacks for catching errors on the worker --- lib/postal/job.rb | 10 ++++++++++ lib/postal/worker.rb | 7 ++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/postal/job.rb b/lib/postal/job.rb index bf457bd..4ab3df4 100644 --- a/lib/postal/job.rb +++ b/lib/postal/job.rb @@ -5,6 +5,7 @@ module Postal def initialize(id, params = {}) @id = id @params = params.with_indifferent_access + on_initialize end def id @@ -15,6 +16,15 @@ module Postal @params || {} end + def on_initialize + # Called whenever the class is initialized. Can be overriden. + end + + def on_error(exception) + # Called if there's an exception while processing the perform block. + # Receives the exception. + end + def perform end diff --git a/lib/postal/worker.rb b/lib/postal/worker.rb index f1248d7..43fb9b9 100644 --- a/lib/postal/worker.rb +++ b/lib/postal/worker.rb @@ -54,13 +54,14 @@ module Postal klass = message['class_name'].constantize.new(message['id'], message['params']) klass.perform rescue => e - if defined?(Raven) - Raven.capture_exception(e, :extra => {:job_id => message['id']}) - end + klass.on_error(e) if defined?(klass) logger.warn "[#{message['id']}] \e[31m#{e.class}: #{e.message}\e[0m" e.backtrace.each do |line| logger.warn "[#{message['id']}] " + line end + if defined?(Raven) + Raven.capture_exception(e, :extra => {:job_id => message['id']}) + end ensure logger.info "[#{message['id']}] Finished processing \e[34m#{message['class_name']}\e[0m job in #{Time.now - start_time}s" end