Sha256: a3e291eee15c20a006b0451e406ee8b3c80bcc9582ad95009d399226c42f35fd

Contents?: true

Size: 1.37 KB

Versions: 23

Compression:

Stored size: 1.37 KB

Contents

require "rack"

module Appsignal
  # @api private
  module Rack
    class GenericInstrumentation
      def initialize(app, options = {})
        Appsignal.logger.debug "Initializing Appsignal::Rack::GenericInstrumentation"
        @app = app
        @options = options
      end

      def call(env)
        if Appsignal.active?
          call_with_appsignal_monitoring(env)
        else
          @app.call(env)
        end
      end

      def call_with_appsignal_monitoring(env)
        request = ::Rack::Request.new(env)
        transaction = Appsignal::Transaction.create(
          SecureRandom.uuid,
          Appsignal::Transaction::HTTP_REQUEST,
          request
        )
        begin
          Appsignal.instrument("process_action.generic") do
            @app.call(env)
          end
        rescue Exception => error # rubocop:disable Lint/RescueException
          transaction.set_error(error)
          raise error
        ensure
          if env["appsignal.route"]
            transaction.set_action_if_nil(env["appsignal.route"])
          else
            transaction.set_action_if_nil("unknown")
          end
          transaction.set_metadata("path", request.path)
          transaction.set_metadata("method", request.request_method)
          transaction.set_http_or_background_queue_start
          Appsignal::Transaction.complete_current!
        end
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
appsignal-2.5.3-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.3 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.3.alpha.2 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.3.alpha.2-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.3.alpha.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.3.alpha.1-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.2-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.2 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.1-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.1.beta.1-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.1.beta.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.0-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.0 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.0.beta.1-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.0.beta.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.0.alpha.1-java lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.5.0.alpha.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.4.3 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.4.2 lib/appsignal/rack/generic_instrumentation.rb