From 12d688f209ac803d888f1b059c49731f2e98e3dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Bj=C3=B6rk?= Date: Sat, 18 Feb 2012 19:49:59 -0800 Subject: [PATCH] added FailureJobs middleware --- lib/sidekiq.rb | 1 + lib/sidekiq/middleware/server/failure_jobs.rb | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 lib/sidekiq/middleware/server/failure_jobs.rb diff --git a/lib/sidekiq.rb b/lib/sidekiq.rb index a366955b..7a359189 100644 --- a/lib/sidekiq.rb +++ b/lib/sidekiq.rb @@ -11,6 +11,7 @@ require 'sidekiq/middleware/chain' require 'sidekiq/middleware/server/active_record' require 'sidekiq/middleware/server/airbrake' require 'sidekiq/middleware/server/unique_jobs' +require 'sidekiq/middleware/server/failure_jobs' require 'sidekiq/middleware/client/resque_web_compatibility' require 'sidekiq/middleware/client/unique_jobs' diff --git a/lib/sidekiq/middleware/server/failure_jobs.rb b/lib/sidekiq/middleware/server/failure_jobs.rb new file mode 100644 index 00000000..744e6795 --- /dev/null +++ b/lib/sidekiq/middleware/server/failure_jobs.rb @@ -0,0 +1,24 @@ +module Sidekiq + module Middleware + module Server + class FailureJobs + def call(*args) + yield + rescue => e + data = { + :failed_at => Time.now.strftime("%Y/%m/%d %H:%M:%S %Z"), + :payload => args[1], + :exception => e.class.to_s, + :error => e.to_s, + :backtrace => e.backtrace, + :worker => args[1]['class'], + :queue => args[2] + } + + Sidekiq.redis.rpush(:failed, MultiJson.encode(data)) + raise + end + end + end + end +end