feat(bat-api): 实现内嵌 dashboard
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

Closes #46
This commit is contained in:
2026-08-31 23:17:23 +08:00
parent ab21344773
commit 4ed81f0030
30 changed files with 3527 additions and 91 deletions
+31 -4
View File
@@ -231,15 +231,26 @@ bat parse schedule list --state-dir /tmp/bat-schedule
`schedule run --force` 会忽略到期时间立即执行指定计划,`--schedule-max-runs N`
限制本轮最多执行 N 个到期计划。
## bat-api 调度接口
## bat-api 调度与 dashboard 接口
dashboard 通过 `bat-api` 转发到 Rust `bat.sock`,不维护第二份计划状态。Rust RPC 方法为:
内嵌 dashboard `bat-api` 直接服务于 `GET /admin/dashboard/`。页面静态资产免
token 读取,但资源、调度、任务、日志、解析和翻译控制都通过 `bat-api` 转发到
Rust `bat.sock`,不维护第二份计划状态或翻译状态。Rust RPC 方法为:
- `schedule.list`
- `schedule.add`
- `schedule.update`
- `schedule.remove`
- `schedule.run`
- `task.list`
- `task.status`
- `task.logs`
- `task.cancel`
- `daemon.logs`
- `daemon.doctor`
- `parse.status`
- `parse.text_units`
- `parse.errors`
`bat-api` 对应接口为 `GET /admin/schedules`
`POST /admin/control/schedule-add|schedule-update|schedule-remove|schedule-run`
@@ -250,6 +261,18 @@ contract`id`、`group`、`action`、`args`、`next_run_unix_seconds`、
`enabled``schedule.list` 额外接受 `id``group``enabled` 过滤,
`schedule.run` 额外接受 `group``force``max_runs`
任务和诊断接口同样要求管理 token:`GET /admin/diagnostics` 转发
`daemon.doctor``GET /admin/logs?tail=200` 转发 `daemon.logs`
`GET /admin/tasks``GET /admin/tasks/status?task_id=...`
`GET /admin/tasks/logs?task_id=...` 转发 `task.*` 查询。取消任务使用
`POST /admin/control/task-cancel`,请求字段为 `task_id`
解析查询接口为 `GET /admin/parse/status`
`GET /admin/parse/text-units``GET /admin/parse/errors`,均只读转发当前
Rust release 的 `parse.*` 数据。`text-units``errors` 支持 `offset`
`limit``destination``path_pattern``archive_entry``path_id``class_id`
`field_path``format` query`limit` 范围为 `1..=1000`
翻译任务状态可由已鉴权的 dashboard 通过 `GET /admin/translation/tasks`
查询,query 过滤项包括 `offset``limit``task_id``release_id`
`destination``path_pattern``archive_entry``status``worker_status`
@@ -259,8 +282,12 @@ Rust `translation.tasks` / `translation.handoff`,不在 Go 侧维护状态。
翻译任务状态也可由已鉴权的 dashboard 通过
`POST /admin/control/translation-task-update` 回写,请求字段为
`task_id``status`,以及可选的 `failure_reason``provider_run_id`
该接口只转发 `translation.task.update`
`task_id``status`,以及可选的 `failure_reason``provider`
`provider_run_id``translation_results`该接口只转发
`translation.task.update`。人工校对流程提交译文时必须使用 `status=completed`
并为每个 `translation_results[]` 提供 `unit_id``source_text`
`translated_text`Rust 会用当前 `official-textunit-index.json` 校验 unit、
source text、destination 和 archive entry 后再落库。
`POST /admin/control/translation-worker-run` 会触发 Rust 侧
`translation.worker.run`,请求字段为 `provider``fixture_path`
+2 -2
View File
@@ -155,7 +155,7 @@ make check-docs
Go 边界与进度以 `docs/reports/GO_STATUS.md` 为准:
- **同步/运维命令行** = Rust `bat`(近乎全自动)
- **资源 bootstrap/分发服务** = `cmd/bat-api``make build-go-api`
- **资源 bootstrap/分发服务与内嵌 dashboard** = `cmd/bat-api``make build-go-api`
- **默认 Go 门禁** = `make test-go-api`(无 FFI
- 试验 CLI 产物为 `bin/bat-go``make build-go-cli`),**禁止**与 Rust `bat` 重名
- 修改 FFI 时再跑 `make test-go-ffi`
@@ -172,7 +172,7 @@ BAT_API_SKIP_ENV_FILE=1 go run ./cmd/bat-api \
--refresh-interval 0
```
其中 `make bat-api-local-live-smoke` 会在 `/tmp` 中启动真实 Rust daemon 和 Go API,覆盖 release 切换、清单不完整、无 release、RPC 断开、server-info、CDN Range/缓存和路径越界;报告保留在该次 smoke 的临时目录。单独的 `--resource-root` 命令只验证 fixture HTTP 形态,不替代 live socket 联调。
其中 `make bat-api-local-live-smoke` 会在 `/tmp` 中启动真实 Rust daemon 和 Go API,覆盖 release 切换、清单不完整、无 release、RPC 断开、server-info、CDN Range/缓存和路径越界;报告保留在该次 smoke 的临时目录。单独的 `--resource-root` 命令只验证 fixture HTTP 形态,不替代 live socket 联调。浏览器检查内嵌 dashboard 时打开 `http://127.0.0.1:18080/admin/dashboard/`,再在页面内填入管理 token。
生产默认路径仍是 `--socket` / `BAT_API_SOCKET`,资源根由 Rust `bat` RPC 返回;`--resource-root` 只用于上述 fixture 或应急只读诊断。