internal/worker: classify 137 errors as sandbox related issues

Change-Id: I202d55775c0a09acda4be7fbb6dd8551bb077708
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/552715
Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/derrors/derrors.go b/internal/derrors/derrors.go
index 3aec2fa..15b49a2 100644
--- a/internal/derrors/derrors.go
+++ b/internal/derrors/derrors.go
@@ -109,6 +109,9 @@
 	// due to an issue in the analysis.
 	ScanSyntheticModuleError = errors.New("scan synthetic module error")
 
+	// ScanModuleSandboxError is used to capture general sandbox related issues.
+	ScanModuleSandboxError = errors.New("sandbox related issue")
+
 	// ScanModuleMemoryLimitExceeded occurs when scanning uses too much memory.
 	ScanModuleMemoryLimitExceeded = errors.New("scan module memory limit exceeded")
 
@@ -223,6 +226,8 @@
 		return "MEM LIMIT EXCEEDED"
 	case errors.Is(err, ScanModuleTooManyOpenFiles):
 		return "TOO MANY OPEN FILES"
+	case errors.Is(err, ScanModuleSandboxError):
+		return "SANDBOX MISC"
 	case errors.Is(err, ProxyError):
 		return "PROXY"
 	case errors.Is(err, BigQueryError):
diff --git a/internal/worker/analysis.go b/internal/worker/analysis.go
index b127beb..41863f6 100644
--- a/internal/worker/analysis.go
+++ b/internal/worker/analysis.go
@@ -226,8 +226,8 @@
 			err = fmt.Errorf("%v: %w", err, derrors.LoadVendorError)
 		case isProxyCacheMiss(err):
 			err = fmt.Errorf("%v: %w", err, derrors.ProxyError)
-		case isMemoryIssue(err):
-			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleMemoryLimitExceeded)
+		case isSandboxRelatedIssue(err):
+			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleSandboxError)
 		case isBuildIssue(err):
 			err = fmt.Errorf("%v: %w", err, derrors.LoadPackagesError)
 		case !hasGoMod:
diff --git a/internal/worker/govulncheck_scan.go b/internal/worker/govulncheck_scan.go
index 2f41a17..9824151 100644
--- a/internal/worker/govulncheck_scan.go
+++ b/internal/worker/govulncheck_scan.go
@@ -368,8 +368,8 @@
 			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleTooManyOpenFiles)
 		case isProxyCacheMiss(err):
 			err = fmt.Errorf("%v: %w", err, derrors.ProxyError)
-		case isMemoryIssue(err):
-			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleMemoryLimitExceeded)
+		case isSandboxRelatedIssue(err):
+			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleSandboxError)
 		default:
 			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleGovulncheckError)
 		}
diff --git a/internal/worker/scan.go b/internal/worker/scan.go
index 9c4ba0e..1c50455 100644
--- a/internal/worker/scan.go
+++ b/internal/worker/scan.go
@@ -368,6 +368,7 @@
 		strings.Contains(errStr, "relative import paths are not supported in module mode")
 }
 
-func isMemoryIssue(err error) bool {
-	return strings.Contains(err.Error(), "status 137")
+func isSandboxRelatedIssue(err error) bool {
+	e := err.Error()
+	return strings.Contains(e, "runner") && strings.Contains(e, "status 137")
 }