Sha256: 3517056996b051d3f5099c4927221d043f290defd462267b8401f6aadf46473c

Contents?: true

Size: 1.7 KB

Versions: 8

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

module PlainApm
  module Hooks
    class ActiveJob < ActiveSupportSubscriber
      NOTIFICATION_PATTERN = /\A[^!]\w+\.active_job\Z/.freeze

      private

      def notification_pattern
        NOTIFICATION_PATTERN
      end

      def payload(event)
        name, base = attributes_from_notification(event)
        payload = event.payload
        job = payload[:job]

        base.tap do |o|
          o[:queue_name] = job.queue_name
          o[:job_id] = job.job_id
          o[:job_class] = job.class.name
          o[:job_arguments] = job.arguments
          o[:executions] = job.executions
          o[:enqueued_at] = enqueued_at(job)
          o[:dequeued_at] = dequeued_at(job)
          o[:scheduled_at] = job.scheduled_at
          o[:adapter] = payload[:adapter].class.name
          o[:aborted] = payload[:aborted]
        end

        case name
        when "enqueue", "enqueue_at", "perform"
          base
        when "enqueue_retry"
          base.tap do |o|
            o[:error] = payload[:error]
            o[:wait] = payload[:wait]
          end
        when "retry_stopped", "discard"
          base.tap do |o|
            o[:error] = payload[:error]
          end
        when "perform_start"
          nil
        else
          nil
        end
      end

      private

      def enqueued_at(job)
        if job.enqueued_at
          if job.enqueued_at.is_a?(Time)
            job.enqueued_at.iso8601(9)
          else
            Time.parse(job.enqueued_at).iso8601(9)
          end
        end
      end

      def dequeued_at(job)
        if job.respond_to?(:dequeued_at) && job.dequeued_at
          Time.parse(job.dequeued_at).iso8601(9)
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
plain_apm-0.10.2 lib/plain_apm/hooks/active_job.rb
plain_apm-0.10.0 lib/plain_apm/hooks/active_job.rb
plain_apm-0.9.8 lib/plain_apm/hooks/active_job.rb
plain_apm-0.9.7 lib/plain_apm/hooks/active_job.rb
plain_apm-0.9.6 lib/plain_apm/hooks/active_job.rb
plain_apm-0.9.5 lib/plain_apm/hooks/active_job.rb
plain_apm-0.9.4 lib/plain_apm/hooks/active_job.rb
plain_apm-0.9.3 lib/plain_apm/hooks/active_job.rb