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