1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package metrics
- import (
- "io"
- "net"
- "sync"
- "time"
- gometrics "github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
- )
- const (
- // RuntimeMemStatsSampleInterval is the interval in seconds at which the
- // Go runtime's memory statistics will be gathered.
- RuntimeMemStatsSampleInterval = time.Duration(2) * time.Second
- // GraphitePublishInterval is the interval in seconds at which all
- // gathered statistics will be published to a Graphite endpoint.
- GraphitePublishInterval = time.Duration(2) * time.Second
- )
- type standardBucket struct {
- sync.Mutex
- name string
- registry gometrics.Registry
- timers map[string]Timer
- gauges map[string]Gauge
- }
- func newStandardBucket(name string) standardBucket {
- registry := gometrics.NewRegistry()
- gometrics.RegisterRuntimeMemStats(registry)
- go gometrics.CaptureRuntimeMemStats(registry, RuntimeMemStatsSampleInterval)
- return standardBucket{
- name: name,
- registry: registry,
- timers: make(map[string]Timer),
- gauges: make(map[string]Gauge),
- }
- }
- func (smb standardBucket) Dump(w io.Writer) {
- gometrics.WriteOnce(smb.registry, w)
- return
- }
- func (smb standardBucket) Timer(name string) Timer {
- smb.Lock()
- defer smb.Unlock()
- timer, ok := smb.timers[name]
- if !ok {
- timer = gometrics.NewTimer()
- smb.timers[name] = timer
- smb.registry.Register(name, timer)
- }
- return timer
- }
- func (smb standardBucket) Gauge(name string) Gauge {
- smb.Lock()
- defer smb.Unlock()
- gauge, ok := smb.gauges[name]
- if !ok {
- gauge = gometrics.NewGauge()
- smb.gauges[name] = gauge
- smb.registry.Register(name, gauge)
- }
- return gauge
- }
- func (smb standardBucket) Publish(graphite_addr string) error {
- addr, err := net.ResolveTCPAddr("tcp", graphite_addr)
- if err != nil {
- return err
- }
- go gometrics.Graphite(smb.registry, GraphitePublishInterval, smb.name, addr)
- return nil
- }
|