sampling sending rate
parent
896c944c7e
commit
f75c309d26
|
@ -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)
|
||||
|
|
|
@ -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++
|
||||
|
|
Loading…
Reference in New Issue