fix(health): make readiness check reflect real dependency state
This commit is contained in:
parent
3366d40101
commit
be950522e4
2 changed files with 29 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue