Sushi/timing/timing.go
2025-08-15 14:23:09 -05:00

49 lines
996 B
Go

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(next sushi.Handler) sushi.Handler {
return func(ctx sushi.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 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)
}