fix(health): make readiness check reflect real dependency state

This commit is contained in:
okinrev 2025-12-07 14:27:07 +01:00
parent 7dc21c3ad3
commit 0a5c111336
2 changed files with 29 additions and 4 deletions

View file

@ -414,7 +414,11 @@ func (r *APIRouter) setupCorePublicRoutes(router *gin.Engine) {
if r.config != nil {
rabbitMQEventBus = r.config.RabbitMQEventBus
}
healthHandler := handlers.NewHealthHandler(r.db.GormDB, r.logger, redisClient, rabbitMQEventBus)
var env string
if r.config != nil {
env = r.config.Env
}
healthHandler := handlers.NewHealthHandler(r.db.GormDB, r.logger, redisClient, rabbitMQEventBus, env)
healthCheckHandler = healthHandler.Check
livenessHandler = healthHandler.Liveness
readinessHandler = healthHandler.Readiness

View file

@ -35,13 +35,15 @@ type HealthHandler struct {
logger *zap.Logger
redis *redis.Client // Typé avec le vrai type Redis
rabbitMQEventBus *eventbus.RabbitMQEventBus // Instance de l'EventBus RabbitMQ
environment string // Env (development, production, etc.)
}
// NewHealthHandler crée un nouveau handler de health
func NewHealthHandler(db *gorm.DB, logger *zap.Logger, redisClient interface{}, rabbitMQEventBus interface{}) *HealthHandler {
func NewHealthHandler(db *gorm.DB, logger *zap.Logger, redisClient interface{}, rabbitMQEventBus interface{}, env string) *HealthHandler {
h := &HealthHandler{
db: db,
logger: logger,
db: db,
logger: logger,
environment: env,
}
// Type assertion for Redis
@ -129,12 +131,31 @@ func (h *HealthHandler) Readiness(c *gin.Context) {
dbCheck := h.checkDatabase()
response.Checks["database"] = dbCheck
// DB is critical in ALL environments
if dbCheck.Status == "error" {
response.Status = "not_ready"
c.JSON(http.StatusServiceUnavailable, response)
return
}
// Déterminer la strictezza selon l'environnement
// En dev/lab, on tolère que Redis/RabbitMQ soient down
isStrict := h.environment == "production"
// Vérifier que Redis est accessible
redisCheck := h.checkRedis()
if redisCheck.Status == "error" && !isStrict {
redisCheck.Status = "warning"
redisCheck.Message += " (ignored in non-production)"
}
response.Checks["redis"] = redisCheck
// Vérifier que RabbitMQ est accessible (si activé)
rabbitMQCheck := h.checkRabbitMQ()
if rabbitMQCheck.Status == "error" && !isStrict {
rabbitMQCheck.Status = "warning"
rabbitMQCheck.Message += " (ignored in non-production)"
}
response.Checks["rabbitmq"] = rabbitMQCheck
// Si un check est en erreur, on n'est pas ready