本次提交包含大量功能完善与修复: 1. 新增多类操作的操作人审计字段与环境校验逻辑 2. 修复多集成的认证头生成逻辑,支持动态token类型 3. 新增通知派发适配器框架与多渠道实现 4. 完善健康检查返回结果与指标监控项 5. 优化JQL校验逻辑与资产导入规则 6. 补充各类DTO字段与持久层映射关系 7. 修复并优化测试用例、配额、密钥轮转等服务逻辑
70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
"""外部系统限界上下文重构包。
|
||
|
||
开发期间根目录为 ``external_systems/``,切换日重命名为 ``external_systems/``。
|
||
本包采用轻量六边形架构(Ports & Adapters):
|
||
|
||
- ``core/``:数据类 + 端口定义 + 校验函数,不依赖任何外部
|
||
- ``use_cases/``:用例编排 + DTO + Mapper + Context 构建,依赖 ``core/``
|
||
- ``framework/`` + ``adapters/persistence/``:实现端口,依赖 ``core/`` 端口
|
||
|
||
详见 ``docs/vibe/v1.1/设计方案/2026-06-17-外部系统六边形架构重构-设计方案-最终版.md``。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from yuxi.utils import logger
|
||
|
||
|
||
def register_adapters() -> None:
|
||
"""显式注册所有外部系统适配器、认证插件与集成包。
|
||
|
||
由 ``server/utils/lifespan.py`` 在应用启动时调用(切换日后接入)。
|
||
|
||
调用顺序(蓝本 §12.1 第 8 条):
|
||
1. ``discover_adapters()``:扫描 ``framework/adapters/`` 注册协议适配器
|
||
2. ``discover_auth_plugins()``:扫描 ``framework/auth_plugins/`` 注册 9 个框架插件
|
||
3. ``discover_integration_packages()``:扫描 ``integrations/`` 注册厂商集成包
|
||
|
||
顺序约束说明:adapters 与 auth_plugins 互不依赖,可任意顺序;integrations 可能
|
||
注册渠道专属插件与适配器,放最后。三者均通过子包 ``__init__.py`` 自注册副作用完成。
|
||
"""
|
||
# 1. 自动发现并注册所有协议适配器
|
||
from yuxi.external_systems.framework.registry.discovery import discover_adapters
|
||
|
||
discover_adapters()
|
||
|
||
# 2. 自动发现并注册所有认证插件
|
||
from yuxi.external_systems.framework.auth_plugins.discovery import discover_auth_plugins
|
||
|
||
discover_auth_plugins()
|
||
|
||
# 3. 自动发现并导入所有集成包(由子包 __init__.py 自注册)
|
||
from yuxi.external_systems.integrations.discovery import discover_integration_packages
|
||
|
||
discover_integration_packages()
|
||
|
||
|
||
async def shutdown_external_systems() -> None:
|
||
"""应用关闭时释放外部系统模块持有的资源。
|
||
|
||
与 ``register_adapters`` 对称,由 ``server/utils/lifespan.py`` 在应用关停时调用。
|
||
|
||
释放顺序:
|
||
1. ``pool_manager.close_all()``:释放所有连接池句柄(httpx/gRPC 等)
|
||
2. ``default_registry.aclose_all()``:释放适配器实例缓存资源
|
||
|
||
任一步失败仅记录日志,不中断后续清理(best-effort)。
|
||
"""
|
||
from yuxi.external_systems.framework.registry.adapter_registry import default_registry
|
||
from yuxi.external_systems.framework.runtime.pool_manager import pool_manager
|
||
|
||
try:
|
||
await pool_manager.close_all()
|
||
except Exception:
|
||
logger.warning("释放外部系统连接池失败", exc_info=True)
|
||
|
||
try:
|
||
await default_registry.aclose_all()
|
||
except Exception:
|
||
logger.warning("释放外部系统适配器实例失败", exc_info=True)
|