mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
59 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|