Sha256: 296711c7c8cc22be9ca9183a65ea63bd6f3795a8e2dd587cb3e0b29bb7f5153b

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

class Rage::Application
  def initialize(router)
    @router = router
  end

  def call(env)
    init_logger

    handler = @router.lookup(env)

    response = if handler
      params = Rage::ParamsParser.prepare(env, handler[:params])
      handler[:handler].call(env, params)
    else
      [404, {}, ["Not Found"]]
    end

  rescue Exception => e
    exception_str = "#{e.class} (#{e.message}):\n#{e.backtrace.join("\n")}"
    Rage.logger.error(exception_str)
    response = [500, {}, [exception_str]]

  ensure
    finalize_logger(env, response, params)
  end

  private

  DEFAULT_LOG_CONTEXT = {}.freeze
  private_constant :DEFAULT_LOG_CONTEXT

  def init_logger
    Thread.current[:rage_logger] = {
      tags: [Iodine::Rack::Utils.gen_request_tag],
      context: DEFAULT_LOG_CONTEXT,
      request_start: Process.clock_gettime(Process::CLOCK_MONOTONIC)
    }
  end

  def finalize_logger(env, response, params)
    logger = Thread.current[:rage_logger]

    duration = (
      (Process.clock_gettime(Process::CLOCK_MONOTONIC) - logger[:request_start]) * 1000
    ).round(2)

    logger[:final] = { env:, params:, response:, duration: }
    Rage.logger.info("")
    logger[:final] = nil
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rage-rb-0.6.0 lib/rage/application.rb
rage-rb-0.5.2 lib/rage/application.rb