Explorar o código

Use a go-metrics Meter for the global query count

Ask Bjørn Hansen %!s(int64=12) %!d(string=hai) anos
pai
achega
c780624756
Modificáronse 5 ficheiros con 18 adicións e 19 borrados
  1. 0 2
      geodns.go
  2. 4 2
      metrics.go
  3. 6 11
      monitor.go
  4. 6 2
      serve.go
  5. 2 2
      stathat.go

+ 0 - 2
geodns.go

@@ -17,7 +17,6 @@ package main
 */
 */
 
 
 import (
 import (
-	"expvar"
 	"flag"
 	"flag"
 	"log"
 	"log"
 	"net"
 	"net"
@@ -37,7 +36,6 @@ var serverIP string
 var serverGroups []string
 var serverGroups []string
 
 
 var timeStarted = time.Now()
 var timeStarted = time.Now()
-var qCounter = expvar.NewInt("qCounter")
 
 
 var (
 var (
 	flagconfig      = flag.String("config", "./dns/", "directory of zone files")
 	flagconfig      = flag.String("config", "./dns/", "directory of zone files")

+ 4 - 2
metrics.go

@@ -8,9 +8,11 @@ import (
 	"time"
 	"time"
 )
 )
 
 
+var qCounter = metrics.NewMeter()
+
 func metricsPoster() {
 func metricsPoster() {
 
 
-	lastQueryCount := expVarToInt64(qCounter)
+	lastQueryCount := qCounter.Count()
 
 
 	queries := metrics.NewMeter()
 	queries := metrics.NewMeter()
 	metrics.Register("queries", queries)
 	metrics.Register("queries", queries)
@@ -30,7 +32,7 @@ func metricsPoster() {
 
 
 		// log.Println("updating metrics")
 		// log.Println("updating metrics")
 
 
-		current := expVarToInt64(qCounter)
+		current := qCounter.Count()
 		newQueries := current - lastQueryCount
 		newQueries := current - lastQueryCount
 		lastQueryCount = current
 		lastQueryCount = current
 
 

+ 6 - 11
monitor.go

@@ -3,7 +3,6 @@ package main
 import (
 import (
 	"code.google.com/p/go.net/websocket"
 	"code.google.com/p/go.net/websocket"
 	"encoding/json"
 	"encoding/json"
-	"expvar"
 	"fmt"
 	"fmt"
 	"github.com/abh/go-metrics"
 	"github.com/abh/go-metrics"
 	"html/template"
 	"html/template"
@@ -138,10 +137,10 @@ func initialStatus() string {
 func logStatus() {
 func logStatus() {
 	log.Println(initialStatus())
 	log.Println(initialStatus())
 	// Does not impact performance too much
 	// Does not impact performance too much
-	lastQueryCount := expVarToInt64(qCounter)
+	lastQueryCount := qCounter.Count()
 
 
 	for {
 	for {
-		current := expVarToInt64(qCounter)
+		current := qCounter.Count()
 		newQueries := current - lastQueryCount
 		newQueries := current - lastQueryCount
 		lastQueryCount = current
 		lastQueryCount = current
 
 
@@ -160,17 +159,18 @@ func monitor(zones Zones) {
 	go hub.run()
 	go hub.run()
 	go httpHandler(zones)
 	go httpHandler(zones)
 
 
-	lastQueryCount := expVarToInt64(qCounter)
+	lastQueryCount := qCounter.Count()
 
 
 	for {
 	for {
-		current := expVarToInt64(qCounter)
+		current := qCounter.Count()
 		newQueries := current - lastQueryCount
 		newQueries := current - lastQueryCount
 		lastQueryCount = current
 		lastQueryCount = current
 
 
 		status := map[string]string{}
 		status := map[string]string{}
 		status["up"] = strconv.Itoa(int(time.Since(timeStarted).Seconds()))
 		status["up"] = strconv.Itoa(int(time.Since(timeStarted).Seconds()))
-		status["qs"] = qCounter.String()
+		status["qs"] = strconv.FormatInt(qCounter.Count(), 10)
 		status["qps"] = strconv.FormatInt(newQueries, 10)
 		status["qps"] = strconv.FormatInt(newQueries, 10)
+		status["qps1"] = fmt.Sprintf("%.3f", qCounter.Rate1())
 
 
 		message, err := json.Marshal(status)
 		message, err := json.Marshal(status)
 
 
@@ -300,8 +300,3 @@ func httpHandler(zones Zones) {
 
 
 	log.Fatal(http.ListenAndServe(*flaghttp, nil))
 	log.Fatal(http.ListenAndServe(*flaghttp, nil))
 }
 }
-
-func expVarToInt64(i *expvar.Int) (j int64) {
-	j, _ = strconv.ParseInt(i.String(), 10, 64)
-	return
-}

+ 6 - 2
serve.go

@@ -2,6 +2,7 @@ package main
 
 
 import (
 import (
 	"encoding/json"
 	"encoding/json"
+	"fmt"
 	"github.com/abh/geodns/countries"
 	"github.com/abh/geodns/countries"
 	"github.com/miekg/dns"
 	"github.com/miekg/dns"
 	"log"
 	"log"
@@ -27,8 +28,10 @@ func serve(w dns.ResponseWriter, req *dns.Msg, z *Zone) {
 	logPrintf("[zone %s] incoming %s %s %d from %s\n", z.Origin, req.Question[0].Name,
 	logPrintf("[zone %s] incoming %s %s %d from %s\n", z.Origin, req.Question[0].Name,
 		dns.TypeToString[qtype], req.MsgHdr.Id, w.RemoteAddr())
 		dns.TypeToString[qtype], req.MsgHdr.Id, w.RemoteAddr())
 
 
-	qCounter.Add(1)
+	// Global meter
+	qCounter.Mark(1)
 
 
+	// Zone meter
 	z.Metrics.Queries.Mark(1)
 	z.Metrics.Queries.Mark(1)
 
 
 	logPrintln("Got request", req)
 	logPrintln("Got request", req)
@@ -167,7 +170,8 @@ func statusRR(z *Zone) []dns.RR {
 		status["h"] = hostname
 		status["h"] = hostname
 	}
 	}
 	status["up"] = strconv.Itoa(int(time.Since(timeStarted).Seconds()))
 	status["up"] = strconv.Itoa(int(time.Since(timeStarted).Seconds()))
-	status["qs"] = qCounter.String()
+	status["qs"] = strconv.FormatInt(qCounter.Count(), 10)
+	status["qps1"] = fmt.Sprintf("%.4f", qCounter.Rate1())
 
 
 	js, err := json.Marshal(status)
 	js, err := json.Marshal(status)
 
 

+ 2 - 2
stathat.go

@@ -10,7 +10,7 @@ import (
 
 
 func statHatPoster() {
 func statHatPoster() {
 
 
-	lastQueryCount := expVarToInt64(qCounter)
+	lastQueryCount := qCounter.Count()
 	stathatGroups := append(serverGroups, "total", serverId)
 	stathatGroups := append(serverGroups, "total", serverId)
 	suffix := strings.Join(stathatGroups, ",")
 	suffix := strings.Join(stathatGroups, ",")
 	// stathat.Verbose = true
 	// stathat.Verbose = true
@@ -25,7 +25,7 @@ func statHatPoster() {
 
 
 		log.Println("Posting to stathat")
 		log.Println("Posting to stathat")
 
 
-		current := expVarToInt64(qCounter)
+		current := qCounter.Count()
 		newQueries := current - lastQueryCount
 		newQueries := current - lastQueryCount
 		lastQueryCount = current
 		lastQueryCount = current