metrics.go 1009 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package main
  2. import (
  3. "runtime"
  4. "time"
  5. metrics "github.com/abh/geodns/Godeps/_workspace/src/github.com/rcrowley/go-metrics"
  6. )
  7. type ServerMetrics struct {
  8. qCounter metrics.Meter
  9. lastQueryCount int64
  10. queriesHistogram metrics.Histogram
  11. goroutines metrics.Gauge
  12. }
  13. func NewMetrics() *ServerMetrics {
  14. m := new(ServerMetrics)
  15. m.qCounter = metrics.GetOrRegisterMeter("queries", nil)
  16. m.lastQueryCount = m.qCounter.Count()
  17. m.queriesHistogram = metrics.GetOrRegisterHistogram(
  18. "queries-histogram", nil,
  19. metrics.NewExpDecaySample(600, 0.015),
  20. )
  21. m.goroutines = metrics.GetOrRegisterGauge("goroutines", nil)
  22. return m
  23. }
  24. func (m *ServerMetrics) Updater() {
  25. for {
  26. time.Sleep(1 * time.Second)
  27. // Make sure go-metrics get some input to update the rate
  28. m.qCounter.Mark(0)
  29. current := m.qCounter.Count()
  30. newQueries := current - m.lastQueryCount
  31. m.lastQueryCount = current
  32. m.queriesHistogram.Update(newQueries)
  33. m.goroutines.Update(int64(runtime.NumGoroutine()))
  34. }
  35. }