12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package main
- import (
- "runtime"
- "time"
- metrics "github.com/abh/geodns/Godeps/_workspace/src/github.com/rcrowley/go-metrics"
- )
- type ServerMetrics struct {
- qCounter metrics.Meter
- lastQueryCount int64
- queriesHistogram metrics.Histogram
- goroutines metrics.Gauge
- }
- func NewMetrics() *ServerMetrics {
- m := new(ServerMetrics)
- m.qCounter = metrics.GetOrRegisterMeter("queries", nil)
- m.lastQueryCount = m.qCounter.Count()
- m.queriesHistogram = metrics.GetOrRegisterHistogram(
- "queries-histogram", nil,
- metrics.NewExpDecaySample(600, 0.015),
- )
- m.goroutines = metrics.GetOrRegisterGauge("goroutines", nil)
- return m
- }
- func (m *ServerMetrics) Updater() {
- for {
- time.Sleep(1 * time.Second)
- // Make sure go-metrics get some input to update the rate
- m.qCounter.Mark(0)
- current := m.qCounter.Count()
- newQueries := current - m.lastQueryCount
- m.lastQueryCount = current
- m.queriesHistogram.Update(newQueries)
- m.goroutines.Update(int64(runtime.NumGoroutine()))
- }
- }
|