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  }