Browse Source

only leader will return peer stats

Xiang Li 12 years ago
parent
commit
43cb2a353f
3 changed files with 18 additions and 15 deletions
  1. 1 1
      etcd_server.go
  2. 8 4
      raft_server.go
  3. 9 10
      raft_stats.go

+ 1 - 1
etcd_server.go

@@ -31,7 +31,7 @@ func newEtcdServer(name string, urlStr string, listenHost string, tlsConf *TLSCo
 // Start to listen and response etcd client command
 func (e *etcdServer) ListenAndServe() {
 
-	infof("etcd server [%s:%s]", e.name, e.url)
+	infof("etcd server [name %s, listen on %s, advertised url %s]", e.name, e.Server.Addr, e.url)
 
 	if e.tlsConf.Scheme == "http" {
 		fatal(e.Server.ListenAndServe())

+ 8 - 4
raft_server.go

@@ -45,6 +45,7 @@ func newRaftServer(name string, url string, listenHost string, tlsConf *TLSConfi
 		version:    raftVersion,
 		name:       name,
 		url:        url,
+		listenHost: listenHost,
 		tlsConf:    tlsConf,
 		tlsInfo:    tlsInfo,
 		peersStats: make(map[string]*raftPeerStats),
@@ -148,7 +149,7 @@ func startAsFollower() {
 
 // Start to listen and response raft command
 func (r *raftServer) startTransport(scheme string, tlsConf tls.Config) {
-	infof("raft server [%s:%s]", r.name, r.listenHost)
+	infof("raft server [name %s, listen on %s, advertised url %s]", r.name, r.listenHost, r.url)
 
 	raftMux := http.NewServeMux()
 
@@ -298,11 +299,14 @@ func (r *raftServer) Stats() []byte {
 		warn(err)
 	}
 
-	pBytes, _ := json.Marshal(r.peersStats)
+	if r.State() == raft.Leader {
+		pBytes, _ := json.Marshal(r.peersStats)
 
-	b := append(sBytes, pBytes...)
+		b := append(sBytes, pBytes...)
+		return b
+	}
 
-	return b
+	return sBytes
 }
 
 // Register commands to raft server

+ 9 - 10
raft_stats.go

@@ -1,7 +1,6 @@
 package main
 
 import (
-	"fmt"
 	"math"
 	"sync"
 	"time"
@@ -13,14 +12,14 @@ const (
 	queueCapacity = 200
 )
 
-type runtimeStats struct {
-}
-
+// packageStats represent the stats we need for a package.
+// It has sending time and the size of the package.
 type packageStats struct {
 	sendingTime time.Time
 	size        int
 }
 
+// NewPackageStats creates a pacakgeStats and return the pointer to it.
 func NewPackageStats(now time.Time, size int) *packageStats {
 	return &packageStats{
 		sendingTime: now,
@@ -28,6 +27,7 @@ func NewPackageStats(now time.Time, size int) *packageStats {
 	}
 }
 
+// Time return the sending time of the package.
 func (ps *packageStats) Time() time.Time {
 	return ps.sendingTime
 }
@@ -38,13 +38,13 @@ type raftServerStats struct {
 	Leader       string    `json:"leader"`
 	LeaderUptime string    `json:"leaderUptime"`
 
-	RecvAppendRequestCnt uint64  `json:"recvAppendRequestCnt"`
-	RecvingPkgRate       float64 `json:"recvPkgRate"`
-	RecvingBandwidthRate float64 `json:"recvBandwidthRate"`
+	RecvAppendRequestCnt uint64  `json:"recvAppendRequestCnt,"`
+	RecvingPkgRate       float64 `json:"recvPkgRate,omitempty"`
+	RecvingBandwidthRate float64 `json:"recvBandwidthRate,omitempty"`
 
 	SendAppendRequestCnt uint64  `json:"sendAppendRequestCnt"`
-	SendingPkgRate       float64 `json:"sendPkgRate"`
-	SendingBandwidthRate float64 `json:"sendBandwidthRate"`
+	SendingPkgRate       float64 `json:"sendPkgRate,omitempty"`
+	SendingBandwidthRate float64 `json:"sendBandwidthRate,omitempty"`
 
 	leaderStartTime time.Time
 	sendRateQueue   *statsQueue
@@ -158,7 +158,6 @@ func (q *statsQueue) Insert(p *packageStats) {
 	q.items[q.back] = p
 	q.totalPkgSize += q.items[q.back].size
 
-	fmt.Println(q.front, q.back, q.size)
 }
 
 func (q *statsQueue) Rate() (float64, float64) {