Sha256: 48abe87fe49ffaac6e94e669f4f0172018dd60a566edf5cf1796ba8c8fca2d72

Contents?: true

Size: 1.96 KB

Versions: 5

Compression:

Stored size: 1.96 KB

Contents

require 'delayed_job'

module Delayed
  module Plugins
    class Raven < ::Delayed::Plugin
      callbacks do |lifecycle|
        lifecycle.around(:invoke_job) do |job, *args, &block|
          begin
            # Forward the call to the next callback in the callback chain
            block.call(job, *args)
          rescue Exception => e
            # Log error to Sentry
            extra = {
              :delayed_job => {
                :id => job.id.to_s,
                :priority => job.priority,
                :attempts => job.attempts,
                :run_at => job.run_at,
                :locked_at => job.locked_at,
                :locked_by => job.locked_by,
                :queue => job.queue,
                :created_at => job.created_at
              }
            }
            # last_error can be nil
            extra[:last_error] = job.last_error[0...1000] if job.last_error
            # handlers are YAML objects in strings, we definitely can't
            # report all of that or the event will get truncated randomly
            extra[:handler] = job.handler[0...1000] if job.handler

            if job.respond_to?('payload_object') && job.payload_object.respond_to?('job_data')
              extra[:active_job] = job.payload_object.job_data
            end
            ::Raven.capture_exception(e,
                                      :logger => 'delayed_job',
                                      :tags => {
                                        :delayed_job_queue => job.queue,
                                        :delayed_job_id => job.id.to_s
                                      },
                                      :extra => extra)

            # Make sure we propagate the failure!
            raise e
          ensure
            ::Raven::Context.clear!
            ::Raven::BreadcrumbBuffer.clear!
          end
        end
      end
    end
  end
end

##
# Register DelayedJob Raven plugin
#
Delayed::Worker.plugins << Delayed::Plugins::Raven

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
sentry-raven-3.1.0 lib/raven/integrations/delayed_job.rb
sentry-raven-3.0.4 lib/raven/integrations/delayed_job.rb
sentry-raven-3.0.3 lib/raven/integrations/delayed_job.rb
sentry-raven-3.0.2 lib/raven/integrations/delayed_job.rb
sentry-raven-3.0.1 lib/raven/integrations/delayed_job.rb