github.com/matm/etcd@v0.3.1-0.20140328024009-5b4a473f1453/server/raft_server_stats.go (about) 1 package server 2 3 import ( 4 "time" 5 6 "github.com/coreos/etcd/third_party/github.com/goraft/raft" 7 ) 8 9 type raftServerStats struct { 10 Name string `json:"name"` 11 State string `json:"state"` 12 StartTime time.Time `json:"startTime"` 13 14 LeaderInfo struct { 15 Name string `json:"leader"` 16 Uptime string `json:"uptime"` 17 startTime time.Time 18 } `json:"leaderInfo"` 19 20 RecvAppendRequestCnt uint64 `json:"recvAppendRequestCnt,"` 21 RecvingPkgRate float64 `json:"recvPkgRate,omitempty"` 22 RecvingBandwidthRate float64 `json:"recvBandwidthRate,omitempty"` 23 24 SendAppendRequestCnt uint64 `json:"sendAppendRequestCnt"` 25 SendingPkgRate float64 `json:"sendPkgRate,omitempty"` 26 SendingBandwidthRate float64 `json:"sendBandwidthRate,omitempty"` 27 28 sendRateQueue *statsQueue 29 recvRateQueue *statsQueue 30 } 31 32 func NewRaftServerStats(name string) *raftServerStats { 33 return &raftServerStats{ 34 Name: name, 35 StartTime: time.Now(), 36 sendRateQueue: &statsQueue{ 37 back: -1, 38 }, 39 recvRateQueue: &statsQueue{ 40 back: -1, 41 }, 42 } 43 } 44 45 func (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) { 46 ss.State = raft.Follower 47 if leaderName != ss.LeaderInfo.Name { 48 ss.LeaderInfo.Name = leaderName 49 ss.LeaderInfo.startTime = time.Now() 50 } 51 52 ss.recvRateQueue.Insert(NewPackageStats(time.Now(), pkgSize)) 53 ss.RecvAppendRequestCnt++ 54 } 55 56 func (ss *raftServerStats) SendAppendReq(pkgSize int) { 57 now := time.Now() 58 59 if ss.State != raft.Leader { 60 ss.State = raft.Leader 61 ss.LeaderInfo.Name = ss.Name 62 ss.LeaderInfo.startTime = now 63 } 64 65 ss.sendRateQueue.Insert(NewPackageStats(now, pkgSize)) 66 67 ss.SendAppendRequestCnt++ 68 }