Sushi/timing/timing.go

47 lines
924 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(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)
}