Sha256: 68f9177bd6e51661ae7a32d3cb90f4f75f421e1400cb0e370187f26cf4bb33d4

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require "pact_broker/logging"

module PactBroker
  module Api
    module Middleware
      class HttpDebugLogs
        include PactBroker::Logging

        EXCLUDE_HEADERS = ["puma.", "rack.", "pactbroker."]
        RACK_SESSION = "rack.session"

        def initialize(app)
          @app = app
          @logger = logger
        end

        def call(env)
          env_to_log = env.reject { | header, _ | header.start_with?(*EXCLUDE_HEADERS) }
          env_to_log["rack.session"] = env["rack.session"].to_hash if env["rack.session"]
          env_to_log["rack.input"] = request_body(env) if env["rack.input"]
          logger.debug("env", payload: env_to_log)
          status, headers, body = @app.call(env)
          logger.debug("response", payload: { "status" => status, "headers" => headers, "body" => body })
          [status, headers, body]
        end

        def request_body(env)
          buffer = env["rack.input"]
          request_body = buffer.read
          buffer.respond_to?(:rewind) && buffer.rewind
          JSON.parse(request_body) rescue request_body
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pact_broker-2.98.0 lib/pact_broker/api/middleware/http_debug_logs.rb
pact_broker-2.97.0 lib/pact_broker/api/middleware/http_debug_logs.rb