29 lines
618 B
Go
29 lines
618 B
Go
|
package metrics
|
||
|
|
||
|
import "time"
|
||
|
|
||
|
// Timer acts as a stopwatch, sending observations to a wrapped histogram.
|
||
|
// It's a bit of helpful syntax sugar for h.Observe(time.Since(x)).
|
||
|
type Timer struct {
|
||
|
h Histogram
|
||
|
t time.Time
|
||
|
}
|
||
|
|
||
|
// NewTimer wraps the given histogram and records the current time.
|
||
|
func NewTimer(h Histogram) *Timer {
|
||
|
return &Timer{
|
||
|
h: h,
|
||
|
t: time.Now(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ObserveDuration captures the number of seconds since the timer was
|
||
|
// constructed, and forwards that observation to the histogram.
|
||
|
func (t *Timer) ObserveDuration() {
|
||
|
d := time.Since(t.t).Seconds()
|
||
|
if d < 0 {
|
||
|
d = 0
|
||
|
}
|
||
|
t.h.Observe(d)
|
||
|
}
|