Sha256: 53010d582eb75580ff53775dfb59bd666c05e906c6701f7f0fa3a25d8ba2ca06

Contents?: true

Size: 1.29 KB

Versions: 13

Compression:

Stored size: 1.29 KB

Contents

require 'rack'

module Appsignal
  module Rack
    class GenericInstrumentation
      def initialize(app, options = {})
        Appsignal.logger.debug 'Initializing Appsignal::Rack::GenericInstrumentation'
        @app, @options = app, 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 => error
          transaction.set_error(error)
          raise error
        ensure
          if env['appsignal.route']
            transaction.set_action(env['appsignal.route'])
          else
            transaction.set_action('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

13 entries across 13 versions & 1 rubygems

Version Path
appsignal-2.0.6 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.5 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.5.beta.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.1.0.alpha.3 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.1.0.alpha.2 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.1.0.alpha.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.4 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.3 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.2 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.0 lib/appsignal/rack/generic_instrumentation.rb
appsignal-2.0.0.beta.1 lib/appsignal/rack/generic_instrumentation.rb
appsignal-1.4.0.beta.1 lib/appsignal/rack/generic_instrumentation.rb