Rounding the latency in certain scenarios (#1005)

* Rounding the latency in certain scenarios

* run gofmt
This commit is contained in:
Carter
2016-08-08 12:14:53 -04:00
committed by Matt Holt
parent de7bf4f241
commit 4d76ccb1c4
2 changed files with 55 additions and 1 deletions
+34 -1
View File
@@ -144,7 +144,10 @@ func (r *replacer) Replace(s string) string {
if r.responseRecorder != nil {
r.replacements["{status}"] = func() string { return strconv.Itoa(r.responseRecorder.status) }
r.replacements["{size}"] = func() string { return strconv.Itoa(r.responseRecorder.size) }
r.replacements["{latency}"] = func() string { return time.Since(r.responseRecorder.start).String() }
r.replacements["{latency}"] = func() string {
dur := time.Since(r.responseRecorder.start)
return roundDuration(dur).String()
}
}
// Include custom placeholders, overwriting existing ones if necessary
@@ -187,6 +190,36 @@ func (r *replacer) Replace(s string) string {
return s
}
func roundDuration(d time.Duration) time.Duration {
if d >= time.Millisecond {
return round(d, time.Millisecond)
} else if d >= time.Microsecond {
return round(d, time.Microsecond)
}
return d
}
// round rounds d to the nearest r
func round(d, r time.Duration) time.Duration {
if r <= 0 {
return d
}
neg := d < 0
if neg {
d = -d
}
if m := d % r; m+m < r {
d = d - m
} else {
d = d + r - m
}
if neg {
return -d
}
return d
}
// Set sets key to value in the r.customReplacements map.
func (r *replacer) Set(key, value string) {
r.customReplacements["{"+key+"}"] = func() string { return value }