Skip to content
Closed
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
6 changes: 5 additions & 1 deletion sentry_sdk/integrations/aiohttp.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,8 +351,12 @@ async def on_request_start(
parsed_url.url if parsed_url else SENSITIVE_DATA_SUBSTITUTE,
)

span: "Union[Span, StreamedSpan]"
span: "Union[Span, StreamedSpan, None]"
if has_span_streaming_enabled(client.options):
if sentry_sdk.traces.get_current_span() is None:
trace_config_ctx.span = None
return

attributes: "Attributes" = {
"sentry.op": OP.HTTP_CLIENT,
"sentry.origin": AioHttpIntegration.origin,
Expand Down
39 changes: 20 additions & 19 deletions sentry_sdk/integrations/aiomysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,33 +179,34 @@ async def _inner(self: "Connection") -> T:
"sentry.origin": AioMySQLIntegration.origin,
} | breadcrumb_data

if sentry_sdk.traces.get_current_span() is None:
return await f(self)

with sentry_sdk.traces.start_span(
name="connect", attributes=span_attributes
) as span:
):
with capture_internal_exceptions():
sentry_sdk.add_breadcrumb(
message="connect", category="query", data=breadcrumb_data
)
res = await f(self)
else:
connect_data = _get_connect_data(self)

with sentry_sdk.start_span(
op=OP.DB,
name="connect",
origin=AioMySQLIntegration.origin,
) as span:
_set_db_data(span, self)
return await f(self)

with capture_internal_exceptions():
sentry_sdk.add_breadcrumb(
message="connect",
category="query",
data=connect_data,
)
res = await f(self)
connect_data = _get_connect_data(self)

return res
with sentry_sdk.start_span(
op=OP.DB,
name="connect",
origin=AioMySQLIntegration.origin,
) as span:
_set_db_data(span, self)

with capture_internal_exceptions():
sentry_sdk.add_breadcrumb(
message="connect",
category="query",
data=connect_data,
)
return await f(self)

return _inner

