Sha256: 1c2c666d82a01ed93c43031e47c6f8e0642aca3be310e8c90ec8c6b248326e55

Contents?: true

Size: 1.8 KB

Versions: 5

Compression:

Stored size: 1.8 KB

Contents

module RailsPerformance
  module Gems
    class DelayedJobExt

      class Plugin < ::Delayed::Plugin
        callbacks do |lifecycle|
          lifecycle.around(:invoke_job) do |job, *args, &block|
            begin
              now = Time.current
              block.call(job, *args)
              status = 'success'
            rescue Exception => error
              status = 'error'
              raise error
            ensure
              meta_data = RailsPerformance::Gems::DelayedJobExt::Plugin.meta(job.payload_object)
              record    = RailsPerformance::Models::DelayedJobRecord.new(
                jid: job.id,
                duration: (Time.current - now) * 1000,
                datetime: now.strftime(RailsPerformance::FORMAT),
                datetimei: now.to_i,
                source_type: meta_data[0],
                class_name: meta_data[1],
                method_name: meta_data[2],
                status: status
              )
              record.save
            end
          end
        end

        # [source_type, class_name, method_name, duration]
        def self.meta(payload_object)
          if payload_object.is_a?(::Delayed::PerformableMethod)
            if payload_object.object.is_a?(Module)
              [:class_method, payload_object.object.name, payload_object.method_name.to_s]
            else
              [:instance_method, payload_object.object.class.name, payload_object.method_name.to_s]
            end
          else
            [:instance_method, payload_object.class.name, "perform"]
          end
        rescue
          [:unknown, :unknown, :unknown]
        end
      end

      def self.init
        ::Delayed::Worker.plugins += [::RailsPerformance::Gems::DelayedJobExt::Plugin]
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rails_performance-1.2.3 lib/rails_performance/gems/delayed_job_ext.rb
rails_performance-1.2.2 lib/rails_performance/gems/delayed_job_ext.rb
rails_performance-1.2.1 lib/rails_performance/gems/delayed_job_ext.rb
rails_performance-1.2.0 lib/rails_performance/gems/delayed_job_ext.rb
rails_performance-1.2.0.alpha5 lib/rails_performance/gems/delayed_job_ext.rb