Class: Whoosh::Middleware::RequestLogger
- Inherits:
-
Object
- Object
- Whoosh::Middleware::RequestLogger
- Defined in:
- lib/whoosh/middleware/request_logger.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, logger:, metrics: nil) ⇒ RequestLogger
constructor
A new instance of RequestLogger.
Constructor Details
#initialize(app, logger:, metrics: nil) ⇒ RequestLogger
Returns a new instance of RequestLogger.
8 9 10 11 12 |
# File 'lib/whoosh/middleware/request_logger.rb', line 8 def initialize(app, logger:, metrics: nil) @app = app @logger = logger @metrics = metrics end |
Instance Method Details
#call(env) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/whoosh/middleware/request_logger.rb', line 14 def call(env) request_id = env["HTTP_X_REQUEST_ID"] || SecureRandom.uuid env["whoosh.request_id"] = request_id start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) status, headers, body = @app.call(env) duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round(2) headers = headers.dup headers["x-request-id"] = request_id @logger.info("request_complete", method: env["REQUEST_METHOD"], path: env["PATH_INFO"], status: status, duration_ms: duration_ms, request_id: request_id ) if @metrics @metrics.increment("whoosh_requests_total", labels: { method: env["REQUEST_METHOD"], path: env["PATH_INFO"], status: status.to_s }) @metrics.observe("whoosh_request_duration_seconds", duration_ms / 1000.0, labels: { path: env["PATH_INFO"] }) end [status, headers, body] end |