Commit 95dce5cd authored by Matthew Holt's avatar Matthew Holt

Latency now available with recorder and replacer

parent 51139a5f
package middleware package middleware
import "net/http" import (
"net/http"
"time"
)
// responseRecorder is a type of ResponseWriter that captures // responseRecorder is a type of ResponseWriter that captures
// the status code written to it and also the size of the body // the status code written to it and also the size of the body
...@@ -12,6 +15,7 @@ type responseRecorder struct { ...@@ -12,6 +15,7 @@ type responseRecorder struct {
http.ResponseWriter http.ResponseWriter
status int status int
size int size int
start time.Time
} }
// NewResponseRecorder makes and returns a new responseRecorder, // NewResponseRecorder makes and returns a new responseRecorder,
...@@ -24,6 +28,7 @@ func NewResponseRecorder(w http.ResponseWriter) *responseRecorder { ...@@ -24,6 +28,7 @@ func NewResponseRecorder(w http.ResponseWriter) *responseRecorder {
return &responseRecorder{ return &responseRecorder{
ResponseWriter: w, ResponseWriter: w,
status: http.StatusOK, status: http.StatusOK,
start: time.Now(),
} }
} }
......
...@@ -50,8 +50,9 @@ func NewReplacer(r *http.Request, rr *responseRecorder) replacer { ...@@ -50,8 +50,9 @@ func NewReplacer(r *http.Request, rr *responseRecorder) replacer {
"{when}": func() string { "{when}": func() string {
return time.Now().Format(timeFormat) return time.Now().Format(timeFormat)
}(), }(),
"{status}": strconv.Itoa(rr.status), "{status}": strconv.Itoa(rr.status),
"{size}": strconv.Itoa(rr.size), "{size}": strconv.Itoa(rr.size),
"{latency}": time.Since(rr.start).String(),
} }
// Header placeholders // Header placeholders
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment