|
|
@@ -12,13 +12,30 @@ func Log(r Registry, freq time.Duration, l Logger) {
|
|
|
LogScaled(r, freq, time.Nanosecond, l)
|
|
|
}
|
|
|
|
|
|
+func LogOnCue(r Registry, ch chan interface{}, l Logger) {
|
|
|
+ LogScaledOnCue(r, ch, time.Nanosecond, l)
|
|
|
+}
|
|
|
+
|
|
|
// Output each metric in the given registry periodically using the given
|
|
|
// logger. Print timings in `scale` units (eg time.Millisecond) rather than nanos.
|
|
|
func LogScaled(r Registry, freq time.Duration, scale time.Duration, l Logger) {
|
|
|
+ ch := make(chan struct{}, 1)
|
|
|
+ go func() {
|
|
|
+ for range time.Tick(freq) {
|
|
|
+ ch <- struct{}{}
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ LogScaledOnCue(r, ch, scale, l)
|
|
|
+}
|
|
|
+
|
|
|
+// Output each metric in the given registry on demand through the channel using the given
|
|
|
+// logger. Print timings in `scale` units (eg time.Millisecond) rather than nanos.
|
|
|
+func LogScaledOnCue(r Registry, ch chan interface{}, scale time.Duration, l Logger) {
|
|
|
du := float64(scale)
|
|
|
duSuffix := scale.String()[1:]
|
|
|
|
|
|
- for _ = range time.Tick(freq) {
|
|
|
+ for {
|
|
|
+ <-ch
|
|
|
r.Each(func(name string, i interface{}) {
|
|
|
switch metric := i.(type) {
|
|
|
case Counter:
|
|
|
@@ -61,15 +78,15 @@ func LogScaled(r Registry, freq time.Duration, scale time.Duration, l Logger) {
|
|
|
ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
|
|
|
l.Printf("timer %s\n", name)
|
|
|
l.Printf(" count: %9d\n", t.Count())
|
|
|
- l.Printf(" min: %12.2f%s\n", float64(t.Min())/du, duSuffix)
|
|
|
- l.Printf(" max: %12.2f%s\n", float64(t.Max())/du, duSuffix)
|
|
|
- l.Printf(" mean: %12.2f%s\n", t.Mean()/du, duSuffix)
|
|
|
- l.Printf(" stddev: %12.2f%s\n", t.StdDev()/du, duSuffix)
|
|
|
- l.Printf(" median: %12.2f%s\n", ps[0]/du, duSuffix)
|
|
|
- l.Printf(" 75%%: %12.2f%s\n", ps[1]/du, duSuffix)
|
|
|
- l.Printf(" 95%%: %12.2f%s\n", ps[2]/du, duSuffix)
|
|
|
- l.Printf(" 99%%: %12.2f%s\n", ps[3]/du, duSuffix)
|
|
|
- l.Printf(" 99.9%%: %12.2f%s\n", ps[4]/du, duSuffix)
|
|
|
+ l.Printf(" min: %12.2f%s\n", float64(t.Min()) / du, duSuffix)
|
|
|
+ l.Printf(" max: %12.2f%s\n", float64(t.Max()) / du, duSuffix)
|
|
|
+ l.Printf(" mean: %12.2f%s\n", t.Mean() / du, duSuffix)
|
|
|
+ l.Printf(" stddev: %12.2f%s\n", t.StdDev() / du, duSuffix)
|
|
|
+ l.Printf(" median: %12.2f%s\n", ps[0] / du, duSuffix)
|
|
|
+ l.Printf(" 75%%: %12.2f%s\n", ps[1] / du, duSuffix)
|
|
|
+ l.Printf(" 95%%: %12.2f%s\n", ps[2] / du, duSuffix)
|
|
|
+ l.Printf(" 99%%: %12.2f%s\n", ps[3] / du, duSuffix)
|
|
|
+ l.Printf(" 99.9%%: %12.2f%s\n", ps[4] / du, duSuffix)
|
|
|
l.Printf(" 1-min rate: %12.2f\n", t.Rate1())
|
|
|
l.Printf(" 5-min rate: %12.2f\n", t.Rate5())
|
|
|
l.Printf(" 15-min rate: %12.2f\n", t.Rate15())
|