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