99require "protocol/http/content_encoding"
1010
1111require "async/http/cache"
12+ require "async/utilization"
1213require_relative "middleware/verbose"
1314require "protocol/rack"
1415
@@ -37,38 +38,35 @@ def self.middleware(rack_app, verbose: false, cache: true)
3738 end
3839
3940 # Initialize the server and set up statistics tracking.
40- def initialize ( ...)
41- super
41+ #
42+ # @parameter utilization_registry [Registry, nil] The utilization registry to use for metrics tracking.
43+ # If nil, a new registry instance is created.
44+ def initialize ( *arguments , utilization_registry : nil , **options )
45+ super ( *arguments , **options )
4246
43- @accept_count = 0
44- @connection_count = 0
47+ utilization_registry ||= Async ::Utilization ::Registry . new
4548
46- @request_count = 0
47- @active_count = 0
49+ # Get metric references for utilization tracking:
50+ @connections_total_metric = utilization_registry . metric ( :connections_total )
51+ @connections_active_metric = utilization_registry . metric ( :connections_active )
52+ @requests_total_metric = utilization_registry . metric ( :requests_total )
53+ @requests_active_metric = utilization_registry . metric ( :requests_active )
4854 end
4955
50- attr :request_count
51- attr :accept_count
52- attr :connect_count
53-
5456 # Accept a new connection and track connection statistics.
5557 def accept ( ...)
56- @accept_count += 1
57- @connection_count += 1
58-
59- super
60- ensure
61- @connection_count -= 1
58+ @connections_total_metric . increment
59+ @connections_active_metric . track do
60+ super
61+ end
6262 end
6363
6464 # Handle a request and track request statistics.
6565 def call ( ...)
66- @request_count += 1
67- @active_count += 1
68-
69- super
70- ensure
71- @active_count -= 1
66+ @requests_total_metric . increment
67+ @requests_active_metric . track do
68+ super
69+ end
7270 end
7371
7472 # Generates a human-readable string representing the current statistics.
@@ -83,7 +81,7 @@ def call(...)
8381 #
8482 # @returns [String] A string representing the current statistics.
8583 def statistics_string
86- "C=#{ format_count @connection_count } /#{ format_count @accept_count } R=#{ format_count @active_count } /#{ format_count @request_count } "
84+ "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 } "
8785 end
8886
8987 private
0 commit comments