chore: add debug information to wsproxy errors (#9683)

* chore: add debug information to wsproxy errors
* Use codersdk.ReadBodyAsError
This commit is contained in:
Steven Masley
2023-09-20 10:05:14 -05:00
committed by GitHub
parent ae1896f2dc
commit f89b68056d
+21 -1
View File
@@ -289,7 +289,27 @@ func (p *ProxyHealth) runOnce(ctx context.Context, now time.Time) (map[uuid.UUID
case err == nil && resp.StatusCode != http.StatusOK:
// Unhealthy as we did reach the proxy but it got an unexpected response.
status.Status = Unhealthy
status.Report.Errors = []string{fmt.Sprintf("unexpected status code %d", resp.StatusCode)}
var builder strings.Builder
// This string is shown on the UI where newlines are respected.
// This error message is not ever decoded programmatically, so keep it human-
// readable.
builder.WriteString(fmt.Sprintf("unexpected status code %d. ", resp.StatusCode))
builder.WriteString(fmt.Sprintf("\nEncountered error, send a request to %q from the Coderd environment to debug this issue.", reqURL))
err := codersdk.ReadBodyAsError(resp)
if err != nil {
var apiErr *codersdk.Error
if xerrors.As(err, &apiErr) {
builder.WriteString(fmt.Sprintf("\nError Message: %s\nError Detail: %s", apiErr.Message, apiErr.Detail))
for _, v := range apiErr.Validations {
// Pretty sure this is not possible from the called endpoint, but just in case.
builder.WriteString(fmt.Sprintf("\n\tValidation: %s=%s", v.Field, v.Detail))
}
} else {
builder.WriteString(fmt.Sprintf("\nError: %s", err.Error()))
}
}
status.Report.Errors = []string{builder.String()}
case err != nil:
// Request failed, mark the proxy as unreachable.
status.Status = Unreachable