Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions MIGRATION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ Span ops are now a smaller, framework-neutral set.

- The Cohere integration now emits `gen_ai.chat` instead of `ai.chat_completions.create.cohere`, and `gen_ai.embeddings` instead of `ai.embeddings.create.cohere`.
- The Django integration now emits `view.render` instead of `view.response.render`, `view` instead of `view.authenticate`, and `function` instead of `event.django`.
- The Django, Starlette, Starlite, and Litestar integrations now emit `middleware` instead of `middleware.django`, `middleware.starlette`, `middleware.starlette.receive`, `middleware.starlette.send`, `middleware.starlite`, `middleware.starlite.receive`, `middleware.starlite.send`, `middleware.litestar`, `middleware.litestar.receive`, and `middleware.litestar.send`.

#### Django

Expand Down
1 change: 1 addition & 0 deletions sentry_sdk/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -1360,6 +1360,7 @@ class OP:
HTTP_CLIENT = "http.client"
HTTP_CLIENT_STREAM = "http.client.stream"
HTTP_SERVER = "http.server"
MIDDLEWARE = "middleware"
MIDDLEWARE_DJANGO = "middleware.django"
MIDDLEWARE_LITESTAR = "middleware.litestar"
MIDDLEWARE_LITESTAR_RECEIVE = "middleware.litestar.receive"
Expand Down
2 changes: 1 addition & 1 deletion sentry_sdk/integrations/django/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def _check_middleware_span(
middleware_span = sentry_sdk.start_span(
name=description,
attributes={
"sentry.op": OP.MIDDLEWARE_DJANGO,
"sentry.op": OP.MIDDLEWARE,
"sentry.origin": DjangoIntegration.origin,
SPANDATA.MIDDLEWARE_NAME: middleware_name,
},
Expand Down
6 changes: 3 additions & 3 deletions sentry_sdk/integrations/litestar.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ async def _create_span_call(
with sentry_sdk.start_span(
name=middleware_name,
attributes={
"sentry.op": OP.MIDDLEWARE_LITESTAR,
"sentry.op": OP.MIDDLEWARE,
"sentry.origin": LitestarIntegration.origin,
},
) as middleware_span:
Expand All @@ -187,7 +187,7 @@ async def _sentry_receive(
with sentry_sdk.start_span(
name=getattr(receive, "__qualname__", str(receive)),
attributes={
"sentry.op": OP.MIDDLEWARE_LITESTAR_RECEIVE,
"sentry.op": OP.MIDDLEWARE,
"sentry.origin": LitestarIntegration.origin,
},
) as span:
Expand All @@ -207,7 +207,7 @@ async def _sentry_send(message: "Message") -> None:
with sentry_sdk.start_span(
name=getattr(send, "__qualname__", str(send)),
attributes={
"sentry.op": OP.MIDDLEWARE_LITESTAR_SEND,
"sentry.op": OP.MIDDLEWARE,
"sentry.origin": LitestarIntegration.origin,
},
) as span:
Expand Down
6 changes: 3 additions & 3 deletions sentry_sdk/integrations/starlette.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,11 +173,11 @@ def _start_middleware_span(op: str, name: str) -> "Any":
},
)

with _start_middleware_span(op=OP.MIDDLEWARE_STARLETTE, name=middleware_name):
with _start_middleware_span(op=OP.MIDDLEWARE, name=middleware_name):
# Creating spans for the "receive" callback
async def _sentry_receive(*args: "Any", **kwargs: "Any") -> "Any":
with _start_middleware_span(
op=OP.MIDDLEWARE_STARLETTE_RECEIVE,
op=OP.MIDDLEWARE,
name=getattr(receive, "__qualname__", str(receive)),
):
return await receive(*args, **kwargs)
Expand All @@ -189,7 +189,7 @@ async def _sentry_receive(*args: "Any", **kwargs: "Any") -> "Any":
# Creating spans for the "send" callback
async def _sentry_send(*args: "Any", **kwargs: "Any") -> "Any":
with _start_middleware_span(
op=OP.MIDDLEWARE_STARLETTE_SEND,
op=OP.MIDDLEWARE,
name=getattr(send, "__qualname__", str(send)),
):
return await send(*args, **kwargs)
Expand Down
6 changes: 3 additions & 3 deletions sentry_sdk/integrations/starlite.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,15 +163,15 @@ def _start_middleware_span(op: str, name: str) -> "Any":
},
)

