gddo-server: add isRobot field to gddoEvent

This will indicate whether the request to pkg.go.dev was made by a
robot.

Change-Id: I64931b9ff8a4da575d0614771a0575f2bd0746a0
Reviewed-on: https://go-review.googlesource.com/c/gddo/+/235448
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Julie Qiu <julie@golang.org>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
diff --git a/gddo-server/main.go b/gddo-server/main.go
index e9a9fb1..e25a50f 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -1038,13 +1038,13 @@
 	if f, ok := w.(http.Flusher); ok {
 		f.Flush()
 	}
-	if err := makePkgGoDevRequest(r, latency); err != nil {
+	if err := makePkgGoDevRequest(r, latency, s.isRobot(r)); err != nil {
 		log.Printf("makePkgGoDevRequest(%q, %d) error: %v", r.URL, latency, err)
 	}
 }
 
-func makePkgGoDevRequest(r *http.Request, latency time.Duration) error {
-	event := newGDDOEvent(r, latency)
+func makePkgGoDevRequest(r *http.Request, latency time.Duration, isRobot bool) error {
+	event := newGDDOEvent(r, latency, isRobot)
 	b, err := json.Marshal(event)
 	if err != nil {
 		return fmt.Errorf("json.Marshal(%v): %v", event, err)
@@ -1065,9 +1065,10 @@
 	Header       http.Header
 	RedirectHost string
 	Latency      time.Duration
+	IsRobot      bool
 }
 
-func newGDDOEvent(r *http.Request, latency time.Duration) *gddoEvent {
+func newGDDOEvent(r *http.Request, latency time.Duration, isRobot bool) *gddoEvent {
 	pkgGoDevURL := url.URL{Scheme: "https", Host: pkgGoDevHost}
 	return &gddoEvent{
 		Host:         r.URL.Host,
@@ -1076,6 +1077,7 @@
 		Header:       r.Header,
 		RedirectHost: pkgGoDevURL.String(),
 		Latency:      latency,
+		IsRobot:      isRobot,
 	}
 }
 
diff --git a/gddo-server/main_test.go b/gddo-server/main_test.go
index 9e9d3e8..1624306 100644
--- a/gddo-server/main_test.go
+++ b/gddo-server/main_test.go
@@ -212,7 +212,8 @@
 			want.RedirectHost = "https://" + pkgGoDevHost
 			want.URL = test.url
 			want.Header = http.Header{}
-			got := newGDDOEvent(r, want.Latency)
+			want.IsRobot = true
+			got := newGDDOEvent(r, want.Latency, want.IsRobot)
 			if diff := cmp.Diff(want, got); diff != "" {
 				t.Fatalf("mismatch (-want +got):\n%s", diff)
 			}