raft_server_stats.go 1.8 KB

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