refactor: 推进后端分层架构治理

This commit is contained in:
jxxghp
2026-08-18 00:29:14 +08:00
parent 5d0bacabd5
commit 5128ae9e1e
363 changed files with 34179 additions and 6019 deletions
+65
View File
@@ -0,0 +1,65 @@
"""事件处理异常的通知、降级和递归保护策略。"""
from __future__ import annotations
import traceback
from collections.abc import Callable
from typing import Any, Optional
from app.runtime.log import logger
from app.schemas.types import EventType
EventErrorNotifier = Callable[[str, str], object]
class EventErrorPolicy:
"""隔离处理器异常,并阻止 SystemError 处理失败再次广播。"""
def __init__(
self,
*,
notifier: Callable[[], Optional[EventErrorNotifier]],
emit_system_error: Callable[[dict], object],
) -> None:
"""注入通知读取器和 SystemError 发送回调。"""
self._notifier = notifier
self._emit_system_error = emit_system_error
def handle(
self,
*,
event: Any,
module_name: str,
class_name: str,
method_name: str,
error: Exception,
) -> None:
"""记录并通知异常;SystemError 自身失败时只降级写日志。"""
trace = traceback.format_exc()
logger.error("%s 事件处理出错:%s - %s", module_name, str(error), trace)
notifier = self._notifier()
if notifier:
try:
notifier(
f"{module_name} 处理事件 {event.event_type} 时出错",
f"{class_name}.{method_name}{str(error)}",
)
except Exception as notify_error:
logger.error("发送事件错误通知失败:%s", str(notify_error))
if event.event_type == EventType.SystemError:
logger.error(
"SystemError 处理器再次失败,停止错误事件递归广播:%s.%s",
class_name,
method_name,
)
return
self._emit_system_error(
{
"type": "event",
"event_type": event.event_type,
"event_handle": f"{class_name}.{method_name}",
"error": str(error),
"traceback": trace,
}
)