internal/worker: refactor Server.handle

Move pre-request code to its own function.

Change-Id: I35177c637871122e80a75a0c8baaec7924d8afb9
Reviewed-on: https://go-review.googlesource.com/c/vulndb/+/386697
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/worker/server.go b/internal/worker/server.go
index 78dfa1e..77f8f77 100644
--- a/internal/worker/server.go
+++ b/internal/worker/server.go
@@ -33,7 +33,6 @@
 	gcppropagator "github.com/GoogleCloudPlatform/opentelemetry-operations-go/propagator"
 	"go.opentelemetry.io/otel/propagation"
 	sdktrace "go.opentelemetry.io/otel/sdk/trace"
-	otrace "go.opentelemetry.io/otel/trace"
 	eotel "golang.org/x/exp/event/otel"
 )
 
@@ -114,25 +113,16 @@
 
 func (s *Server) handle(_ context.Context, pattern string, handler func(w http.ResponseWriter, r *http.Request) error) {
 	http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
-		log.Debugf(r.Context(), "#### SpanContext: %+v\n", otrace.SpanContextFromContext(r.Context()))
 		start := time.Now()
+		r = s.beforeRequest(r)
 		defer s.afterRequest()
-		traceID := r.Header.Get("X-Cloud-Trace-Context")
-		exporter := event.NewExporter(multiEventHandler{
-			log.NewGCPJSONHandler(os.Stderr, traceID),
-			s.traceHandler,
-		}, nil)
-		ctx := event.WithExporter(r.Context(), exporter)
-		ctx = s.propagator.Extract(ctx, propagation.HeaderCarrier(r.Header))
-		r = r.WithContext(ctx)
-
+		ctx := r.Context()
 		log.With("httpRequest", r).Infof(ctx, "starting %s", r.URL.Path)
 
 		w2 := &responseWriter{ResponseWriter: w}
 		if err := handler(w2, r); err != nil {
 			s.serveError(ctx, w2, r, err)
 		}
-
 		log.With(
 			"latency", time.Since(start),
 			"status", translateStatus(w2.status)).
@@ -140,6 +130,17 @@
 	})
 }
 
+func (s *Server) beforeRequest(r *http.Request) *http.Request {
+	traceID := r.Header.Get("X-Cloud-Trace-Context")
+	exporter := event.NewExporter(multiEventHandler{
+		log.NewGCPJSONHandler(os.Stderr, traceID),
+		s.traceHandler,
+	}, nil)
+	ctx := event.WithExporter(r.Context(), exporter)
+	ctx = s.propagator.Extract(ctx, propagation.HeaderCarrier(r.Header))
+	return r.WithContext(ctx)
+}
+
 type serverError struct {
 	status int   // HTTP status code
 	err    error // wrapped error