状态:已定版(2026-09-07 实施,契约 1.23.0)
实施摘要:
sys_role 新增 manage_system / manage_audit_log 两管理位(Alembic 0029 + Flyway V14 + 达梦适配 db/migration-dm/V14,三迁移幂等);AllowedModule 新增 SYSTEM_MANAGEMENT(manage_system 推导,admin 恒真)、AUDIT_LOG 改由 manage_audit_log 推导;备份 6 接口鉴权由 ADMIN 硬判定改为系统管理权位,审计接口改为日志审计权位。dms/services/system_management_service.py / Java com.dms.service.SystemManagementService 双版对齐,12 接口 + POST backup/test-target):资源快照、指标采样历史、进程监控、存储用量、转换器状态、健康体检、系统信息、运行参数总览、运行日志尾部/下载、清空预览缓存、强制下线、备份目标连通测试。sys_metric_sample 表 + 后台线程(30 秒间隔、保留 7 天自动清理,DMS_METRIC_INTERVAL_SECONDS / DMS_METRIC_RETENTION_DAYS 可调);CPU/内存采样入库,磁盘实时查询不采样。DMS_LOG_FILE 配置(缺省 logs/dms-server.log),Python logging FileHandler / Java logback RollingFileAppender 双端落盘,级别统一为 DEBUG/INFO/WARNING/ERROR/CRITICAL(Java WARN 规范化为 WARNING 落盘)。PREVIEW_CACHE_CLEAR / FORCE_OFFLINE / BACKUP_TEST_TARGET(迁移同步扩 CHECK 白名单,含达梦大小写不敏感探测重建)。features/system/:systemTypes 守卫、systemApi、SystemDashboard);备份管理页签整体迁入 SystemDashboard;日志审计页签新增「运行日志」大尺寸模态窗口(尾部行数/级别过滤/刷新/全文下载);角色维护面板管理位区新增「系统管理」「日志审计」复选框;审计页可见性由 ADMIN 硬判定改为 allowedModules 驱动。test_system_management.py 引擎级 + 接口级);Java mvn compile/test 通过;前端 tsc 通过、vitest 424 项全绿。sys_role 两新列:manage_system / manage_audit_log(BOOLEAN NOT NULL DEFAULT 0);SYSTEM_MANAGEMENT ← manage_system;AUDIT_LOG ← manage_audit_log;其余模块推导不变;admin 恒真;system/** 全部接口(除 logs):系统管理权位;system/logs 与 system/logs/download(运行日志):日志审计权位(功能并入日志审计页签);backup/** 6 接口 + backup/test-target:ADMIN 硬判定 → 系统管理权位;audit/** 既有接口:ADMIN 硬判定 → 日志审计权位;allowedModules 下发;角色维护面板管理位区新增两复选框;admin 不受矩阵约束、默认全选。均为 /api/v1 前缀,响应 camelCase:
| 方法 | 路径 | 权限 | 说明 |
|---|---|---|---|
| GET | system/metrics/current |
系统管理 | CPU(占用率/核数/1分钟负载,Windows 负载为 null)/内存/交换/磁盘分区实时快照 + 开机时间(Java 无 API 恒空串) |
| GET | system/metrics/history?hours= |
系统管理 | 采样历史(hours ∈ 1/6/24/168/720,缺省 24),{hours, entries[]} |
| GET | system/process |
系统管理 | 进程 PID/CPU/RSS/VMS/线程数/启动时间/运行时长/运行时版本(Python 版 psutil、Java 版 MXBean,pythonVersion 字段名契约定版,Java 填 JDK 版本) |
| GET | system/storage-usage |
系统管理 | 七目录(original/preview/extracted/temporary/quarantine/recycle/voucher)字节数与文件数 |
| GET | system/converter |
系统管理 | LibreOffice 可用状态/可执行文件/并发上限/进行中/累计成功/累计失败/预览开关/超时(内存计数,重启清零) |
| GET | system/health |
系统管理 | 体检 5 项:DATABASE / STORAGE_WRITABLE / LIBREOFFICE / BACKUP_TARGET / STORAGE_ENCRYPTION,逐项 {item, ok, detail} |
| GET | system/info |
系统管理 | 14 字段:契约版本/后端类型(JAVA|PYTHON)/运行时版本/OS/主机名/架构/数据库类型/启动时间/运行时长/工作目录/存储根/备份配置路径/.env 路径/日志文件路径 |
| GET | system/runtime-config |
系统管理 | 只读配置总览(分类分组),密钥类(JWT 密钥/KEK/rsync 密码等)仅显示配置状态不回显值 |
| GET | system/logs?lines=&level= |
日志审计 | 日志文件尾部(lines ∈ 1..5000 缺省 500,级别过滤),{file, lines[], truncated, error?};级别过滤为全量扫描后取尾部时 truncated=true |
| GET | system/logs/download |
日志审计 | 日志全文(text/plain 附件流) |
| POST | system/maintenance/preview-cache |
系统管理 | 清空 preview/ 目录,{removedFiles, removedBytes},审计 PREVIEW_CACHE_CLEAR |
| POST | system/users/{userId}/force-offline |
系统管理 | 目标用户 authVersion+1 全令牌失效,{userId, username, authVersion},审计 FORCE_OFFLINE;不能对自己执行 |
| POST | backup/test-target |
系统管理 | 按当前备份配置探测目标可写,{ok, target?, error?},审计 BACKUP_TEST_TARGET |
写操作(清缓存/强制下线/目标测试)不需要二次认证(与备份触发一致口径)。
sys_metric_sample(id/sampled_at/cpu_percent/mem_used_bytes/mem_total_bytes),迁移 0029/V14 幂等建表;MetricSampler)按 DMS_METRIC_INTERVAL_SECONDS(缺省 30 秒)采样入库;Java @Scheduled 固定延迟同口径;DMS_METRIC_RETENTION_DAYS(缺省 7 天)的旧样本;DMS_LOG_FILE 配置日志文件路径(相对运行目录),缺省 logs/dms-server.log;目录不存在自动创建(Java LogFileInitializer 启动兜底);FileHandler;Java:logback RollingFileAppender(按日滚动)+ 控制台;truncated=true;file 为空串,前端提示「未配置运行日志文件(DMS_LOG_FILE),或文件尚未生成」。auth_version+1,其全部 JWT 立即失效需重新登录;AllowedModule 新增 SYSTEM_MANAGEMENT,模块页映射 system;「备份管理」本地页签下线,BackupDashboard 整体嵌入 SystemDashboard 底部;SystemDashboard(features/system/):操作条(刷新/一键体检)、系统信息卡片(14 行)、应用进程卡片、实时资源(CPU/内存/交换 + 分区表,使用率 ≥90% 红色)、资源采样趋势(近 1/6/24 小时与 7/30 天切换,纯 SVG 双折线图:CPU 红/内存蓝,含 25/50/75% 参考线)、存储目录用量表、转换器卡片、运行参数总览表(只读,密钥仅显示状态)、维护操作(清空预览缓存二次确认、测试备份目标、强制下线弹窗)、体检结果弹窗(逐项 ✓/✗ + 详情);AuditDashboard 内 RuntimeLogModal):日志审计页筛选栏头部「运行日志」按钮打开;全屏模态(max-w-5xl):尾部行数选择(200~5000)、级别过滤(DEBUG~CRITICAL)、刷新、下载全文(Blob 锚点落盘 dms-runtime.log)、文件路径与截断提示、等宽字体日志正文;systemTypes.ts 逐字段类型守卫(与双后端响应形状逐字对齐),不符契约抛 contractHttpError。pytest 全量 298 通过 / 496 跳过(较备份定版基线 289/470 新增 test_system_management.py 引擎级与接口级用例:采样与清理、存储用量七目录、体检形状、参数脱敏、日志尾部与级别过滤、清缓存/强制下线/目标测试;跳过项为 B2 门控的 DB 集成用例,提供 DMS_TEST_* 环境变量时执行);test_openapi_storage 守卫 1.23.0 版本与 system 路径白名单;mvn compile / mvn test 通过(29 项测试无回归);npx tsc --noEmit 通过;npx vitest run 66 文件 424 项全绿(含 UserSummary/Role 新增权位字段的守卫与 fixture、审计页 allowedModules 驱动的 q3f/f7 断言更新);