Prechádzať zdrojové kódy

Upgrade go-metrics api to the latest version, clean up qCounter global variable

Ask Bjørn Hansen 11 rokov pred
rodič
commit
df3ae25333
5 zmenil súbory, kde vykonal 32 pridanie a 24 odobranie
  1. 11 13
      metrics.go
  2. 6 4
      monitor.go
  3. 6 2
      serve.go
  4. 4 1
      stathat.go
  5. 5 4
      zone.go

+ 11 - 13
metrics.go

@@ -1,27 +1,26 @@
 package main
 package main
 
 
 import (
 import (
-	metrics "github.com/abh/go-metrics"
-	"log"
-	"os"
 	"runtime"
 	"runtime"
 	"time"
 	"time"
-)
 
 
-var qCounter = metrics.NewMeter()
+	metrics "github.com/abh/go-metrics"
+)
 
 
 type ServerMetrics struct {
 type ServerMetrics struct {
+	qCounter               metrics.Meter
 	lastQueryCount         int64
 	lastQueryCount         int64
-	queriesHistogram       *metrics.StandardHistogram
-	queriesHistogramRecent *metrics.StandardHistogram
-	goroutines             *metrics.StandardGauge
+	queriesHistogram       metrics.Histogram
+	queriesHistogramRecent metrics.Histogram
+	goroutines             metrics.Gauge
 }
 }
 
 
 func NewMetrics() *ServerMetrics {
 func NewMetrics() *ServerMetrics {
 	m := new(ServerMetrics)
 	m := new(ServerMetrics)
 
 
-	m.lastQueryCount = qCounter.Count()
-	metrics.Register("queries", qCounter)
+	m.qCounter = metrics.NewMeter()
+	m.lastQueryCount = m.qCounter.Count()
+	metrics.Register("queries", m.qCounter)
 
 
 	m.queriesHistogram = metrics.NewHistogram(metrics.NewUniformSample(1800))
 	m.queriesHistogram = metrics.NewHistogram(metrics.NewUniformSample(1800))
 	metrics.Register("queries-histogram", m.queriesHistogram)
 	metrics.Register("queries-histogram", m.queriesHistogram)
@@ -46,9 +45,9 @@ func (m *ServerMetrics) Updater() {
 		time.Sleep(1 * time.Second)
 		time.Sleep(1 * time.Second)
 
 
 		// Make sure go-metrics get some input to update the rate
 		// Make sure go-metrics get some input to update the rate
-		qCounter.Mark(0)
+		m.qCounter.Mark(0)
 
 
-		current := qCounter.Count()
+		current := m.qCounter.Count()
 		newQueries := current - m.lastQueryCount
 		newQueries := current - m.lastQueryCount
 		m.lastQueryCount = current
 		m.lastQueryCount = current
 
 
@@ -56,6 +55,5 @@ func (m *ServerMetrics) Updater() {
 		m.queriesHistogramRecent.Update(newQueries)
 		m.queriesHistogramRecent.Update(newQueries)
 
 
 		m.goroutines.Update(int64(runtime.NumGoroutine()))
 		m.goroutines.Update(int64(runtime.NumGoroutine()))
-
 	}
 	}
 }
 }

+ 6 - 4
monitor.go

