Skip to content

feat(logging): 接入 litheLogging 1 结构化诊断 - #3

Merged
xiaoyumuxi merged 1 commit into
mainfrom
codex/plugin-logging-v2
Nov 4, 2026
Merged

xiaoyumuxi merged 1 commit into
mainfrom
codex/plugin-logging-v2

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

概要

Docker 插件后端接入结构化日志 v2:改用支持 litheLogging 1 的官方 Rust SDK,由 SDK 自动上报用户动作和传输的成功/失败终态;列表、日志、统计、事件轮询等高频调用不再产生 INFO;引擎连接状态的变化、缺失镜像自动拉取、compose 下线时网络仍被占用,改为类型化的降级/恢复事实。诊断事实由宿主 Core 写入 plugins/<id>/host,不含端点地址、容器内容或日志正文。

依赖:

SDK 来源:从 git tag 改为 vendor 源码快照

  • backend/Cargo.toml 的 lithe-plugin-sdk 从 tag sdk-rust-v0.1.0(e689971)改为 path = "../vendor/lithe-plugin-sdk";backend/Cargo.lock 只删除了对应的 git source 行。
  • 新增 vendor/lithe-plugin-sdk/(Apache-2.0)。基线是 lithe-plugin-docs 29b245c0e1d77c761d9032a3144a301d1818bfc7,加上 SDK PR #17 的日志改动;source-provenance.json 记录基线、本地改动和逐文件 SHA-256。
  • 新增 scripts/verify-sdk-source.mjs 逐文件校验来源;CI 新增 “Verify SDK source provenance”,scripts/package.mjs 打包前也会先跑。

诊断行为(backend/src/service.rs)

  • 按注册抑制成功事实(失败照常 ERROR):containers.list、containers.logs、containers.stats、containers.top、contexts.list、engine.info、events.next、images.list、images.logo、networks.list、objects.inspect、system.df、volumes.list、files.list、files.uploadBegin、files.uploadChunk。
  • 引擎连接健康状态用一个 AtomicU8 保存,按状态变化去重:
    • engine.info 把“不可达”作为降级的成功结果返回(SDK 不会记失败),状态变化时上报一次 degraded("engine.info", code)。code 按错误分类:context_not_found、unsupported_host、permission_denied、connection_lost,其余为 unreachable。UI 反复探测同一状态不会重复上报。
    • 之前处于降级状态、再次连通时,上报一次 recovered("engine.info", "connection_restored");正常连通的探测保持静默。
  • containers.create 自动拉取缺失镜像后创建成功,上报 recovered("containers.create", "missing_image_pulled")。
  • compose.action 下线时有网络因 docker.conflict 仍被占用而保留,上报 degraded("compose.action", "networks_in_use", count)。
  • main.rs:listen 之前的启动失败不再 eprintln!,以退出码结束,由宿主进程生命周期记录。

端到端测试与 CI

  • scripts/e2e.mjs 必须显式传 --source 和 --ref(新 SDK 要求 Core 支持 litheLogging 1)。
  • e2e/docker_plugin.rs:除上面列出的高频调用外,每次调用(以及所有失败调用)都断言恰好一条类型化终态事实,并核对通道、级别(成功 INFO,失败 ERROR)、operation 和 op 关联。
  • .github/workflows/ci.yml 与 release.yml 的 e2e 改为 --source https://github.com/1lck/Lithe-IDEA.git --ref preview。
  • README 新增“宿主日志接入”一节。

验证

  • 本地(backend/ 目录,与 CI 一致):cargo fmt --all -- --check、cargo clippy --locked --all-targets -- -D warnings 通过;cargo test --locked 27 项通过;node scripts/verify-sdk-source.mjs 通过。
  • 此前在 Codex 工作区对本地宿主分支跑了 e2e:真实的缺失 context 连续探测三次只产生一条 WARN,非法动作记 ERROR,Core 中的 op 关联正确。

预期的 CI 状态与合并顺序

  • 宿主 #1699 合并进 preview 之前,CI 和 release 的 e2e 会因 Core 不支持 litheLogging 1 而失败,这是预期结果。
  • 合并顺序:宿主 #1699 → SDK #17(先同步 contract/v1)→ 本 PR。发布前把 vendor 的 SDK 重新固定到 SDK #17 合并后的 commit。
  • 本 PR 没有改插件版本号。

限制

  • 没有连接真实 Docker daemon 做完整流程验收(创建、compose、文件上传等只在单元测试和 e2e 中覆盖)。
  • 只覆盖 macOS 宿主;Windows 仍是 v1 writer。

配套 PR:

- Rust SDK 改为仓库内 vendor 副本(基线 lithe-plugin-docs 29b245c 加本轮日志改动),
  scripts/verify-sdk-source.mjs 按逐文件 SHA-256 校验,CI 与打包都会先跑
- 列表、日志、统计、事件轮询、文件浏览与分块上传等高频成功不再记 INFO
- 引擎连接状态按变化去重:不可达只报一次 WARN(按 context_not_found /
  unsupported_host / permission_denied / connection_lost / unreachable 分类),
  恢复后报一次 recovered
- 自动拉取缺失镜像后创建成功、compose 下线时网络仍被占用,各记一次 WARN
- 启动失败不再向 stderr 打印
- e2e 改为显式 --source/--ref,CI 指向宿主 preview,并断言每次调用恰好一条
  类型化终态事实(通道、级别、operation)
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 4, 2026 10:52
@xiaoyumuxi
xiaoyumuxi merged commit 881dbcf into main Nov 4, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant