sampling sending rate

release-0.4
Xiang Li 2013-08-20 16:33:54 -07:00
parent 896c944c7e
commit f75c309d26
2 changed files with 47 additions and 16 deletions

View File

@ -2,6 +2,7 @@ package main
import (
"bytes"
"container/list"
"crypto/tls"
"encoding/binary"
"encoding/json"
@ -40,14 +41,17 @@ func newRaftServer(name string, url string, tlsConf *TLSConfig, tlsInfo *TLSInfo
check(err)
return &raftServer{
Server: server,
version: raftVersion,
name: name,
url: url,
tlsConf: tlsConf,
tlsInfo: tlsInfo,
peersStats: make(map[string]*raftPeerStats),
serverStats: &raftServerStats{},
Server: server,
version: raftVersion,
name: name,
url: url,
tlsConf: tlsConf,
tlsInfo: tlsInfo,
peersStats: make(map[string]*raftPeerStats),
serverStats: &raftServerStats{
StartTime: time.Now(),
sendRateQueue: list.New(),
},
}
}
@ -272,6 +276,18 @@ func joinByMachine(s *raft.Server, machine string, scheme string) error {
}
func (r *raftServer) Stats() []byte {
r.serverStats.LeaderUptime = time.Now().Sub(r.serverStats.leaderStartTime).String()
queue := r.serverStats.sendRateQueue
frontValue, _ := queue.Front().Value.(time.Time)
backValue, _ := queue.Back().Value.(time.Time)
sampleDuration := backValue.Sub(frontValue)
r.serverStats.SendingRate = float64(queue.Len()) / float64(sampleDuration) * float64(time.Second)
sBytes, _ := json.Marshal(r.serverStats)
pBytes, _ := json.Marshal(r.peersStats)

View File

@ -1,20 +1,27 @@
package main
import (
"container/list"
"math"
"time"
"github.com/coreos/go-raft"
)
type runtimeStats struct {
}
type raftServerStats struct {
State string
StartTime time.Time
Leader string
leaderStartTime time.Time
LeaderUptime time.Duration
RecvAppendRequestCnt uint64
SendAppendRequestCnt uint64
State string
StartTime time.Time
Leader string
leaderStartTime time.Time
LeaderUptime string
RecvAppendRequestCnt uint64
SendAppendRequestCnt uint64
SendAppendReqeustRate uint64
sendRateQueue *list.List
SendingRate float64
}
func (ss *raftServerStats) RecvAppendReq(leaderName string) {
@ -28,10 +35,18 @@ func (ss *raftServerStats) RecvAppendReq(leaderName string) {
}
func (ss *raftServerStats) SendAppendReq() {
now := time.Now()
if ss.State != raft.Leader {
ss.State = raft.Leader
ss.Leader = r.Name()
ss.leaderStartTime = time.Now()
ss.leaderStartTime = now
}
if ss.sendRateQueue.Len() < 200 {
ss.sendRateQueue.PushBack(now)
} else {
ss.sendRateQueue.PushBack(now)
ss.sendRateQueue.Remove(ss.sendRateQueue.Front())
}
ss.SendAppendRequestCnt++