Sha256: 3455acf2744edda5317324a7318ebc3ae9e940e4da53387ae194bc177691dd12

Contents?: true

Size: 904 Bytes

Versions: 5

Compression:

Stored size: 904 Bytes

Contents

# frozen_string_literal: true

module ElasticAPM
  # @api private
  class Middleware
    def initialize(app)
      @app = app
    end

    # rubocop:disable Metrics/MethodLength
    def call(env)
      begin
        transaction = ElasticAPM.transaction 'Rack', 'request',
          context: ElasticAPM.build_context(env)

        resp = @app.call env
        status, headers, = resp

        if transaction
          result = "HTTP #{status.to_s[0]}xx"
          transaction.submit(result, status: status, headers: headers)
        end
      rescue InternalError
        raise # Don't report ElasticAPM errors
      rescue ::Exception => e
        ElasticAPM.report(e, handled: false)
        transaction.submit('HTTP 5xx', status: 500) if transaction
        raise
      ensure
        transaction.release if transaction
      end

      resp
    end
    # rubocop:enable Metrics/MethodLength
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
elastic-apm-0.7.4 lib/elastic_apm/middleware.rb
elastic-apm-0.7.3 lib/elastic_apm/middleware.rb
elastic-apm-0.7.2 lib/elastic_apm/middleware.rb
elastic-apm-0.7.1 lib/elastic_apm/middleware.rb
elastic-apm-0.7.0 lib/elastic_apm/middleware.rb