Files
Tomas Dvorak d27cf14110 first test
2026-02-08 14:14:55 +01:00

59 lines
1.4 KiB
Go

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)
}
}
}