Sha256: 4cdf7f2c8e59f5752d224a87a96f56e291d7fafc2182d02180332c877a681235

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

require 'service_template/param_sanitizer'

module ServiceTemplate
  class Middleware
    class Logger
      include ServiceTemplate::ParamSanitizer

      def initialize(app)
        @app = app
      end

      def call(env)
        # log the request
        ServiceTemplate::Logger.logger.info format_request(env)

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

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

        # return the results
        [status, headers, body]
      ensure
        # Clear the transaction id after each request
        ServiceTemplate::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:           request.request_method,
            path:             request.path_info,
            query:            filtered_query_string(request.query_string),
            host:             ServiceTemplate::Identity.hostname,
            pid:              ServiceTemplate::Identity.pid,
            revision:         ServiceTemplate::Identity.revision,
            params:           filtered_parameters(params),
            remote_ip:        request.ip
          }
          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

          ServiceTemplate::Logger.response(status, headers, response_body)
        end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
service_template-0.5.2 lib/service_template/middleware/logger.rb
service_template-0.5.1 lib/service_template/middleware/logger.rb
service_template-0.5.0 lib/service_template/middleware/logger.rb