Sha256: 5c370bead4da366aa93c5a89450f596746e58090b713ba797d62cf459d6fff8a

Contents?: true

Size: 1.98 KB

Versions: 2

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

require "appsignal"
require_relative "appsignal_ext"
require "securerandom"

# Remove Appsignal's own Que integration hook, so the Snowpack-hosted
# integration can be included manually.
Appsignal::Hooks.hooks.delete :que

module Snowpack
  module Instrumentation
    module Appsignal
      module Que
        # Enable like so:
        #
        # Que.error_notifier = Snowpack::Instrumentation::Appsignal::Que::ErrorNotifier
        ErrorNotifier = proc do |error, _job|
          ::Appsignal::Transaction.current.set_error(error)
        end

        def self.included(base)
          base.class_eval do
            def _run_with_appsignal(*args)
              env = {
                :metadata    => {
                  :id        => attrs[:job_id],
                  :queue     => attrs[:queue],
                  :run_at    => attrs[:run_at].to_s,
                  :priority  => attrs[:priority],
                  :attempts  => attrs[:error_count].to_i
                },
                :params => attrs[:args]
              }

              request = ::Appsignal::Transaction::GenericRequest.new(env)

              transaction = ::Appsignal::Transaction.create(
                SecureRandom.uuid,
                ::Appsignal::Transaction::BACKGROUND_JOB,
                request,
              )

              transaction.discard! unless instrument?

              begin
                ::Appsignal.instrument("perform_job.que") { _run_without_appsignal(*args) }
              rescue Exception => error
                transaction.set_error(error)
                raise error
              ensure
                transaction.set_action "#{attrs[:job_class]}#run"
                ::Appsignal::Transaction.complete_current!
              end
            end

            alias_method :_run_without_appsignal, :_run
            alias_method :_run, :_run_with_appsignal

            def instrument?
              true
            end
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
snowpack-1.0.0.alpha7 lib/snowpack/instrumentation/appsignal/que.rb
snowpack-1.0.0.alpha6 lib/snowpack/instrumentation/appsignal/que.rb