class Server
A server listening on a specific endpoint, hosting a specific middleware.
Definitions
def self.middleware(rack_app, verbose: false, cache: true)
Wrap a rack application into a middleware suitable the server.
Signature
-
parameter
rack_appProc | Object A rack application/middleware.
-
parameter
verboseBoolean Whether to add the
class Falcon::Middleware::Verbosemiddleware.-
parameter
cacheBoolean Whether to add the
Async::HTTP::Cachemiddleware.
Implementation
def self.middleware(rack_app, verbose: false, cache: true)
::Protocol::HTTP::Middleware.build do
if verbose
use Middleware::Verbose
end
if cache
use Async::HTTP::Cache::General
end
use ::Protocol::HTTP::ContentEncoding
use ::Protocol::Rack::Adapter
run rack_app
end
end
def initialize(*arguments, utilization_registry: nil, **options)
Initialize the server and set up statistics tracking.
Signature
-
parameter
utilization_registryRegistry, nil The utilization registry to use for metrics tracking. If nil, a new registry instance is created.
Implementation
def initialize(*arguments, utilization_registry: nil, **options)
super(*arguments, **options)
utilization_registry ||= Async::Utilization::Registry.new
# Get metric references for utilization tracking:
@connections_total_metric = utilization_registry.metric(:connections_total)
@connections_active_metric = utilization_registry.metric(:connections_active)
@requests_total_metric = utilization_registry.metric(:requests_total)
@requests_active_metric = utilization_registry.metric(:requests_active)
end
def accept(...)
Accept a new connection and track connection statistics.
Implementation
def accept(...)
@connections_total_metric.increment
@connections_active_metric.track do
super
end
end
def call(...)
Handle a request and track request statistics.
Uses manual increment/decrement so requests_active stays elevated until the response body is closed (including rack.response_finished). The Body::RequestFinished wrapper runs the decrement after the body closes, so response_finished callbacks are counted as active.
Implementation
def call(...)
@requests_total_metric.increment
@requests_active_metric.increment
return Body::RequestFinished.wrap(super, @requests_active_metric)
end
def statistics_string
Generates a human-readable string representing the current statistics.
e.g. C=23/3.42K R=2/3.42K L=0.273
This can be interpreted as:
C=23/3.42K- The number of connections currently open and the total number of connections accepted.R=2/3.42K- The number of requests currently being processed and the total number of requests received.L=0.273- The average scheduler load of the server, where 0.0 is idle and 1.0 is fully loaded.
Signature
-
returns
String A string representing the current statistics.
Implementation
def statistics_string
"C=#{format_count @connections_active_metric.value}/#{format_count @connections_total_metric.value} R=#{format_count @requests_active_metric.value}/#{format_count @requests_total_metric.value}"
end