github.com/ethereum/go-ethereum@v1.16.1/metrics/metrics_test.go (about) 1 package metrics 2 3 import ( 4 "fmt" 5 "sync" 6 "testing" 7 "time" 8 ) 9 10 func TestReadRuntimeValues(t *testing.T) { 11 var v runtimeStats 12 readRuntimeStats(&v) 13 t.Logf("%+v", v) 14 } 15 16 func BenchmarkMetrics(b *testing.B) { 17 var ( 18 r = NewRegistry() 19 c = NewRegisteredCounter("counter", r) 20 cf = NewRegisteredCounterFloat64("counterfloat64", r) 21 g = NewRegisteredGauge("gauge", r) 22 gf = NewRegisteredGaugeFloat64("gaugefloat64", r) 23 h = NewRegisteredHistogram("histogram", r, NewUniformSample(100)) 24 m = NewRegisteredMeter("meter", r) 25 t = NewRegisteredTimer("timer", r) 26 ) 27 RegisterDebugGCStats(r) 28 b.ResetTimer() 29 var wg sync.WaitGroup 30 wg.Add(128) 31 for i := 0; i < 128; i++ { 32 go func() { 33 defer wg.Done() 34 for i := 0; i < b.N; i++ { 35 c.Inc(1) 36 cf.Inc(1.0) 37 g.Update(int64(i)) 38 gf.Update(float64(i)) 39 h.Update(int64(i)) 40 m.Mark(1) 41 t.Update(1) 42 } 43 }() 44 } 45 wg.Wait() 46 } 47 48 func Example() { 49 c := NewCounter() 50 Register("money", c) 51 c.Inc(17) 52 53 // Threadsafe registration 54 t := GetOrRegisterTimer("db.get.latency", nil) 55 t.Time(func() { time.Sleep(10 * time.Millisecond) }) 56 t.Update(1) 57 58 fmt.Println(c.Snapshot().Count()) 59 fmt.Println(t.Snapshot().Min()) 60 // Output: 17 61 // 1 62 }