raft_server_stats.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package server
  2. import (
  3. "time"
  4. "github.com/coreos/go-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 (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) {
  25. ss.State = raft.Follower
  26. if leaderName != ss.LeaderInfo.Name {
  27. ss.LeaderInfo.Name = leaderName
  28. ss.LeaderInfo.startTime = time.Now()
  29. }
  30. ss.recvRateQueue.Insert(NewPackageStats(time.Now(), pkgSize))
  31. ss.RecvAppendRequestCnt++
  32. }
  33. func (ss *raftServerStats) SendAppendReq(pkgSize int) {
  34. now := time.Now()
  35. if ss.State != raft.Leader {
  36. ss.State = raft.Leader
  37. ss.LeaderInfo.Name = ss.Name
  38. ss.LeaderInfo.startTime = now
  39. }
  40. ss.sendRateQueue.Insert(NewPackageStats(now, pkgSize))
  41. ss.SendAppendRequestCnt++
  42. }