← back to Cli Printing Press
fix(generator): doctor tries health endpoints before reporting status
651d11e183ce380948cf18519b98045d75790b70 · 2026-03-24 16:21:18 -0700 · Matt Van Horn
Tries /health, /healthz, /status, /ping paths before falling back to
base URL. Reports "reachable" only for 2xx/3xx, "degraded" for 4xx/5xx.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Files touched
M internal/generator/templates/doctor.go.tmpl
Diff
commit 651d11e183ce380948cf18519b98045d75790b70
Author: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Date: Tue Mar 24 16:21:18 2026 -0700
fix(generator): doctor tries health endpoints before reporting status
Tries /health, /healthz, /status, /ping paths before falling back to
base URL. Reports "reachable" only for 2xx/3xx, "degraded" for 4xx/5xx.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---
internal/generator/templates/doctor.go.tmpl | 38 +++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 5 deletions(-)
diff --git a/internal/generator/templates/doctor.go.tmpl b/internal/generator/templates/doctor.go.tmpl
index a41e7922..99e7d9ce 100644
--- a/internal/generator/templates/doctor.go.tmpl
+++ b/internal/generator/templates/doctor.go.tmpl
@@ -41,12 +41,40 @@ func newDoctorCmd(flags *rootFlags) *cobra.Command {
// Check API connectivity
if cfg != nil && cfg.BaseURL != "" {
httpClient := &http.Client{Timeout: 5 * time.Second}
- resp, err := httpClient.Get(cfg.BaseURL)
- if err != nil {
- report["api"] = fmt.Sprintf("unreachable: %s", err)
- } else {
+
+ // Try common health-check paths in order
+ paths := []string{
+ "",
+ "/health",
+ "/healthz",
+ "/status",
+ "/ping",
+ }
+
+ reached := false
+ for _, p := range paths {
+ url := strings.TrimRight(cfg.BaseURL, "/") + p
+ resp, err := httpClient.Get(url)
+ if err != nil {
+ continue
+ }
resp.Body.Close()
- report["api"] = fmt.Sprintf("reachable (HTTP %d)", resp.StatusCode)
+ if resp.StatusCode >= 200 && resp.StatusCode < 400 {
+ report["api"] = fmt.Sprintf("reachable (HTTP %d)", resp.StatusCode)
+ reached = true
+ break
+ }
+ }
+
+ if !reached {
+ // Fall back to reporting the base URL status
+ resp, err := httpClient.Get(cfg.BaseURL)
+ if err != nil {
+ report["api"] = fmt.Sprintf("unreachable: %s", err)
+ } else {
+ resp.Body.Close()
+ report["api"] = fmt.Sprintf("degraded (HTTP %d)", resp.StatusCode)
+ }
}
} else if cfg != nil && cfg.BaseURL == "" {
report["api"] = "not configured (set base_url in config file)"
← 5b3d281e feat(generator): add CRUD aliases to generated CLI commands
·
back to Cli Printing Press
·
fix(generator): harden toCamel, flagName, defaultVal and ded 1eda222a →