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  }