raft_server_stats.go 1.7 KB

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