You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR adds the target information for metrics reported by instrumentation/asgi.
Unfortunately, there's no ASGI standard to reliably get this information, and I was only able to get it for FastAPI.
I also tried to get the info with Sanic and Starlette (encode/starlette#685), but there's nothing in the scope allowing to recreate the route.
Besides the included unit tests, the logic was tested using the following app:
```python
import io
import fastapi
app = fastapi.FastAPI()
def dump_scope(scope):
b = io.StringIO()
print(scope, file=b)
return b.getvalue()
@app.get("/test/{id}")
def test(id: str, req: fastapi.Request):
print(req.scope)
return {"target": _collect_target_attribute(req.scope), "scope": dump_scope(req.scope)}
sub_app = fastapi.FastAPI()
@sub_app.get("/test/{id}")
def sub_test(id: str, req: fastapi.Request):
print(req.scope)
return {"target": _collect_target_attribute(req.scope), "scope": dump_scope(req.scope)}
app.mount("/sub", sub_app)
```
Partially fixes#1116
Note to reviewers: I tried to touch as less as possible, so that we don;t require a refactor before this change. However, we could consider changing `collect_request_attributes` so that it returns both a trace attributes and a metrics attributes.
Wihout that change we cannot add the `HTTP_TARGET` attribute to the list of metric atttributes, because it will be present but with high cardinality.
0 commit comments