Sha256: a9f52e982b3489c6664488b882c44e8fadd62507ef0f48f3a13cd2726ced3109

Contents?: true

Size: 1.8 KB

Versions: 25

Compression:

Stored size: 1.8 KB

Contents

module Napa
  class Middleware
    class Logger
      def initialize(app)
        @app = app
      end

      def call(env)
        # log the request
        Napa::Logger.logger.debug format_request(env)

        # process the request
        status, headers, body = @app.call(env)

        # log the response
        Napa::Logger.logger.debug format_response(status, headers, body)

        # return the results
        [status, headers, body]
      ensure
        # Clear the transaction id after each request
        Napa::LogTransaction.clear
      end

      private

        def format_request(env)
          request = Rack::Request.new(env)
          params =  request.params
          begin
            params = JSON.parse(request.body.read) if env['CONTENT_TYPE'] == 'application/json'
          rescue
            # do nothing, params is already set
          end

          request_data = {
            method:           env['REQUEST_METHOD'],
            path:             env['PATH_INFO'],
            query:            env['QUERY_STRING'],
            host:             Napa::Identity.hostname,
            pid:              Napa::Identity.pid,
            revision:         Napa::Identity.revision,
            params:           params
          }
          request_data[:user_id] = current_user.try(:id) if defined?(current_user)
          { request: request_data }
        end

        def format_response(status, headers, body)
          response_body = nil
          begin
            response_body = body.respond_to?(:body) ? body.body.map { |r| r } : nil
          rescue
            response_body = body.inspect
          end

          { response:
            {
              status:   status,
              headers:  headers,
              response: response_body
            }
          }
        end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
napa-0.2.1 lib/napa/middleware/logger.rb
napa-0.2.0 lib/napa/middleware/logger.rb
napa-0.1.29 lib/napa/middleware/logger.rb
napa-0.1.28 lib/napa/middleware/logger.rb
napa-0.1.26 lib/napa/middleware/logger.rb
napa-0.1.25 lib/napa/middleware/logger.rb
napa-0.1.24 lib/napa/middleware/logger.rb
napa-0.1.23 lib/napa/middleware/logger.rb
napa-0.1.22 lib/napa/middleware/logger.rb
napa-0.1.21 lib/napa/middleware/logger.rb
napa-0.1.20 lib/napa/middleware/logger.rb
napa-0.1.19 lib/napa/middleware/logger.rb
napa-0.1.18 lib/napa/middleware/logger.rb
napa-0.1.17 lib/napa/middleware/logger.rb
napa-0.1.16 lib/napa/middleware/logger.rb
napa-0.1.15 lib/napa/middleware/logger.rb
napa-0.1.14 lib/napa/middleware/logger.rb
napa-0.1.12 lib/napa/middleware/logger.rb
napa-0.1.13 lib/napa/middleware/logger.rb
napa-0.1.11 lib/napa/middleware/logger.rb