from urllib.parse import parse_qs from .exposition import _bake_output from .registry import REGISTRY def make_asgi_app(registry=REGISTRY): """Create a ASGI app which serves the metrics from a registry.""" async def prometheus_app(scope, receive, send): assert scope.get("type") == "http" # Prepare parameters params = parse_qs(scope.get('query_string', b'')) accept_header = "Accept: " + ",".join([ value.decode("utf8") for (name, value) in scope.get('headers') if name.decode("utf8") == 'accept' ]) # Bake output status, header, output = _bake_output(registry, accept_header, params) # Return output payload = await receive() if payload.get("type") == "http.request": await send( { "type": "http.response.start", "status": int(status.split(' ')[0]), "headers": [ tuple(x.encode('utf8') for x in header) ] } ) await send({"type": "http.response.body", "body": output}) return prometheus_app
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
bridge | Folder | 0755 |
|
|
openmetrics | Folder | 0755 |
|
|
twisted | Folder | 0755 |
|
|
__init__.py | File | 1.77 KB | 0644 |
|
asgi.py | File | 1.16 KB | 0644 |
|
context_managers.py | File | 1.65 KB | 0644 |
|
core.py | File | 895 B | 0644 |
|
decorator.py | File | 15.43 KB | 0644 |
|
exposition.py | File | 14.92 KB | 0644 |
|
gc_collector.py | File | 1.42 KB | 0644 |
|
metrics.py | File | 21.66 KB | 0644 |
|
metrics_core.py | File | 11.6 KB | 0644 |
|
mmap_dict.py | File | 5.14 KB | 0644 |
|
multiprocess.py | File | 6.32 KB | 0644 |
|
parser.py | File | 7.09 KB | 0644 |
|
platform_collector.py | File | 1.69 KB | 0644 |
|
process_collector.py | File | 3.57 KB | 0644 |
|
registry.py | File | 5.23 KB | 0644 |
|
samples.py | File | 1.33 KB | 0644 |
|
utils.py | File | 621 B | 0644 |
|
values.py | File | 3.75 KB | 0644 |
|