49 lines
990 B
Go
49 lines
990 B
Go
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"dk/internal/router"
|
|
)
|
|
|
|
const RequestTimerKey = "request_start_time"
|
|
|
|
// Timing adds request timing functionality
|
|
func Timing() router.Middleware {
|
|
return func(next router.Handler) router.Handler {
|
|
return func(ctx router.Ctx, params []string) {
|
|
startTime := time.Now()
|
|
ctx.SetUserValue(RequestTimerKey, startTime)
|
|
|
|
next(ctx, params)
|
|
}
|
|
}
|
|
}
|
|
|
|
// GetRequestTime returns the total request processing time in seconds (formatted)
|
|
func GetRequestTime(ctx router.Ctx) string {
|
|
startTime, ok := ctx.UserValue(RequestTimerKey).(time.Time)
|
|
if !ok {
|
|
return "0"
|
|
}
|
|
|
|
duration := time.Since(startTime)
|
|
seconds := duration.Seconds()
|
|
|
|
if seconds < 0.001 {
|
|
return "0"
|
|
}
|
|
|
|
return fmt.Sprintf("%.3f", seconds)
|
|
}
|
|
|
|
// GetRequestDuration returns the raw duration
|
|
func GetRequestDuration(ctx router.Ctx) time.Duration {
|
|
startTime, ok := ctx.UserValue(RequestTimerKey).(time.Time)
|
|
if !ok {
|
|
return 0
|
|
}
|
|
|
|
return time.Since(startTime)
|
|
} |