raft_server_stats.go 1.6 KB

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