155 lines
2.4 KiB
Go
155 lines
2.4 KiB
Go
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")
|
|
*/
|
|
|
|
}
|