2025-12-01
This commit is contained in:
+18
-1
@@ -6,6 +6,7 @@ from grpc.aio import Channel as AsyncChannel
|
||||
from grpc.aio import Server as AsyncServer
|
||||
|
||||
from sentry_sdk.integrations import Integration
|
||||
from sentry_sdk.utils import parse_version
|
||||
|
||||
from .client import ClientInterceptor
|
||||
from .server import ServerInterceptor
|
||||
@@ -41,6 +42,8 @@ else:
|
||||
|
||||
P = ParamSpec("P")
|
||||
|
||||
GRPC_VERSION = parse_version(grpc.__version__)
|
||||
|
||||
|
||||
def _wrap_channel_sync(func: Callable[P, Channel]) -> Callable[P, Channel]:
|
||||
"Wrapper for synchronous secure and insecure channel."
|
||||
@@ -127,7 +130,21 @@ def _wrap_async_server(func: Callable[P, AsyncServer]) -> Callable[P, AsyncServe
|
||||
**kwargs: P.kwargs,
|
||||
) -> Server:
|
||||
server_interceptor = AsyncServerInterceptor()
|
||||
interceptors = (server_interceptor, *(interceptors or []))
|
||||
interceptors = [
|
||||
server_interceptor,
|
||||
*(interceptors or []),
|
||||
] # type: Sequence[grpc.ServerInterceptor]
|
||||
|
||||
try:
|
||||
# We prefer interceptors as a list because of compatibility with
|
||||
# opentelemetry https://github.com/getsentry/sentry-python/issues/4389
|
||||
# However, prior to grpc 1.42.0, only tuples were accepted, so we
|
||||
# have no choice there.
|
||||
if GRPC_VERSION is not None and GRPC_VERSION < (1, 42, 0):
|
||||
interceptors = tuple(interceptors)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return func(*args, interceptors=interceptors, **kwargs) # type: ignore
|
||||
|
||||
return patched_aio_server # type: ignore
|
||||
|
||||
+2
-1
@@ -65,7 +65,8 @@ class SentryUnaryUnaryClientInterceptor(ClientInterceptor, UnaryUnaryClientInter
|
||||
|
||||
|
||||
class SentryUnaryStreamClientInterceptor(
|
||||
ClientInterceptor, UnaryStreamClientInterceptor # type: ignore
|
||||
ClientInterceptor,
|
||||
UnaryStreamClientInterceptor, # type: ignore
|
||||
):
|
||||
async def intercept_unary_stream(
|
||||
self,
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import sentry_sdk
|
||||
from sentry_sdk.consts import OP
|
||||
from sentry_sdk.integrations import DidNotEnable
|
||||
from sentry_sdk.integrations.grpc.consts import SPAN_ORIGIN
|
||||
from sentry_sdk.tracing import Transaction, TRANSACTION_SOURCE_CUSTOM
|
||||
from sentry_sdk.tracing import Transaction, TransactionSource
|
||||
from sentry_sdk.utils import event_from_exception
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
@@ -48,7 +48,7 @@ class ServerInterceptor(grpc.aio.ServerInterceptor): # type: ignore
|
||||
dict(context.invocation_metadata()),
|
||||
op=OP.GRPC_SERVER,
|
||||
name=name,
|
||||
source=TRANSACTION_SOURCE_CUSTOM,
|
||||
source=TransactionSource.CUSTOM,
|
||||
origin=SPAN_ORIGIN,
|
||||
)
|
||||
|
||||
|
||||
+3
-4
@@ -19,7 +19,8 @@ except ImportError:
|
||||
|
||||
|
||||
class ClientInterceptor(
|
||||
grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor # type: ignore
|
||||
grpc.UnaryUnaryClientInterceptor, # type: ignore
|
||||
grpc.UnaryStreamClientInterceptor, # type: ignore
|
||||
):
|
||||
_is_intercepted = False
|
||||
|
||||
@@ -60,9 +61,7 @@ class ClientInterceptor(
|
||||
client_call_details
|
||||
)
|
||||
|
||||
response = continuation(
|
||||
client_call_details, request
|
||||
) # type: UnaryStreamCall
|
||||
response = continuation(client_call_details, request) # type: UnaryStreamCall
|
||||
# Setting code on unary-stream leads to execution getting stuck
|
||||
# span.set_data("code", response.code().name)
|
||||
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import sentry_sdk
|
||||
from sentry_sdk.consts import OP
|
||||
from sentry_sdk.integrations import DidNotEnable
|
||||
from sentry_sdk.integrations.grpc.consts import SPAN_ORIGIN
|
||||
from sentry_sdk.tracing import Transaction, TRANSACTION_SOURCE_CUSTOM
|
||||
from sentry_sdk.tracing import Transaction, TransactionSource
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
@@ -42,7 +42,7 @@ class ServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
||||
metadata,
|
||||
op=OP.GRPC_SERVER,
|
||||
name=name,
|
||||
source=TRANSACTION_SOURCE_CUSTOM,
|
||||
source=TransactionSource.CUSTOM,
|
||||
origin=SPAN_ORIGIN,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user