github.com/rcrowley/go-metrics@v0.0.0-20201227073835-cf1acfcdf475/cmd/metrics-example/metrics-example.go (about) 1 package main 2 3 import ( 4 "errors" 5 "github.com/rcrowley/go-metrics" 6 // "github.com/rcrowley/go-metrics/stathat" 7 "log" 8 "math/rand" 9 "os" 10 // "syslog" 11 "time" 12 ) 13 14 const fanout = 10 15 16 func main() { 17 18 r := metrics.NewRegistry() 19 20 c := metrics.NewCounter() 21 r.Register("foo", c) 22 for i := 0; i < fanout; i++ { 23 go func() { 24 for { 25 c.Dec(19) 26 time.Sleep(300e6) 27 } 28 }() 29 go func() { 30 for { 31 c.Inc(47) 32 time.Sleep(400e6) 33 } 34 }() 35 } 36 37 g := metrics.NewGauge() 38 r.Register("bar", g) 39 for i := 0; i < fanout; i++ { 40 go func() { 41 for { 42 g.Update(19) 43 time.Sleep(300e6) 44 } 45 }() 46 go func() { 47 for { 48 g.Update(47) 49 time.Sleep(400e6) 50 } 51 }() 52 } 53 54 gf := metrics.NewGaugeFloat64() 55 r.Register("barfloat64", gf) 56 for i := 0; i < fanout; i++ { 57 go func() { 58 for { 59 g.Update(19.0) 60 time.Sleep(300e6) 61 } 62 }() 63 go func() { 64 for { 65 g.Update(47.0) 66 time.Sleep(400e6) 67 } 68 }() 69 } 70 71 hc := metrics.NewHealthcheck(func(h metrics.Healthcheck) { 72 if 0 < rand.Intn(2) { 73 h.Healthy() 74 } else { 75 h.Unhealthy(errors.New("baz")) 76 } 77 }) 78 r.Register("baz", hc) 79 80 s := metrics.NewExpDecaySample(1028, 0.015) 81 //s := metrics.NewUniformSample(1028) 82 h := metrics.NewHistogram(s) 83 r.Register("bang", h) 84 for i := 0; i < fanout; i++ { 85 go func() { 86 for { 87 h.Update(19) 88 time.Sleep(300e6) 89 } 90 }() 91 go func() { 92 for { 93 h.Update(47) 94 time.Sleep(400e6) 95 } 96 }() 97 } 98 99 m := metrics.NewMeter() 100 r.Register("quux", m) 101 for i := 0; i < fanout; i++ { 102 go func() { 103 for { 104 m.Mark(19) 105 time.Sleep(300e6) 106 } 107 }() 108 go func() { 109 for { 110 m.Mark(47) 111 time.Sleep(400e6) 112 } 113 }() 114 } 115 116 t := metrics.NewTimer() 117 r.Register("hooah", t) 118 for i := 0; i < fanout; i++ { 119 go func() { 120 for { 121 t.Time(func() { time.Sleep(300e6) }) 122 } 123 }() 124 go func() { 125 for { 126 t.Time(func() { time.Sleep(400e6) }) 127 } 128 }() 129 } 130 131 metrics.RegisterDebugGCStats(r) 132 go metrics.CaptureDebugGCStats(r, 5e9) 133 134 metrics.RegisterRuntimeMemStats(r) 135 go metrics.CaptureRuntimeMemStats(r, 5e9) 136 137 metrics.Log(r, 60e9, log.New(os.Stderr, "metrics: ", log.Lmicroseconds)) 138 139 /* 140 w, err := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics") 141 if nil != err { log.Fatalln(err) } 142 metrics.Syslog(r, 60e9, w) 143 */ 144 145 /* 146 addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003") 147 metrics.Graphite(r, 10e9, "metrics", addr) 148 */ 149 150 /* 151 stathat.Stathat(r, 10e9, "example@example.com") 152 */ 153 154 }