class Hanami::Providers::Rack

Provider source to register Rack integration components in Hanami slices.

@see Hanami::Providers::Logger @see Hanami::Web::RackLogger @see github.com/rack/rack @see dry-rb.org/gems/dry-monitor/

@api private @since 2.0.0

Public Instance Methods

prepare() click to toggle source

@api private

# File lib/hanami/providers/rack.rb, line 17
def prepare
  Dry::Monitor.load_extensions(:rack)

  # Explicitly register the Rack middleware events on our notifications bus. The Dry::Monitor
  # rack extension (activated above) does register these globally, but if the notifications
  # bus has been used before this provider loads, then it will have created its own separate
  # local copy of all registered events as of that moment in time, which will not be included
  # in the Rack events globally registered above.
  notifications = target["notifications"]
  notifications.register_event(Dry::Monitor::Rack::Middleware::REQUEST_START)
  notifications.register_event(Dry::Monitor::Rack::Middleware::REQUEST_STOP)
  notifications.register_event(Dry::Monitor::Rack::Middleware::REQUEST_ERROR)
end
start() click to toggle source

@api private

# File lib/hanami/providers/rack.rb, line 32
def start
  slice.start :logger

  monitor_middleware = Dry::Monitor::Rack::Middleware.new(
    target["notifications"],
    clock: Dry::Monitor::Clock.new(unit: :microsecond)
  )

  rack_logger = Hanami::Web::RackLogger.new(target[:logger], env: slice.container.env)
  rack_logger.attach(monitor_middleware)

  register "monitor", monitor_middleware
end