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
+38
View File
@@ -39,6 +39,29 @@ type ControlBackend interface {
CatalogRefresh(ctx context.Context, force bool) (*backendrpc.TaskAccepted, error)
}
// DaemonLogsBackend exposes the Rust daemon log tail for an authenticated
// dashboard. It remains read-only and never opens log files from Go.
type DaemonLogsBackend interface {
DaemonLogs(ctx context.Context, tail int) (*backendrpc.LogsReport, error)
}
// TaskBackend exposes Rust-owned async task state to the dashboard. Go only
// forwards read/cancel requests and does not create generic tasks.
type TaskBackend interface {
TaskList(ctx context.Context) (*backendrpc.TaskList, error)
TaskStatus(ctx context.Context, taskID string) (*backendrpc.TaskRecord, error)
TaskLogs(ctx context.Context, taskID string) (*backendrpc.TaskLogs, error)
TaskCancel(ctx context.Context, taskID string) (*backendrpc.TaskCancelResult, error)
}
// ParseBackend exposes existing Rust TextUnit index queries to the dashboard.
// It is read-only and does not expand parser coverage.
type ParseBackend interface {
ParseStatus(ctx context.Context) (json.RawMessage, error)
ParseTextUnits(ctx context.Context, query backendrpc.TextUnitQueryParams) (json.RawMessage, error)
ParseErrors(ctx context.Context, query backendrpc.TextUnitQueryParams) (json.RawMessage, error)
}
// ScheduleBackend exposes the Rust-owned schedule store to an authenticated
// dashboard. The JSON result remains Rust's report shape so the API does not
// duplicate schedule state or invent a second schema.
@@ -97,6 +120,9 @@ func (r RPCClient) DaemonReload(ctx context.Context) (*backendrpc.Ack, error) {
func (r RPCClient) DaemonRefresh(ctx context.Context, force bool) (*backendrpc.Ack, error) {
return r.Client.DaemonRefresh(ctx, force)
}
func (r RPCClient) DaemonLogs(ctx context.Context, tail int) (*backendrpc.LogsReport, error) {
return r.Client.DaemonLogs(ctx, tail)
}
func (r RPCClient) ResourceSync(ctx context.Context, force bool) (*backendrpc.TaskAccepted, error) {
return r.Client.ResourceSync(ctx, force)
}
@@ -109,6 +135,18 @@ func (r RPCClient) ResourceRepair(ctx context.Context) (*backendrpc.TaskAccepted
func (r RPCClient) CatalogRefresh(ctx context.Context, force bool) (*backendrpc.TaskAccepted, error) {
return r.Client.CatalogRefresh(ctx, force)
}
func (r RPCClient) TaskList(ctx context.Context) (*backendrpc.TaskList, error) {
return r.Client.TaskList(ctx)
}
func (r RPCClient) TaskStatus(ctx context.Context, taskID string) (*backendrpc.TaskRecord, error) {
return r.Client.TaskStatus(ctx, taskID)
}
func (r RPCClient) TaskLogs(ctx context.Context, taskID string) (*backendrpc.TaskLogs, error) {
return r.Client.TaskLogs(ctx, taskID)
}
func (r RPCClient) TaskCancel(ctx context.Context, taskID string) (*backendrpc.TaskCancelResult, error) {
return r.Client.TaskCancel(ctx, taskID)
}
func (r RPCClient) ScheduleList(ctx context.Context, params backendrpc.ScheduleListParams) (json.RawMessage, error) {
return r.Client.ScheduleListFiltered(ctx, params)
}