cmd/ejobs: add wait subcommand ejobs wait JOB_ID will wait until the job is finished, then exit. Change-Id: I4b729816779c74a154737716fc700e5197989d0a Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/511075 Run-TryBot: Jonathan Amsterdam <jba@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Maceo Thompson <maceothompson@google.com>
diff --git a/cmd/ejobs/main.go b/cmd/ejobs/main.go index 5feae48..a93ce5a 100644 --- a/cmd/ejobs/main.go +++ b/cmd/ejobs/main.go
@@ -62,6 +62,9 @@ {"start", "-min [MIN_IMPORTERS] BINARY ARGS...", "start a job", doStart, startFlagSet}, + {"wait", "JOBID", + "do not exit until JOBID is done", + doWait, nil}, } type command struct { @@ -190,6 +193,27 @@ return nil } +func doWait(ctx context.Context, args []string) error { + ts, err := identityTokenSource(ctx) + if err != nil { + return err + } + jobID := args[0] + for { + job, err := requestJSON[jobs.Job](ctx, "jobs/describe?jobid="+jobID, ts) + if err != nil { + return err + } + done := job.NumSkipped + job.NumFailed + job.NumErrored + job.NumSucceeded + if done >= job.NumEnqueued { + break + } + time.Sleep(time.Second) + } + fmt.Printf("Job %s finished.\n", jobID) + return nil +} + func doStart(ctx context.Context, args []string) error { // Validate arguments. if err := startFlagSet.Parse(args); err != nil {