From 8ab322038b0d0f099b73ef65b0e3f706f34c430b Mon Sep 17 00:00:00 2001 From: Shekhar Vaidya Date: Wed, 8 Jul 2026 12:29:59 +0530 Subject: [PATCH] feat(telemetry): capture error message on failed CLI runs Failure telemetry only recorded success=false with no context. Adds a truncated error string (150 chars, CLI-side) forwarded to a new msdl:telemetry:errors Redis hash so failure causes are diagnosable from /metrics instead of guessed at. Co-Authored-By: Claude Sonnet 4.6 --- backend/main.go | 5 +++++ cli/main.go | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/backend/main.go b/backend/main.go index 5e716cd..df2edc3 100644 --- a/backend/main.go +++ b/backend/main.go @@ -579,6 +579,7 @@ type telemetryPayload struct { Platform string `json:"platform"` Version string `json:"version"` Success bool `json:"success"` + Error string `json:"error"` } // --- Evalcenter helpers --- @@ -1662,6 +1663,9 @@ func handleTelemetry(w http.ResponseWriter, r *http.Request) { result = "failed" } rdb.HIncrBy(ctx, "msdl:telemetry:results", result, 1) + if !p.Success && p.Error != "" && len(p.Error) <= 200 { + rdb.HIncrBy(ctx, "msdl:telemetry:errors", p.Error, 1) + } } w.WriteHeader(http.StatusOK) @@ -1695,6 +1699,7 @@ func loadTelemetryFromRedis() map[string]map[string]string { "msdl:telemetry:versions", "msdl:telemetry:products", "msdl:telemetry:results", + "msdl:telemetry:errors", } out := make(map[string]map[string]string, len(keys)) for _, k := range keys { diff --git a/cli/main.go b/cli/main.go index 3fcfb78..2528bb7 100644 --- a/cli/main.go +++ b/cli/main.go @@ -87,6 +87,20 @@ type cliTelemetryPayload struct { Platform string `json:"platform"` Version string `json:"version"` Success bool `json:"success"` + Error string `json:"error,omitempty"` +} + +// truncateError caps an error string for telemetry (avoids leaking huge bodies, +// keeps Redis field values small). +func truncateError(err error) string { + if err == nil { + return "" + } + s := err.Error() + if len(s) > 150 { + s = s[:150] + } + return s } // sendTelemetry posts a single telemetry event. Fire-and-forget: all errors @@ -243,6 +257,7 @@ More info: https://msdl.tech-latest.com/cli`) Platform: runtime.GOOS, Version: Version, Success: err == nil, + Error: truncateError(err), }) }