with _start_middleware_span(op=OP.MIDDLEWARE_STARLITE, name=middleware_name):
with _start_middleware_span(op=OP.MIDDLEWARE, name=middleware_name):
# Creating spans for the "receive" callback
async def _sentry_receive(
*args: "Any", **kwargs: "Any"
) -> "Union[HTTPReceiveMessage, WebSocketReceiveMessage]":
if sentry_sdk.get_client().get_integration(StarliteIntegration) is None:
return await receive(*args, **kwargs)
with _start_middleware_span(
op=OP.MIDDLEWARE_STARLITE_RECEIVE,
op=OP.MIDDLEWARE,
name=getattr(receive, "__qualname__", str(receive)),
):
return await receive(*args, **kwargs)
Expand All @@ -185,7 +185,7 @@ async def _sentry_send(message: "Message") -> None:
if sentry_sdk.get_client().get_integration(StarliteIntegration) is None:
return await send(message)
with _start_middleware_span(
op=OP.MIDDLEWARE_STARLITE_SEND,
op=OP.MIDDLEWARE,
name=getattr(send, "__qualname__", str(send)),
):
return await send(message)
Expand Down
10 changes: 5 additions & 5 deletions tests/integrations/django/asgi/test_asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,11 +277,11 @@ async def test_async_middleware_spans(
render_span_tree(spans)
== """\
- sentry.op="http.server": name="/simple_async_view"
- sentry.op="middleware.django": name="django.contrib.sessions.middleware.SessionMiddleware.__acall__"
- sentry.op="middleware.django": name="django.contrib.auth.middleware.AuthenticationMiddleware.__acall__"
- sentry.op="middleware.django": name="django.middleware.csrf.CsrfViewMiddleware.__acall__"
- sentry.op="middleware.django": name="tests.integrations.django.myapp.settings.TestMiddleware.__acall__"
- sentry.op="middleware.django": name="django.middleware.csrf.CsrfViewMiddleware.process_view"
- sentry.op="middleware": name="django.contrib.sessions.middleware.SessionMiddleware.__acall__"
- sentry.op="middleware": name="django.contrib.auth.middleware.AuthenticationMiddleware.__acall__"
- sentry.op="middleware": name="django.middleware.csrf.CsrfViewMiddleware.__acall__"
- sentry.op="middleware": name="tests.integrations.django.myapp.settings.TestMiddleware.__acall__"
- sentry.op="middleware": name="django.middleware.csrf.CsrfViewMiddleware.process_view"
- sentry.op="view.render": name="simple_async_view\""""
)

