package middleware import ( "fmt" "log" "time" "github.com/gin-gonic/gin" ) // PerformanceMiddleware adds performance monitoring to requests func PerformanceMiddleware() gin.HandlerFunc { return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { // Custom log format with performance metrics return fmt.Sprintf( "[%s] %s %s %d %s %s \"%s\" %s\n", param.TimeStamp.Format("02/Jan/2006:15:04:05 -0700"), param.Method, param.Path, param.StatusCode, param.Latency, param.Request.UserAgent(), param.ErrorMessage, param.Request.Header.Get("X-Request-ID"), ) }) } // RequestIDMiddleware adds a unique request ID to each request func RequestIDMiddleware() gin.HandlerFunc { return func(c *gin.Context) { requestID := c.GetHeader("X-Request-ID") if requestID == "" { requestID = generateRequestID() } c.Set("RequestID", requestID) c.Header("X-Request-ID", requestID) c.Next() } } // generateRequestID generates a unique request ID func generateRequestID() string { return fmt.Sprintf("%d", time.Now().UnixNano()) } // SlowQueryMiddleware logs slow database queries func SlowQueryMiddleware(threshold time.Duration) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() c.Next() duration := time.Since(start) if duration > threshold { log.Printf("SLOW REQUEST: %s %s took %v", c.Request.Method, c.Request.URL.Path, duration) } } }