...
1 package main
2
3 import (
4 "errors"
5 "github.com/rcrowley/go-metrics"
6
7 "log"
8 "math/rand"
9 "os"
10
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
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
144
145
149
150
153
154 }
155
View as plain text