Expand Down
26 changes: 13 additions & 13 deletions tests/integrations/django/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -1498,25 +1498,25 @@ def test_middleware_spans(
if DJANGO_VERSION >= (1, 10):
EXPECTED_MIDDLEWARE_SPANS = """\
- sentry.op="http.server": name="/message"
- sentry.op="middleware.django": name="django.contrib.sessions.middleware.SessionMiddleware.__call__"
- sentry.op="middleware.django": name="django.contrib.auth.middleware.AuthenticationMiddleware.__call__"
- sentry.op="middleware.django": name="django.middleware.csrf.CsrfViewMiddleware.__call__"
- sentry.op="middleware.django": name="tests.integrations.django.myapp.settings.TestMiddleware.__call__"
- sentry.op="middleware.django": name="tests.integrations.django.myapp.settings.TestFunctionMiddleware.__call__"
- sentry.op="middleware.django": name="django.middleware.csrf.CsrfViewMiddleware.process_view"
- sentry.op="middleware": name="django.contrib.sessions.middleware.SessionMiddleware.__call__"
- sentry.op="middleware": name="django.contrib.auth.middleware.AuthenticationMiddleware.__call__"
- sentry.op="middleware": name="django.middleware.csrf.CsrfViewMiddleware.__call__"
- sentry.op="middleware": name="tests.integrations.django.myapp.settings.TestMiddleware.__call__"
- sentry.op="middleware": name="tests.integrations.django.myapp.settings.TestFunctionMiddleware.__call__"
- sentry.op="middleware": name="django.middleware.csrf.CsrfViewMiddleware.process_view"
- sentry.op="view.render": name="message"\
"""
else:
EXPECTED_MIDDLEWARE_SPANS = """\
- sentry.op="http.server": name="/message"
- sentry.op="middleware.django": name="django.contrib.sessions.middleware.SessionMiddleware.process_request"
- sentry.op="middleware.django": name="django.contrib.auth.middleware.AuthenticationMiddleware.process_request"
- sentry.op="middleware.django": name="tests.integrations.django.myapp.settings.TestMiddleware.process_request"
- sentry.op="middleware.django": name="django.middleware.csrf.CsrfViewMiddleware.process_view"
- sentry.op="middleware": name="django.contrib.sessions.middleware.SessionMiddleware.process_request"
- sentry.op="middleware": name="django.contrib.auth.middleware.AuthenticationMiddleware.process_request"
- sentry.op="middleware": name="tests.integrations.django.myapp.settings.TestMiddleware.process_request"
- sentry.op="middleware": name="django.middleware.csrf.CsrfViewMiddleware.process_view"
- sentry.op="view.render": name="message"
- sentry.op="middleware.django": name="tests.integrations.django.myapp.settings.TestMiddleware.process_response"
- sentry.op="middleware.django": name="django.middleware.csrf.CsrfViewMiddleware.process_response"
- sentry.op="middleware.django": name="django.contrib.sessions.middleware.SessionMiddleware.process_response"\
- sentry.op="middleware": name="tests.integrations.django.myapp.settings.TestMiddleware.process_response"
- sentry.op="middleware": name="django.middleware.csrf.CsrfViewMiddleware.process_response"
- sentry.op="middleware": name="django.contrib.sessions.middleware.SessionMiddleware.process_response"\
"""
assert render_span_tree(spans) == EXPECTED_MIDDLEWARE_SPANS

Expand Down
24 changes: 10 additions & 14 deletions tests/integrations/litestar/test_litestar.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import sentry_sdk
from sentry_sdk import capture_message
from sentry_sdk.consts import OP
from sentry_sdk.integrations.litestar import LitestarIntegration
from sentry_sdk.utils import SENSITIVE_DATA_SUBSTITUTE
from tests.conftest import ApproxDict
Expand Down Expand Up @@ -208,11 +209,10 @@ def test_middleware_spans(
litestar_spans = (
span
for span in spans
if span["attributes"]["sentry.op"] == "middleware.litestar"
if span["attributes"]["sentry.op"] == OP.MIDDLEWARE and span["name"] in expected
)

for span in litestar_spans:
assert span["name"] in expected
assert span["name"] not in found
found.add(span["name"])
assert span["name"] == span["attributes"]["middleware.name"]
Expand Down Expand Up @@ -251,7 +251,7 @@ async def do_stuff(message):
"attributes": ApproxDict(
{
"middleware.name": "SampleMiddleware",
"sentry.op": "middleware.litestar",
"sentry.op": OP.MIDDLEWARE,
},
),
},
Expand All @@ -260,7 +260,7 @@ async def do_stuff(message):
"attributes": ApproxDict(
{
"middleware.name": "SampleMiddleware",
"sentry.op": "middleware.litestar.send",
"sentry.op": OP.MIDDLEWARE,
}
),
},
Expand All @@ -269,7 +269,7 @@ async def do_stuff(message):
"attributes": ApproxDict(
{
"middleware.name": "SampleMiddleware",
"sentry.op": "middleware.litestar.send",
"sentry.op": OP.MIDDLEWARE,
}
),
},
Expand All @@ -284,9 +284,7 @@ def is_matching_span(expected_span, actual_span):
sentry_sdk.flush()
spans = [item.payload for item in items]
actual_litestar_spans = list(
span
for span in spans
if "middleware.litestar" in span["attributes"].get("sentry.op")
span for span in spans if OP.MIDDLEWARE in span["attributes"].get("sentry.op")
)

assert len(actual_litestar_spans) == 3
Expand Down Expand Up @@ -368,7 +366,7 @@ async def my_send(*args, **kwargs):
"attributes": ApproxDict(
{
"middleware.name": "SamplePartialReceiveSendMiddleware",
"sentry.op": "middleware.litestar",
"sentry.op": OP.MIDDLEWARE,
}
),
},
Expand All @@ -377,7 +375,7 @@ async def my_send(*args, **kwargs):
"attributes": ApproxDict(
{
"middleware.name": "SamplePartialReceiveSendMiddleware",
"sentry.op": "middleware.litestar.receive",
"sentry.op": OP.MIDDLEWARE,
}
),
},
Expand All @@ -386,7 +384,7 @@ async def my_send(*args, **kwargs):
"attributes": ApproxDict(
{
"middleware.name": "SamplePartialReceiveSendMiddleware",
"sentry.op": "middleware.litestar.send",
"sentry.op": OP.MIDDLEWARE,
}
),
},
Expand All @@ -399,9 +397,7 @@ def is_matching_span(expected_span, actual_span):
)

actual_litestar_spans = list(
span
for span in spans
if "middleware.litestar" in span["attributes"].get("sentry.op")
span for span in spans if OP.MIDDLEWARE in span["attributes"].get("sentry.op")
)
assert len(actual_litestar_spans) == 3

Expand Down
Loading
Loading