Sha256: 8883f7183388fb6f6c6c6b8a59ebe4b8d794d9a6085a001eef61ac95cdafa45f

Contents?: true

Size: 1.5 KB

Versions: 8

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module Resque
  module Failure
    # Provides Resque integration with Airbrake.
    #
    # @since v5.0.0
    # @see https://github.com/resque/resque/wiki/Failure-Backends
    class Airbrake < Base
      def save
        ::Airbrake.notify_sync(exception, payload) do |notice|
          notice[:context][:component] = 'resque'
          notice[:context][:action] = action(payload)
        end
      end

      private

      # @return [String] job's name. When ActiveJob is present, retrieve
      #   job_class. When used directly, use worker's name
      def action(payload)
        active_job_args = payload['args'].first if payload['args']
        if active_job_args.is_a?(Hash) && active_job_args['job_class']
          active_job_args['job_class']
        else
          payload['class'].to_s
        end
      end
    end
  end
end

module Airbrake
  module Resque
    # Measures elapsed time of a job and notifies Airbrake of the execution
    # status.
    #
    # @since v9.6.0
    module Job
      def perform
        timing = Airbrake::Benchmark.measure do
          super
        end
      rescue StandardError => exception
        Airbrake.notify_queue_sync(
          queue: payload['class'],
          error_count: 1,
          timing: 0.01,
        )
        raise exception
      else
        Airbrake.notify_queue_sync(
          queue: payload['class'],
          error_count: 0,
          timing: timing,
        )
      end
    end
  end
end

Resque::Job.prepend(Airbrake::Resque::Job)

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
airbrake-13.0.5 lib/airbrake/resque.rb
airbrake-13.0.4 lib/airbrake/resque.rb
airbrake-13.0.3 lib/airbrake/resque.rb
airbrake-13.0.2 lib/airbrake/resque.rb
airbrake-13.0.1 lib/airbrake/resque.rb
airbrake-13.0.0 lib/airbrake/resque.rb
airbrake-12.0.0 lib/airbrake/resque.rb
airbrake-11.0.3 lib/airbrake/resque.rb