github.com/xfond/eth-implementation@v1.8.9-0.20180514135602-f6bc65fc6811/metrics/syslog.go (about)

     1  // +build !windows
     2  
     3  package metrics
     4  
     5  import (
     6  	"fmt"
     7  	"log/syslog"
     8  	"time"
     9  )
    10  
    11  // Output each metric in the given registry to syslog periodically using
    12  // the given syslogger.
    13  func Syslog(r Registry, d time.Duration, w *syslog.Writer) {
    14  	for range time.Tick(d) {
    15  		r.Each(func(name string, i interface{}) {
    16  			switch metric := i.(type) {
    17  			case Counter:
    18  				w.Info(fmt.Sprintf("counter %s: count: %d", name, metric.Count()))
    19  			case Gauge:
    20  				w.Info(fmt.Sprintf("gauge %s: value: %d", name, metric.Value()))
    21  			case GaugeFloat64:
    22  				w.Info(fmt.Sprintf("gauge %s: value: %f", name, metric.Value()))
    23  			case Healthcheck:
    24  				metric.Check()
    25  				w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, metric.Error()))
    26  			case Histogram:
    27  				h := metric.Snapshot()
    28  				ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
    29  				w.Info(fmt.Sprintf(
    30  					"histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f",
    31  					name,
    32  					h.Count(),
    33  					h.Min(),
    34  					h.Max(),
    35  					h.Mean(),
    36  					h.StdDev(),
    37  					ps[0],
    38  					ps[1],
    39  					ps[2],
    40  					ps[3],
    41  					ps[4],
    42  				))
    43  			case Meter:
    44  				m := metric.Snapshot()
    45  				w.Info(fmt.Sprintf(
    46  					"meter %s: count: %d 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f",
    47  					name,
    48  					m.Count(),
    49  					m.Rate1(),
    50  					m.Rate5(),
    51  					m.Rate15(),
    52  					m.RateMean(),
    53  				))
    54  			case Timer:
    55  				t := metric.Snapshot()
    56  				ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
    57  				w.Info(fmt.Sprintf(
    58  					"timer %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f 1-min: %.2f 5-min: %.2f 15-min: %.2f mean-rate: %.2f",
    59  					name,
    60  					t.Count(),
    61  					t.Min(),
    62  					t.Max(),
    63  					t.Mean(),
    64  					t.StdDev(),
    65  					ps[0],
    66  					ps[1],
    67  					ps[2],
    68  					ps[3],
    69  					ps[4],
    70  					t.Rate1(),
    71  					t.Rate5(),
    72  					t.Rate15(),
    73  					t.RateMean(),
    74  				))
    75  			}
    76  		})
    77  	}
    78  }