cmd/govulncheck: record scan mode telemetry

Add the new `govulncheck/mode:{source,binary,convert,query,extract}` counter,
and collect the crash report `crash/crash`.

Change-Id: I53dfa5640bc38ae2a0d55302a3bd637c57a984e9
Reviewed-on: https://go-review.googlesource.com/c/vuln/+/588255
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Zvonimir Pavlinovic <zpavlinovic@google.com>
diff --git a/cmd/govulncheck/main.go b/cmd/govulncheck/main.go
index f6ca253..73e3370 100644
--- a/cmd/govulncheck/main.go
+++ b/cmd/govulncheck/main.go
@@ -9,10 +9,13 @@
 	"fmt"
 	"os"
 
+	"golang.org/x/telemetry"
 	"golang.org/x/vuln/scan"
 )
 
 func main() {
+	telemetry.Start(telemetry.Config{ReportCrashes: true})
+
 	ctx := context.Background()
 
 	cmd := scan.Command(ctx, os.Args[1:]...)
diff --git a/go.mod b/go.mod
index 215c7d4..02af913 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,11 @@
 	github.com/google/go-cmp v0.6.0
 	golang.org/x/mod v0.17.0
 	golang.org/x/sync v0.7.0
+	golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7
 	golang.org/x/tools v0.21.1-0.20240514024235-59d9797072e7
 )
 
-require github.com/google/renameio v0.1.0 // indirect
+require (
+	github.com/google/renameio v0.1.0 // indirect
+	golang.org/x/sys v0.20.0 // indirect
+)
diff --git a/go.sum b/go.sum
index 15cf25d..216417c 100644
--- a/go.sum
+++ b/go.sum
@@ -9,5 +9,9 @@
 golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
 golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 h1:FemxDzfMUcK2f3YY4H+05K9CDzbSVr2+q/JKN45pey0=
+golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
 golang.org/x/tools v0.21.1-0.20240514024235-59d9797072e7 h1:DnP3aRQn/r68glNGB8/7+3iE77jA+YZZCxpfIXx2MdA=
 golang.org/x/tools v0.21.1-0.20240514024235-59d9797072e7/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
diff --git a/internal/scan/run.go b/internal/scan/run.go
index 02ef8f4..5440204 100644
--- a/internal/scan/run.go
+++ b/internal/scan/run.go
@@ -15,6 +15,7 @@
 	"strings"
 	"time"
 
+	"golang.org/x/telemetry/counter"
 	"golang.org/x/vuln/internal/client"
 	"golang.org/x/vuln/internal/govulncheck"
 	"golang.org/x/vuln/internal/sarif"
@@ -51,6 +52,8 @@
 		return err
 	}
 
+	counter.Inc(fmt.Sprintf("govulncheck/mode:%s", cfg.ScanMode))
+
 	switch cfg.ScanMode {
 	case govulncheck.ScanModeSource:
 		dir := filepath.FromSlash(cfg.dir)