From 8aa384a80bb63fea76c194b0cda7e44c94dda1bb Mon Sep 17 00:00:00 2001 From: user Date: Sun, 15 Feb 2026 15:54:52 +0100 Subject: [PATCH] feat: add pool stats to periodic metrics log Append pool=alive/total to the 60-second metrics summary and shutdown log. Pool health is now visible without waiting for health test cycles. --- src/s5p/server.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/s5p/server.py b/src/s5p/server.py index 406d6d5..444b3d5 100644 --- a/src/s5p/server.py +++ b/src/s5p/server.py @@ -192,7 +192,11 @@ async def _handle_client( # -- entry point ------------------------------------------------------------- -async def _metrics_logger(metrics: Metrics, stop: asyncio.Event) -> None: +async def _metrics_logger( + metrics: Metrics, + stop: asyncio.Event, + pool: ProxyPool | None = None, +) -> None: """Log metrics summary every 60 seconds.""" while not stop.is_set(): try: @@ -200,7 +204,10 @@ async def _metrics_logger(metrics: Metrics, stop: asyncio.Event) -> None: except asyncio.TimeoutError: pass if not stop.is_set(): - logger.info("metrics: %s", metrics.summary()) + line = metrics.summary() + if pool: + line += f" pool={pool.alive_count}/{pool.count}" + logger.info("metrics: %s", line) async def serve(config: Config) -> None: @@ -247,13 +254,17 @@ async def serve(config: Config) -> None: loop.add_signal_handler(sig, lambda s=sig: stop.set_result(s)) metrics_stop = asyncio.Event() - metrics_task = asyncio.create_task(_metrics_logger(metrics, metrics_stop)) + pool_ref = proxy_pool if isinstance(proxy_pool, ProxyPool) else None + metrics_task = asyncio.create_task(_metrics_logger(metrics, metrics_stop, pool_ref)) async with srv: sig = await stop logger.info("received %s, shutting down", signal.Signals(sig).name) if isinstance(proxy_pool, ProxyPool): await proxy_pool.stop() - logger.info("metrics: %s", metrics.summary()) + shutdown_line = metrics.summary() + if pool_ref: + shutdown_line += f" pool={pool_ref.alive_count}/{pool_ref.count}" + logger.info("metrics: %s", shutdown_line) metrics_stop.set() await metrics_task