| 123456789101112131415161718192021222324252627282930313233343536373839 |
- from __future__ import annotations
- from aiohttp import hdrs, web
- from aiohttp.typedefs import Handler
- from ..exposition import _bake_output
- from ..registry import Collector, REGISTRY
- def make_aiohttp_handler(
- registry: Collector = REGISTRY,
- disable_compression: bool = False,
- ) -> Handler:
- """Create a aiohttp handler which serves the metrics from a registry."""
- async def prometheus_handler(request: web.Request) -> web.Response:
- # Prepare parameters
- params = {key: request.query.getall(key) for key in request.query.keys()}
- accept_header = ",".join(request.headers.getall(hdrs.ACCEPT, []))
- accept_encoding_header = ""
- # Bake output
- status, headers, output = _bake_output(
- registry,
- accept_header,
- accept_encoding_header,
- params,
- # use AIOHTTP's compression
- disable_compression=True,
- )
- response = web.Response(
- status=int(status.split(" ")[0]),
- headers=headers,
- body=output,
- )
- if not disable_compression:
- response.enable_compression()
- return response
- return prometheus_handler
|