only leader will return peer stats

release-0.4
Xiang Li 2013-09-08 20:48:33 -04:00
parent 44e8c234ed
commit 43cb2a353f
3 changed files with 18 additions and 15 deletions

View File

@ -31,7 +31,7 @@ func newEtcdServer(name string, urlStr string, listenHost string, tlsConf *TLSCo
// Start to listen and response etcd client command // Start to listen and response etcd client command
func (e *etcdServer) ListenAndServe() { 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" { if e.tlsConf.Scheme == "http" {
fatal(e.Server.ListenAndServe()) fatal(e.Server.ListenAndServe())

View File

@ -45,6 +45,7 @@ func newRaftServer(name string, url string, listenHost string, tlsConf *TLSConfi
version: raftVersion, version: raftVersion,
name: name, name: name,
url: url, url: url,
listenHost: listenHost,
tlsConf: tlsConf, tlsConf: tlsConf,
tlsInfo: tlsInfo, tlsInfo: tlsInfo,
peersStats: make(map[string]*raftPeerStats), peersStats: make(map[string]*raftPeerStats),
@ -148,7 +149,7 @@ func startAsFollower() {
// Start to listen and response raft command // Start to listen and response raft command
func (r *raftServer) startTransport(scheme string, tlsConf tls.Config) { 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() raftMux := http.NewServeMux()
@ -298,11 +299,14 @@ func (r *raftServer) Stats() []byte {
warn(err) 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 // Register commands to raft server

View File

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