@@ -1,10 +1,8 @@
 package main
 package main
 
 
 import (
 import (
-	"code.google.com/p/go.net/websocket"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
-	"github.com/abh/go-metrics"
 	"html/template"
 	"html/template"
 	"io"
 	"io"
 	"log"
 	"log"
@@ -14,6 +12,9 @@ import (
 	"sort"
 	"sort"
 	"strconv"
 	"strconv"
 	"time"
 	"time"
+
+	"code.google.com/p/go.net/websocket"
+	"github.com/abh/go-metrics"
 )
 )
 
 
 // Initial status message on websocket
 // Initial status message on websocket
@@ -154,7 +155,8 @@ func initialStatus() string {
 
 
 func logStatus() {
 func logStatus() {
 	log.Println(initialStatus())
 	log.Println(initialStatus())
-	// Does not impact performance too much
+
+	qCounter := metrics.Get("queries").(metrics.Meter)
 	lastQueryCount := qCounter.Count()
 	lastQueryCount := qCounter.Count()
 
 
 	for {
 	for {
@@ -177,6 +179,7 @@ func monitor(zones Zones) {
 	go hub.run()
 	go hub.run()
 	go httpHandler(zones)
 	go httpHandler(zones)
 
 
+	qCounter := metrics.Get("queries").(metrics.Meter)
 	lastQueryCount := qCounter.Count()
 	lastQueryCount := qCounter.Count()
 
 
 	status := new(statusStreamMsgUpdate)
 	status := new(statusStreamMsgUpdate)
@@ -191,7 +194,6 @@ func monitor(zones Zones) {
 		status.QueryCount = qCounter.Count()
 		status.QueryCount = qCounter.Count()
 		status.Qps = newQueries
 		status.Qps = newQueries
 
 
-		// go-metrics only updates the rate every 5 seconds, so don't pretend otherwise
 		newQps1m := qCounter.Rate1()
 		newQps1m := qCounter.Rate1()
 		if newQps1m != lastQps1m {
 		if newQps1m != lastQps1m {
 			status.Qps1m = newQps1m
 			status.Qps1m = newQps1m

+ 6 - 2
serve.go

@@ -3,13 +3,15 @@ package main
 import (
 import (
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
-	"github.com/abh/dns"
 	"log"
 	"log"
 	"net"
 	"net"
 	"os"
 	"os"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
 	"time"
 	"time"
+
+	"github.com/abh/dns"
+	"github.com/abh/go-metrics"
 )
 )
 
 
 func getQuestionName(z *Zone, req *dns.Msg) string {
 func getQuestionName(z *Zone, req *dns.Msg) string {
@@ -26,7 +28,7 @@ func serve(w dns.ResponseWriter, req *dns.Msg, z *Zone) {
 		dns.TypeToString[qtype], req.MsgHdr.Id, w.RemoteAddr())
 		dns.TypeToString[qtype], req.MsgHdr.Id, w.RemoteAddr())
 
 
 	// Global meter
 	// Global meter
-	qCounter.Mark(1)
+	metrics.Get("queries").(metrics.Meter).Mark(1)
 
 
 	// Zone meter
 	// Zone meter
 	z.Metrics.Queries.Mark(1)
 	z.Metrics.Queries.Mark(1)
@@ -181,6 +183,8 @@ func statusRR(label string) []dns.RR {
 	if err == nil {
 	if err == nil {
 		status["h"] = hostname
 		status["h"] = hostname
 	}
 	}
+
+	qCounter := metrics.Get("queries").(metrics.Meter)
 	status["up"] = strconv.Itoa(int(time.Since(timeStarted).Seconds()))
 	status["up"] = strconv.Itoa(int(time.Since(timeStarted).Seconds()))
 	status["qs"] = strconv.FormatInt(qCounter.Count(), 10)
 	status["qs"] = strconv.FormatInt(qCounter.Count(), 10)
 	status["qps1"] = fmt.Sprintf("%.4f", qCounter.Rate1())
 	status["qps1"] = fmt.Sprintf("%.4f", qCounter.Rate1())

+ 4 - 1
stathat.go

@@ -1,11 +1,13 @@
 package main
 package main
 
 
 import (
 import (
-	"github.com/stathat/go"
 	"log"
 	"log"
 	"runtime"
 	"runtime"
 	"strings"
 	"strings"
 	"time"
 	"time"
+
+	"github.com/abh/go-metrics"
+	"github.com/stathat/go"
 )
 )
 
 
 func (zs *Zones) statHatPoster() {
 func (zs *Zones) statHatPoster() {
@@ -59,6 +61,7 @@ func (zs *Zones) statHatPoster() {
 
 
 func statHatPoster() {
 func statHatPoster() {
 
 
+	qCounter := metrics.Get("queries").(metrics.Meter)
 	lastQueryCount := qCounter.Count()
 	lastQueryCount := qCounter.Count()
 	stathatGroups := append(serverGroups, "total", serverID)
 	stathatGroups := append(serverGroups, "total", serverID)
 	suffix := strings.Join(stathatGroups, ",")
 	suffix := strings.Join(stathatGroups, ",")

+ 5 - 4
zone.go

@@ -1,10 +1,11 @@
 package main
 package main
 
 
 import (
 import (
-	"github.com/abh/dns"
-	"github.com/abh/go-metrics"
 	"strings"
 	"strings"
 	"time"
 	"time"
+
+	"github.com/abh/dns"
+	"github.com/abh/go-metrics"
 )
 )
 
 
 type ZoneOptions struct {
 type ZoneOptions struct {
@@ -45,8 +46,8 @@ type Label struct {
 type labels map[string]*Label
 type labels map[string]*Label
 
 
 type ZoneMetrics struct {
 type ZoneMetrics struct {
-	Queries     *metrics.StandardMeter
-	EdnsQueries *metrics.StandardMeter
+	Queries     metrics.Meter
+	EdnsQueries metrics.Meter
 	LabelStats  *zoneLabelStats
 	LabelStats  *zoneLabelStats
 	ClientStats *zoneLabelStats
 	ClientStats *zoneLabelStats
 }
 }