Expand Down
8 changes: 8 additions & 0 deletions sentry_sdk/integrations/anthropic.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,8 @@ def _sentry_patched_create_sync(f: "Any", *args: "Any", **kwargs: "Any") -> "Any

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return f(*args, **kwargs)
span = sentry_sdk.traces.start_span(
name=f"chat {model}".strip(),
attributes={
Expand Down Expand Up @@ -738,6 +740,8 @@ async def _sentry_patched_create_async(

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return await f(*args, **kwargs)
span = sentry_sdk.traces.start_span(
name=f"chat {model}".strip(),
attributes={
Expand Down Expand Up @@ -982,6 +986,8 @@ def _sentry_patched_enter(self: "MessageStreamManager") -> "MessageStream":
return f(self)

if has_span_streaming_enabled(client.options):
if sentry_sdk.traces.get_current_span() is None:
return f(self)
span = sentry_sdk.traces.start_span(
name="chat" if self._model is None else f"chat {self._model}".strip(),
attributes={
Expand Down Expand Up @@ -1089,6 +1095,8 @@ async def _sentry_patched_aenter(
return await f(self)

if has_span_streaming_enabled(client.options):
if sentry_sdk.traces.get_current_span() is None:
return await f(self)
span = sentry_sdk.traces.start_span(
name="chat" if self._model is None else f"chat {self._model}".strip(),
attributes={
Expand Down
3 changes: 3 additions & 0 deletions sentry_sdk/integrations/arq.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ async def _sentry_enqueue_job(
return await old_enqueue_job(self, function, *args, **kwargs)

if has_span_streaming_enabled(client.options):
if sentry_sdk.traces.get_current_span() is None:
return await old_enqueue_job(self, function, *args, **kwargs)

with sentry_sdk.traces.start_span(
name=function,
attributes={
Expand Down
15 changes: 8 additions & 7 deletions sentry_sdk/integrations/asyncio.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,14 @@ async def _task_with_sentry_span_creation() -> "Any":
with sentry_sdk.isolation_scope():
if task_spans:
if is_span_streaming_enabled:
span_ctx = sentry_sdk.traces.start_span(
name=get_name(coro),
attributes={
"sentry.op": OP.FUNCTION,
"sentry.origin": AsyncioIntegration.origin,
},
)
if sentry_sdk.traces.get_current_span() is not None:
span_ctx = sentry_sdk.traces.start_span(
name=get_name(coro),
attributes={
"sentry.op": OP.FUNCTION,
"sentry.origin": AsyncioIntegration.origin,
},
)
else:
span_ctx = sentry_sdk.start_span(
op=OP.FUNCTION,
Expand Down
50 changes: 25 additions & 25 deletions sentry_sdk/integrations/asyncpg.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,39 +235,39 @@ async def _inner(*args: "Any", **kwargs: "Any") -> "T":
except IndexError:
pass

if sentry_sdk.traces.get_current_span() is None:
return await f(*args, **kwargs)

with sentry_sdk.traces.start_span(
name="connect", attributes=span_attributes
) as span:
):
with capture_internal_exceptions():
sentry_sdk.add_breadcrumb(
message="connect", category="query", data=span_attributes
)
res = await f(*args, **kwargs)

else:
with sentry_sdk.start_span(
op=OP.DB,
name="connect",
origin=AsyncPGIntegration.origin,
) as span:
span.set_data(SPANDATA.DB_SYSTEM, "postgresql")
if addr:
try:
span.set_data(SPANDATA.SERVER_ADDRESS, addr[0])
span.set_data(SPANDATA.SERVER_PORT, addr[1])
except IndexError:
pass
span.set_data(SPANDATA.DB_NAME, database)
span.set_data(SPANDATA.DB_USER, user)
span.set_data(SPANDATA.DB_DRIVER_NAME, "asyncpg")
return await f(*args, **kwargs)

with capture_internal_exceptions():
sentry_sdk.add_breadcrumb(
message="connect", category="query", data=span._data
)
res = await f(*args, **kwargs)
with sentry_sdk.start_span(
op=OP.DB,
name="connect",
origin=AsyncPGIntegration.origin,
) as span:
span.set_data(SPANDATA.DB_SYSTEM, "postgresql")
if addr:
try:
span.set_data(SPANDATA.SERVER_ADDRESS, addr[0])
span.set_data(SPANDATA.SERVER_PORT, addr[1])
except IndexError:
pass
span.set_data(SPANDATA.DB_NAME, database)
span.set_data(SPANDATA.DB_USER, user)
span.set_data(SPANDATA.DB_DRIVER_NAME, "asyncpg")

return res
with capture_internal_exceptions():
sentry_sdk.add_breadcrumb(
message="connect", category="query", data=span._data
)
return await f(*args, **kwargs)

return _inner

Expand Down
2 changes: 2 additions & 0 deletions sentry_sdk/integrations/boto3.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ def _sentry_request_created(
is_span_streaming_enabled = has_span_streaming_enabled(client.options)
span: "Union[Span, StreamedSpan]"
if is_span_streaming_enabled:
if sentry_sdk.traces.get_current_span() is None:
return
span = sentry_sdk.traces.start_span(
name=description,
attributes={
Expand Down
6 changes: 5 additions & 1 deletion sentry_sdk/integrations/celery/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,9 @@ def _inner(*args: "Any", **kwargs: "Any") -> "Any":
span_streaming = has_span_streaming_enabled(client.options)

try:
if span_streaming and get_current_span() is None:
return f(*args, **kwargs)

span: "Union[Span, StreamedSpan]"
if span_streaming:
span = sentry_sdk.traces.start_span(
Expand Down Expand Up @@ -462,7 +465,8 @@ def _inner(*args: "Any", **kwargs: "Any") -> "Any":

with capture_internal_exceptions():
set_on_span(
SPANDATA.MESSAGING_MESSAGE_RETRY_COUNT, task.request.retries
SPANDATA.MESSAGING_MESSAGE_RETRY_COUNT,
task.request.retries,
)

with capture_internal_exceptions():
Expand Down
21 changes: 12 additions & 9 deletions sentry_sdk/integrations/clickhouse_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,16 @@ def _inner(*args: "P.args", **kwargs: "P.kwargs") -> "T":
params = args[3] if len(args) > 3 else kwargs.get("params")

if has_span_streaming_enabled(client.options):
span = sentry_sdk.traces.start_span(
name=query, # type: ignore
attributes={
"sentry.op": OP.DB,
"sentry.origin": ClickhouseDriverIntegration.origin,
SPANDATA.DB_QUERY_TEXT: str(query),
},
)
span = None
if sentry_sdk.traces.get_current_span() is not None:
span = sentry_sdk.traces.start_span(
name=query, # type: ignore
attributes={
"sentry.op": OP.DB,
"sentry.origin": ClickhouseDriverIntegration.origin,
SPANDATA.DB_QUERY_TEXT: str(query),
},
)
else:
span = sentry_sdk.start_span(
op=OP.DB,
Expand All @@ -110,7 +112,8 @@ def _inner(*args: "P.args", **kwargs: "P.kwargs") -> "T":

connection._sentry_span = span # type: ignore[attr-defined]

_set_db_data(span, connection)
if span is not None:
_set_db_data(span, connection)

# run the original code
ret = f(*args, **kwargs)
Expand Down
10 changes: 9 additions & 1 deletion sentry_sdk/integrations/cohere.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
import sentry_sdk
from sentry_sdk.integrations import DidNotEnable, Integration
from sentry_sdk.scope import should_send_default_pii
from sentry_sdk.utils import capture_internal_exceptions, event_from_exception, reraise
from sentry_sdk.utils import (
capture_internal_exceptions,
event_from_exception,
reraise,
)

try:
from cohere import (
Expand Down Expand Up @@ -154,6 +158,8 @@ def new_chat(*args: "Any", **kwargs: "Any") -> "Any":
message = kwargs.get("message")

if is_span_streaming_enabled:
if sentry_sdk.traces.get_current_span() is None:
return f(*args, **kwargs)
span = sentry_sdk.traces.start_span(
name="cohere.client.Chat",
attributes={
Expand Down Expand Up @@ -250,6 +256,8 @@ def new_embed(*args: "Any", **kwargs: "Any") -> "Any":
)

if is_span_streaming_enabled:
if sentry_sdk.traces.get_current_span() is None:
return f(*args, **kwargs)
span_ctx = sentry_sdk.traces.start_span(
name="Cohere Embedding Creation",
attributes={
Expand Down
6 changes: 6 additions & 0 deletions sentry_sdk/integrations/django/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,8 @@ def connect(self: "BaseDatabaseWrapper") -> None:

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return real_connect(self)
with sentry_sdk.traces.start_span(
name="connect",
attributes={
Expand All @@ -750,6 +752,8 @@ def _commit(self: "BaseDatabaseWrapper") -> None:

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return real_commit(self)
with sentry_sdk.traces.start_span(
name=SPANNAME.DB_COMMIT,
attributes={
Expand All @@ -776,6 +780,8 @@ def _rollback(self: "BaseDatabaseWrapper") -> None:

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return real_rollback(self)
with sentry_sdk.traces.start_span(
name=SPANNAME.DB_ROLLBACK,
attributes={
Expand Down
2 changes: 2 additions & 0 deletions sentry_sdk/integrations/django/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@ async def sentry_wrapped_callback(
return await callback(request, *args, **kwargs)

if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return await callback(request, *args, **kwargs)
with sentry_sdk.traces.start_span(
name=request.resolver_match.view_name,
attributes={
Expand Down
2 changes: 2 additions & 0 deletions sentry_sdk/integrations/django/caching.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ def _instrument_call(

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return original_method(*args, **kwargs)
with sentry_sdk.traces.start_span(
name=description,
attributes={
Expand Down
2 changes: 2 additions & 0 deletions sentry_sdk/integrations/django/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ def _check_middleware_span(
span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
middleware_span: "Union[Span, StreamedSpan]"
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return None
middleware_span = sentry_sdk.traces.start_span(
name=description,
attributes={
Expand Down
4 changes: 3 additions & 1 deletion sentry_sdk/integrations/django/signals_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,16 @@ def wrapper(*args: "Any", **kwargs: "Any") -> "Any":
sentry_sdk.get_client().options
)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return receiver(*args, **kwargs)
with sentry_sdk.traces.start_span(
name=signal_name,
attributes={
"sentry.op": OP.EVENT_DJANGO,
"sentry.origin": DjangoIntegration.origin,
SPANDATA.CODE_FUNCTION_NAME: signal_name,
},
) as span:
):
return receiver(*args, **kwargs)
else:
with sentry_sdk.start_span(
Expand Down
2 changes: 2 additions & 0 deletions sentry_sdk/integrations/django/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ def _sentry_enqueue(self: "Any", *args: "Any", **kwargs: "Any") -> "Any":

span_streaming = has_span_streaming_enabled(sentry_sdk.get_client().options)
if span_streaming:
if sentry_sdk.traces.get_current_span() is None:
return old_task_enqueue(self, *args, **kwargs)
with sentry_sdk.traces.start_span(
name=name,
attributes={
Expand Down
Loading
Loading