package timing import ( "fmt" "time" sushi "git.sharkk.net/Sharkk/Sushi" ) const RequestTimerKey = "request_start_time" // Middleware adds request timing functionality func Middleware() sushi.Middleware { return func(ctx sushi.Ctx, next func()) { startTime := time.Now() ctx.SetUserValue(RequestTimerKey, startTime) next() } } // GetRequestTime returns the total request processing time in seconds (formatted) func GetRequestTime(ctx sushi.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 sushi.Ctx) time.Duration { startTime, ok := ctx.UserValue(RequestTimerKey).(time.Time) if !ok { return 0 } return time.Since(startTime) }