internal/worker: handle vulndb request counts
Add a handler to the server for computing vuln DB request counts.
Change-Id: Ib2664f1cdafd397239a9fc8b025691b066427c6c
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/483636
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/server.go b/internal/worker/server.go
index 0845972..d577d78 100644
--- a/internal/worker/server.go
+++ b/internal/worker/server.go
@@ -16,6 +16,7 @@
"time"
"cloud.google.com/go/errorreporting"
+ "golang.org/x/pkgsite-metrics/internal"
"golang.org/x/pkgsite-metrics/internal/analysis"
"golang.org/x/pkgsite-metrics/internal/bigquery"
"golang.org/x/pkgsite-metrics/internal/config"
@@ -25,6 +26,7 @@
"golang.org/x/pkgsite-metrics/internal/observe"
"golang.org/x/pkgsite-metrics/internal/proxy"
"golang.org/x/pkgsite-metrics/internal/queue"
+ "golang.org/x/pkgsite-metrics/internal/vulndbreqs"
vulnc "golang.org/x/vuln/client"
)
@@ -117,10 +119,15 @@
if err := s.registerAnalysisHandlers(ctx); err != nil {
return nil, err
}
+ // compute missing vuln.go.dev request counts
+ s.handle("/compute-requests", s.handleComputeRequests)
return s, nil
}
func ensureTable(ctx context.Context, bq *bigquery.Client, name string) error {
+ if bq == nil {
+ return nil
+ }
created, err := bq.CreateOrUpdateTable(ctx, name)
if err != nil {
return err
@@ -189,6 +196,27 @@
return nil
}
+func (s *Server) handleComputeRequests(w http.ResponseWriter, r *http.Request) error {
+ ctx := r.Context()
+ // Don't use the Server's BigQuery client: it's for the wrong
+ // dataset.
+ vClient, err := bigquery.NewClientCreate(ctx, s.cfg.ProjectID, vulndbreqs.DatasetName)
+ if err != nil {
+ return err
+ }
+ keyName := "projects/" + s.cfg.ProjectID + "/secrets/vulndb-hmac-key"
+ hmacKey, err := internal.GetSecret(ctx, keyName)
+ if err != nil {
+ return err
+ }
+ err = vulndbreqs.ComputeAndStore(ctx, s.cfg.VulnDBBucketProjectID, vClient, []byte(hmacKey))
+ if err != nil {
+ return err
+ }
+ fmt.Fprintf(w, "Successfully computed and stored request counts.\n")
+ return nil
+}
+
type serverError struct {
status int // HTTP status code
err error // wrapped error