diff --git a/README.md b/README.md index 74a2258..853a10d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MeshSafe · 文件安全检测服务 -![Version](https://img.shields.io/badge/version-v0.2.2-blue) +![Version](https://img.shields.io/badge/version-v0.2.3-blue) ![Python](https://img.shields.io/badge/python-3.12%2B-green) ![License](https://img.shields.io/badge/license-proprietary-orange) @@ -200,6 +200,36 @@ MeshSafe 会**分析宏的实际行为**: ## 版本历史 +### v0.2.3 (2026-10-29) + +**Bug 修复:** + +- **Policy 加载失败(每次启动都回退 YAML)** — `policy.py _load_db_or_yaml()` 用 `scalar_one_or_none()` 加载最新策略版本,但 `policy_versions` 表有多条历史版本 → SQLAlchemy 抛 `Multiple rows` → 永远回退 YAML 配置文件,导致不同重启间规则数波动。修复为 `db.query(PolicyVersion).order_by(created_at.desc()).first()`,直接取最新一条 ORM 对象 +- **控制台任务历史被内部测试记录淹没** — `scan_tasks` 表累积 5,800+ 条内部对账/诊断脚本产生的测试数据(channel 包括 `test_center` / `v` / `verify` / `diag` / `debug` / `final` 等 19 个),dashboard 和 tasks_page 无过滤全部展示。修复:① DB 清理所有内部 channel 记录(保留 3,488 条生产数据);② console.py 加 `INTERNAL_TEST_CHANNELS` 黑名单常量,dashboard 6 个查询 + tasks_page 2 个查询全部 `.filter(ScanTask.channel.notin_(...))` +- **测试靶场显示 "未知" 层和 "—" 编号** — 控制台用 `iterdir()` 遍历目录收集样本,但目录里混入 4 个 YARA 调试时的临时文件(`L4-005_hotreload.txt` 等),index.json 没登记 → category 取不到显示 "未知"。修复:① 清理 4 个临时文件;② `test_center_page` 改为只从 index.json 收集样本(目录遍历替换为 index.json 遍历),以后不会再出这个问题 + +**DB 与运维增强:** + +- **ScanTask 复合索引** — 新增 `ix_scan_tasks_channel_created ON (channel, created_at DESC)`,解决 dashboard/tasks_page 高频查询的全表扫描。models.py `ScanTask.__table_args__` 也同步更新,新建实例会自动带上 +- **归档表 + 归档脚本** — 建 `scan_tasks_archive` 表(含 4 个索引);新增 `scripts/archive_old_tasks.py` 支持 4 项清理策略: + - scan_tasks **90 天前**:清 detail JSONB(每条 1-5 KB,省空间) + - scan_tasks **365 天前**:移到 scan_tasks_archive 归档表(CASCADE 删 ScanFinding) + - idempotency_records:清 **7 天前**(幂等缓存过期可以重扫) + - policy_versions:只留**最新 5 个**(历史版本无保留价值) + - 支持 `--dry-run`(默认,只报告不动数据)+ `--apply`(真正执行),分批 1,000 条处理避免长事务锁表 +- **自动定时任务 Cron 服务** — docker-compose.yml 新增 `cron` 服务(共享 meshsafe:latest 镜像,零额外依赖,`restart: unless-stopped`),`scripts/cron_entrypoint.py` 纯 Python 调度器: + - **每天 03:00** 跑 archive_old_tasks.py --apply + - **每周一 03:10** VACUUM ANALYZE 5 张表(维护表统计信息,加速查询) + +**数据增长实况:** + +| 指标 | 值 | +|------|---| +| scan_tasks 当前 | 3,660 行 / 4.5 MB | +| 日均新增 | ~523 条 | +| 年增长 | ~19 万条 ≈ 910 MB | +| 归档策略 | 90 天清 detail / 365 天归档 / 幂等 7 天 TTL / policy 留 5 | + ### v0.2.2 (2026-10-29) **引擎能力补全 — 测试靶场 168/168 100% 通过:**