go-ethereum/metrics/metrics_test.go

63 lines
1.2 KiB
Go

package metrics
import (
"fmt"
"sync"
"testing"
"time"
)
func TestReadRuntimeValues(t *testing.T) {
var v runtimeStats
readRuntimeStats(&v)
t.Logf("%+v", v)
}
func BenchmarkMetrics(b *testing.B) {
var (
r = NewRegistry()
c = NewRegisteredCounter("counter", r)
cf = NewRegisteredCounterFloat64("counterfloat64", r)
g = NewRegisteredGauge("gauge", r)
gf = NewRegisteredGaugeFloat64("gaugefloat64", r)
h = NewRegisteredHistogram("histogram", r, NewUniformSample(100))
m = NewRegisteredMeter("meter", r)
t = NewRegisteredTimer("timer", r)
)
RegisterDebugGCStats(r)
b.ResetTimer()
var wg sync.WaitGroup
wg.Add(128)
for i := 0; i < 128; i++ {
go func() {
defer wg.Done()
for i := 0; i < b.N; i++ {
c.Inc(1)
cf.Inc(1.0)
g.Update(int64(i))
gf.Update(float64(i))
h.Update(int64(i))
m.Mark(1)
t.Update(1)
}
}()
}
wg.Wait()
}
func Example() {
c := NewCounter()
Register("money", c)
c.Inc(17)
// Threadsafe registration
t := GetOrRegisterTimer("db.get.latency", nil)
t.Time(func() { time.Sleep(10 * time.Millisecond) })
t.Update(1)
fmt.Println(c.Snapshot().Count())
fmt.Println(t.Snapshot().Min())
// Output: 17
// 1
}