Skip to content

Commit 18a3a4f

Browse files
committed
PRC server error
1 parent 2e360d6 commit 18a3a4f

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

packages/service-library/src/servicelib/rabbitmq/_errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class RemoteMethodNotRegisteredError(BaseRPCError):
2424
class RPCServerError(BaseRPCError):
2525
msg_template = (
2626
"While running method '{method_name}' raised "
27-
"'{exc_type}': '{exc_message}'\n{traceback}"
27+
"'{exc_type}' [{error_code}]: '{exc_message}'\n{traceback}"
2828
)
2929

3030

packages/service-library/src/servicelib/rabbitmq/_rpc_router.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
from dataclasses import dataclass, field
77
from typing import Any, TypeVar
88

9+
from common_library.error_codes import create_error_code
910
from models_library.rabbitmq_basic_types import RPCMethodName
11+
from servicelib.logging_errors import create_troubleshootting_log_kwargs
1012

1113
from ..logging_utils import log_context
1214
from ._errors import RPCServerError
@@ -43,7 +45,9 @@ def expose(
4345
*,
4446
reraise_if_error_type: tuple[type[Exception], ...] | None = None,
4547
) -> Callable[[DecoratedCallable], DecoratedCallable]:
48+
4649
def _decorator(func: DecoratedCallable) -> DecoratedCallable:
50+
4751
@functools.wraps(func)
4852
async def _wrapper(*args, **kwargs):
4953
with log_context(
@@ -67,14 +71,20 @@ async def _wrapper(*args, **kwargs):
6771
):
6872
raise
6973

70-
_logger.debug(
71-
"Unhandled exception on call %s on the rpc-server side: %s (%s). **Re-raising** as %s.",
72-
func.__name__,
73-
exc,
74-
f"{exc.__class__.__module__}.{exc.__class__.__name__}",
75-
RPCServerError.__name__,
74+
error_code = create_error_code(exc)
75+
_logger.exception(
76+
# NOTE: equivalent to a 500 http status code error
77+
**create_troubleshootting_log_kwargs(
78+
f"Unhandled exception on the rpc-server side for {func.__name__}",
79+
error=exc,
80+
error_code=error_code,
81+
error_context={
82+
"rpc_method": func.__name__,
83+
"args": args,
84+
"kwargs": kwargs,
85+
},
86+
)
7687
)
77-
7888
# NOTE: we do not return internal exceptions over RPC
7989
formatted_traceback = "\n".join(
8090
traceback.format_tb(exc.__traceback__)
@@ -84,6 +94,7 @@ async def _wrapper(*args, **kwargs):
8494
exc_type=f"{exc.__class__.__module__}.{exc.__class__.__name__}",
8595
exc_message=f"{exc}",
8696
traceback=f"{formatted_traceback}",
97+
error_code=error_code,
8798
) from None
8899

89100
self.routes[RPCMethodName(func.__name__)] = _wrapper

0 commit comments

Comments
 (0)