From 0a3cee7109038b81d4d024dd3296d7d4e5285def Mon Sep 17 00:00:00 2001 From: senke Date: Sat, 27 Dec 2025 02:00:25 +0100 Subject: [PATCH] =?UTF-8?q?[LOGGING]=20Fix=20#9:=20D=C3=A9tection=20requ?= =?UTF-8?q?=C3=AAtes=20lentes=20avec=20seuil=20configurable=20(SLOW=5FREQU?= =?UTF-8?q?EST=5FTHRESHOLD=5FMS)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/middleware/request_logger.go | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/veza-backend-api/internal/middleware/request_logger.go b/veza-backend-api/internal/middleware/request_logger.go index 26988f209..220c17843 100644 --- a/veza-backend-api/internal/middleware/request_logger.go +++ b/veza-backend-api/internal/middleware/request_logger.go @@ -1,6 +1,8 @@ package middleware import ( + "os" + "strconv" "time" "github.com/gin-gonic/gin" @@ -70,16 +72,43 @@ func RequestLogger(logger *zap.Logger) gin.HandlerFunc { fields = append(fields, zap.Strings("errors", c.Errors.Errors())) } - // Logger selon le status code + // FIX #9: Détecter les requêtes lentes avec seuil configurable + // Seuil par défaut: 1 seconde (configurable via SLOW_REQUEST_THRESHOLD_MS) + slowThresholdMs := getEnvInt("SLOW_REQUEST_THRESHOLD_MS", 1000) // 1000ms = 1s par défaut + slowThreshold := time.Duration(slowThresholdMs) * time.Millisecond + isSlowRequest := latency > slowThreshold + + // Logger selon le status code et la latence if c.Writer.Status() >= 500 { // Erreurs serveur logger.Error("Request completed", fields...) } else if c.Writer.Status() >= 400 { // Erreurs client logger.Warn("Request completed with error", fields...) + } else if isSlowRequest { + // FIX #9: Requêtes lentes (succès mais > seuil) + logger.Warn("Slow request detected", + append(fields, + zap.Duration("slow_threshold", slowThreshold), + zap.Bool("is_slow", true), + )..., + ) } else { - // Succès + // Succès normal logger.Info("Request completed", fields...) } } } + +// getEnvInt récupère une variable d'environnement entière avec une valeur par défaut +// FIX #9: Helper pour lire SLOW_REQUEST_THRESHOLD_MS +func getEnvInt(key string, defaultValue int) int { + value := os.Getenv(key) + if value == "" { + return defaultValue + } + if intValue, err := strconv.Atoi(value); err == nil { + return intValue + } + return defaultValue +}