Sha256: 9f00b5f62a76f605554669d62228290109e62eddde0c099601ccaa3e7f0a5d15

Contents?: true

Size: 1.8 KB

Versions: 3

Compression:

Stored size: 1.8 KB

Contents

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

      def call(env)
        # set transaction_id
        transaction_id=SecureRandom.uuid

        # 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

3 entries across 3 versions & 1 rubygems

Version Path
napa-0.1.2 lib/napa/middleware/logger.rb
napa-0.1.1 lib/napa/middleware/logger.rb
napa-0.1.0 lib/napa/middleware/logger.rb