Repository navigation
v2.6.5
v2.6.5 - 2026-09-14
本版本修复了一处匿名数据泄露和一处升级重复入账缺陷,并交付范围查询优化、完整用量备份和更省分配的账本写入。它不是"整体低资源"版本:SQLite 仍未接管运行时历史存储,内存仍随有效历史增长,边界见文末。
安全
- 修复匿名资源路由泄露数据:stock CPA 的
/v0/resource/plugins/不校验管理密钥,此前统计、事件、价格、健康状态和导出接口都可被未授权读取。现在该入口只提供静态看板页,处理器同时拒绝宿主缓存的旧资源别名(即使请求自带 Authorization 头),所有数据请求统一走/v0/management/plugins/管理鉴权。升级后请刷新看板页面;调用旧资源数据别名的外部脚本需要同步改为管理 URL。
升级数据正确性
- 修复从 v2.6.4 升级后累计请求、token 和费用重复入账:旧版快照只保存被
max_details_per_model截断后的可见明细,超出部分仅存在于汇总计数中,而当天 JSONL 仍包含这些请求,恢复时它们无法按去重键命中,被当作新请求再加一次。现在恢复会按接口/模型记录「已计入但不可寻址」的残差,重放当天日志时只消耗残差、不再累加;请求时间晚于快照生成时间的新请求不受影响,仍正常入账,重复重启保持稳定。 - 该缺陷在 v2.6.4 自身重启时同样存在(同一模型当日请求数超过明细上限即触发),旧版本无法修复;升级到本版本后,恢复该形态的数据不再重复入账,之后每次重启也保持稳定。
查询与写入
- 范围摘要与接口详情复用有预算的精确块汇总,边界记录仍逐条计算;追加、裁剪、修复、排序和改价正确失效,缓存满后的清理扫描每次查询最多一次。10 万条 7 天摘要从 54.30 ms 降到 1.45 ms,接口详情从 6.30 ms 降到 0.34 ms(本机 Apple M1 组件基准,非 p95/p99)。
- 明细达到上限后保留精简逐请求账本,维持范围统计、按请求时间重新计价及到期扣减;分块账本复用底层空间,单条写入分配从 2043 B/op 降到 256 B/op。
- 修复同时间戳最近事件的选择,以及只排序、不淘汰时的块缓存失效;统计同频排序保持稳定。
- 增量事件索引、只读筛选、查询内价格复用减少查询耗时。
完整用量备份(新增)
- 新增
/usage/export-jobs系列管理接口和看板按钮:冻结账本块、计数与配置后逐条写出 v1 JSON,包含归档账本与残差,不受事件筛选或条数上限截断;支持 gzip 和最多 256 KiB 的有校验分块下载、CRC32、取消和任务回收。 - 支持原生解压流的浏览器自动压缩传输,校验压缩数据及解压长度,旧浏览器回退未压缩分块;看板直接保存文件字节,保留大整数精度。
- 修复同一实例回导备份时客户端 hash 被提前清除导致的重复计数;重复导入跳过已存在的完整指纹,保留跨实例导入规则及不同请求。
其他修复
- 快照无法读取或解码时停止目标目录写入,防止关闭覆盖恢复源;归档导入记录携带 JSONL 归档标记,避免重启后重新进入可见事件列表。
- 分块导出使用不受宿主 HTML 转义影响的版本标识,同时兼容旧客户端的 ETag。
- 防止前端旧异步响应覆盖新筛选和缓存;修复数组导出协商后的整包下载回退。
- 工具链升至 Go 1.26.6;发布包携带 SQLite 驱动通知;宿主 ABI 校验支持构建版本并覆盖实际分块下载。
2026-09-14 复审修复
- 配置热更新串行管理后台任务生命周期;非存储配置更新不再创建额外 writer,避免遗留线程和并发重配交错。超出
time.Duration范围的保留期、去重窗口及存储/价格刷新间隔会被忽略,不再溢出成负时长。 - 无新请求时,摘要、事件、接口详情、快照和备份读取也会扣除已过期用量,并同步失效 ETag 与查询缓存;未到最早过期时间时不扫描历史。
- 价格文件首次读取失败、之后恢复时,同步重建费用并失效缓存;前端拒绝非法、负数、溢出和浏览器无法解析的价格输入,不再悄悄保存为零价。
- 错误文本中的查询凭证参数按大小写无关方式逐一脱敏,覆盖重复参数、短密钥及编码的等号,同时保留后续参数与 JSON 结构。
- 同一脱敏标签出现多个不同客户端 hash 时,旧无 hash 记录保持独立;摘要返回精确筛选值,避免接口详情、事件和范围统计交叉计数。唯一 hash 的兼容合并及旧筛选值继续支持。
- 旧无 hash 记录与唯一客户端身份合并时,同步累加客户端及其模型的已计费用,修复启用时段价格后请求/token 正确但客户端费用偏低的问题,包含被裁剪到归档账本的记录。
- 看板兼容浏览器禁用/损坏的本地存储;关闭价格搜索后丢弃迟到结果;从兼容模式或错误状态恢复收到 304 时重新渲染正确摘要。
- 兼容全量数据的前端统计纳入归档账本,补齐范围、健康、来源和客户端聚合;取消事件导出时,等待统计锁不再持续占用后台任务名额。
验证
- 修复前的反证:同一台未修改的 stock CPA 容器里,
v2.6.4写入 1200 条请求(明细上限 100,快照只留下 200 条逐请求记录),v2.6.5恢复后累计变成 2200;修复后为 1200。升级后新增 40 条为 1240,再次重启仍为 1240。 - 全量验证:未修改的 stock CPA 镜像上 198 项真实 HTTP 检查通过,覆盖管理鉴权、匿名资源别名拒绝、导入去重、范围/筛选、改价、冻结导出与分块下载、完整备份、优雅重启与已同步增量的 SIGKILL 恢复;真实 Chrome 153 验证筛选、翻页、分块重试与下载文件内容。
- 回归:完整
go test -race、go vet、163 项前端测试、发布更新脚本测试,以及 Linux/macOS 共享库的 stock CPA v7.2.152 SDK 装载校验全部通过。 - 2026-09-14 复审:Go 1.26.6 下 CGO 与
sqlite_purego两套驱动的完整-race -shuffle=on -count=1测试通过;关键新增回归连续运行 10 次通过,go vet、169 项前端测试、JS/Shell 语法检查和发布更新脚本测试通过。 - 本轮集成复验:最新 macOS arm64 共享库通过 stock CPA v7.2.152 SDK 装载及分块导出校验;Chrome 152 验证 12,000 条记录的筛选、翻页、下载重试和 JSON/CSV 内容,并验证浏览器禁用本地存储时看板仍可加载和切换范围,无页面异常。SQLite 迁移投影额外进行 30 秒模糊测试,7,818 次输入未发现新失败。
已知边界
- SQLite 尚未接管运行时。schema 已推进到 7,具备事务化记录/状态/进度提交、一致性备份与受控恢复、磁盘语义投影和大记录分块,但运行时历史存储仍是内存 + JSONL + 快照,没有可启用的数据库配置。
- 冻结导出、完整备份和有效历史仍有随数据量增长的内存开销;组件分配量不代表容器 RSS,本版本没有达成"RSS 降低 25%、CPU 降低 15%"的目标,也没有 24 小时稳态数据。
- 10 万条历史的存活堆高于 v2.6.4,这是保留完整逐请求账本的功能成本,不是回归。
- 旧浏览器未压缩分块下载慢于旧的整包下载路径;gzip 生成约为未压缩流式路径的 2.85 倍 CPU。
- 降级不是无损的:本版本的快照新增了
accounting语义,v2.6.4无法回写。升级与回退步骤见部署说明。 - 升级建议:先停用插件、备份整个
storage_path目录与模型价格文件,升级后核对总请求数、token、成本、可见明细数及/health存储错误。
Full Changelog: v2.6.4...v2.6.5