internal/worker: minor changes

- trim prefix from jobs paths

- jobs/list: include skipped tasks in finished count

- analysis/enqueue: print job ID in message

Change-Id: I69424400c9dc7d9b4c69851a5a9099524d689f3a
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/496192
Reviewed-by: Zvonimir Pavlinovic <zpavlinovic@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/worker/analysis.go b/internal/worker/analysis.go
index a56f991..b0ad888 100644
--- a/internal/worker/analysis.go
+++ b/internal/worker/analysis.go
@@ -367,15 +367,17 @@
 	if err != nil {
 		return fmt.Errorf("enequeue failed: %w", err)
 	}
+	sj := ""
 	if job != nil {
 		job.NumEnqueued = len(tasks)
 		if err := s.jobDB.CreateJob(ctx, job); err != nil {
-			return fmt.Errorf("enqueued %d analysis tasks successfully, but could not create job: %w", len(tasks), err)
+			sj = fmt.Sprintf(", but could not create job: %v", err)
+		} else {
+			sj = ", job ID is " + job.ID()
 		}
 	}
-
 	// Communicate enqueue status for better usability.
-	fmt.Fprintf(w, "enqueued %d analysis tasks successfully\n", len(tasks))
+	fmt.Fprintf(w, "enqueued %d analysis tasks successfully%s\n", len(tasks), sj)
 	return nil
 }
 
diff --git a/internal/worker/jobs.go b/internal/worker/jobs.go
index 79076dc..f96e4c2 100644
--- a/internal/worker/jobs.go
+++ b/internal/worker/jobs.go
@@ -22,6 +22,7 @@
 	"fmt"
 	"io"
 	"net/http"
+	"strings"
 	"time"
 
 	"golang.org/x/pkgsite-metrics/internal/derrors"
@@ -49,8 +50,9 @@
 }
 
 func processJobRequest(ctx context.Context, w io.Writer, path, jobID string, db jobDB) error {
+	path = strings.TrimPrefix(path, "/jobs/")
 	switch path {
-	case "/describe": // describe one job
+	case "describe": // describe one job
 		if jobID == "" {
 			return fmt.Errorf("missing jobid: %w", derrors.InvalidArgument)
 		}
@@ -63,7 +65,7 @@
 		enc.Encode(job)
 		return nil
 
-	case "/cancel":
+	case "cancel":
 		if jobID == "" {
 			return fmt.Errorf("missing jobid: %w", derrors.InvalidArgument)
 		}
@@ -72,12 +74,13 @@
 			return nil
 		})
 
-	case "/list":
+	case "list":
 		var buf bytes.Buffer
 		fmt.Fprintf(&buf, "%-20s\tEnq\tCompl\tCanceled\n", "ID")
 		err := db.ListJobs(ctx, func(j *jobs.Job, _ time.Time) error {
 			_, err := fmt.Fprintf(&buf, "%-20s\t%3d\t%3d\t%t\n",
-				j.ID(), j.NumEnqueued, j.NumFailed+j.NumErrored+j.NumSucceeded,
+				j.ID(), j.NumEnqueued,
+				j.NumSkipped+j.NumFailed+j.NumErrored+j.NumSucceeded,
 				j.Canceled)
 			return err
 		})
diff --git a/internal/worker/jobs_test.go b/internal/worker/jobs_test.go
index c682d71..59a4c0d 100644
--- a/internal/worker/jobs_test.go
+++ b/internal/worker/jobs_test.go
@@ -29,7 +29,7 @@
 		t.Fatal(err)
 	}
 	var buf bytes.Buffer
-	if err := processJobRequest(ctx, &buf, "/describe", job.ID(), db); err != nil {
+	if err := processJobRequest(ctx, &buf, "/jobs/describe", job.ID(), db); err != nil {
 		t.Fatal(err)
 	}
 
@@ -41,7 +41,7 @@
 		t.Errorf("got\n%+v\nwant\n%+v", got, job)
 	}
 
-	if err := processJobRequest(ctx, &buf, "/cancel", job.ID(), db); err != nil {
+	if err := processJobRequest(ctx, &buf, "/jobs/cancel", job.ID(), db); err != nil {
 		t.Fatal(err)
 	}
 
@@ -54,7 +54,7 @@
 	}
 
 	buf.Reset()
-	if err := processJobRequest(ctx, &buf, "/list", "", db); err != nil {
+	if err := processJobRequest(ctx, &buf, "/jobs/list", "", db); err != nil {
 		t.Fatal(err)
 	}
 	// Don't check for specific output, just make sure there's something