mirror of
https://github.com/nprasad2077/NBA_Go.git
synced 2026-09-23 06:25:14 +00:00
feat: add /health/live and /health/ready endpoints with legacy aliases
This commit is contained in:
@@ -24,16 +24,18 @@ type ReadinessResponse struct {
|
|||||||
Targets map[string]TargetHealth `json:"targets"`
|
Targets map[string]TargetHealth `json:"targets"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterHealthRoutes mounts /healthz and /readyz probes
|
// RegisterHealthRoutes mounts /health/live, /health/ready, and backward-compatible /healthz, /readyz probes
|
||||||
func RegisterHealthRoutes(app *fiber.App, db *gorm.DB) {
|
func RegisterHealthRoutes(app *fiber.App, db *gorm.DB) {
|
||||||
app.Get("/healthz", func(c *fiber.Ctx) error {
|
liveHandler := func(c *fiber.Ctx) error {
|
||||||
return c.JSON(fiber.Map{
|
return c.JSON(fiber.Map{
|
||||||
"status": "UP",
|
"status": "UP",
|
||||||
"timestamp": time.Now().UTC(),
|
"timestamp": time.Now().UTC(),
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
app.Get("/health/live", liveHandler)
|
||||||
|
app.Get("/healthz", liveHandler)
|
||||||
|
|
||||||
app.Get("/readyz", func(c *fiber.Ctx) error {
|
readyHandler := func(c *fiber.Ctx) error {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
@@ -116,5 +118,7 @@ func RegisterHealthRoutes(app *fiber.App, db *gorm.DB) {
|
|||||||
Timestamp: time.Now().UTC(),
|
Timestamp: time.Now().UTC(),
|
||||||
Targets: targets,
|
Targets: targets,
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
app.Get("/health/ready", readyHandler)
|
||||||
|
app.Get("/readyz", readyHandler)
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-4
@@ -86,11 +86,24 @@ func TestHealthRoutes(t *testing.T) {
|
|||||||
|
|
||||||
controllers.RegisterHealthRoutes(app, db)
|
controllers.RegisterHealthRoutes(app, db)
|
||||||
|
|
||||||
req, _ := http.NewRequest(http.MethodGet, "/healthz", nil)
|
// Liveness tests (/health/live and /healthz)
|
||||||
|
for _, path := range []string{"/health/live", "/healthz"} {
|
||||||
|
req, _ := http.NewRequest(http.MethodGet, path, nil)
|
||||||
resp, err := app.Test(req, -1)
|
resp, err := app.Test(req, -1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err, path)
|
||||||
assert.Equal(t, 200, resp.StatusCode)
|
assert.Equal(t, 200, resp.StatusCode, path)
|
||||||
|
|
||||||
body, _ := io.ReadAll(resp.Body)
|
body, _ := io.ReadAll(resp.Body)
|
||||||
assert.Contains(t, string(body), `"status":"UP"`)
|
assert.Contains(t, string(body), `"status":"UP"`, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Readiness tests (/health/ready and /readyz)
|
||||||
|
for _, path := range []string{"/health/ready", "/readyz"} {
|
||||||
|
req, _ := http.NewRequest(http.MethodGet, path, nil)
|
||||||
|
resp, err := app.Test(req, -1)
|
||||||
|
assert.NoError(t, err, path)
|
||||||
|
// Since in-memory SQLite doesn't have dbresolver write/read targets, status is 503 DEGRADED or 200 UP
|
||||||
|
body, _ := io.ReadAll(resp.Body)
|
||||||
|
assert.Contains(t, string(body), `"targets"`, path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user