package main import ( "errors" "github.com/rcrowley/go-metrics" // "github.com/rcrowley/go-metrics/stathat" "log" "math/rand" "os" // "syslog" "time" ) const fanout = 10 func main() { r := metrics.NewRegistry() c := metrics.NewCounter() r.Register("foo", c) for i := 0; i < fanout; i++ { go func() { for { c.Dec(19) time.Sleep(300e6) } }() go func() { for { c.Inc(47) time.Sleep(400e6) } }() } g := metrics.NewGauge() r.Register("bar", g) for i := 0; i < fanout; i++ { go func() { for { g.Update(19) time.Sleep(300e6) } }() go func() { for { g.Update(47) time.Sleep(400e6) } }() } gf := metrics.NewGaugeFloat64() r.Register("barfloat64", gf) for i := 0; i < fanout; i++ { go func() { for { g.Update(19.0) time.Sleep(300e6) } }() go func() { for { g.Update(47.0) time.Sleep(400e6) } }() } hc := metrics.NewHealthcheck(func(h metrics.Healthcheck) { if 0 < rand.Intn(2) { h.Healthy() } else { h.Unhealthy(errors.New("baz")) } }) r.Register("baz", hc) s := metrics.NewExpDecaySample(1028, 0.015) //s := metrics.NewUniformSample(1028) h := metrics.NewHistogram(s) r.Register("bang", h) for i := 0; i < fanout; i++ { go func() { for { h.Update(19) time.Sleep(300e6) } }() go func() { for { h.Update(47) time.Sleep(400e6) } }() } m := metrics.NewMeter() r.Register("quux", m) for i := 0; i < fanout; i++ { go func() { for { m.Mark(19) time.Sleep(300e6) } }() go func() { for { m.Mark(47) time.Sleep(400e6) } }() } t := metrics.NewTimer() r.Register("hooah", t) for i := 0; i < fanout; i++ { go func() { for { t.Time(func() { time.Sleep(300e6) }) } }() go func() { for { t.Time(func() { time.Sleep(400e6) }) } }() } metrics.RegisterDebugGCStats(r) go metrics.CaptureDebugGCStats(r, 5e9) metrics.RegisterRuntimeMemStats(r) go metrics.CaptureRuntimeMemStats(r, 5e9) metrics.Log(r, 60e9, log.New(os.Stderr, "metrics: ", log.Lmicroseconds)) /* w, err := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics") if nil != err { log.Fatalln(err) } metrics.Syslog(r, 60e9, w) */ /* addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003") metrics.Graphite(r, 10e9, "metrics", addr) */ /* stathat.Stathat(r, 10e9, "example@example.com") */ }