feat(schedulerclient): WatchJobs SSE stream + fix ListJobs filter param

Add WatchJobs(ctx) to the Client interface and HTTPClient: opens the
apiserver's /xce/v1/events SSE stream and yields JobEvent values until the
context is cancelled or the stream ends. JobEvent carries the event type,
job id, status string, exit code, and a raw job snapshot.

Also fix ListJobs' filter params: the apiserver accepts filters via the
"filter" query param in field:op:value form (e.g. queue_name:eq:normal);
the individual queue_name/submit_user params it ignores with a 400, which
broke every filtered list. Multiple conditions are brace-wrapped {a},{b}.

Verified live on t1: WatchJobs captured job.updated PEND→RUN→DONE for a
submitted job.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
lei.chen 2026-08-12 08:30:25 +00:00
parent 898de0cebd
commit c8bd8fe896
4 changed files with 223 additions and 2 deletions

View file

@ -50,4 +50,12 @@ type Client interface {
// ReleaseJob resumes a suspended job (action "resume", default SIGCONT).
ReleaseJob(ctx context.Context, id string) error
// ── Event stream (Phase 2) ──
// WatchJobs subscribes to the live job-event SSE stream and returns a
// channel of lifecycle events (job.created / job.updated / job.deleted /
// job.finished). The channel is closed when the context is cancelled or
// the stream ends. The caller is responsible for cancelling ctx.
WatchJobs(ctx context.Context) (<-chan JobEvent, error)
}