stats.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package store
  2. import (
  3. "encoding/json"
  4. "sync/atomic"
  5. )
  6. const (
  7. SetSuccess = 100
  8. SetFail = 101
  9. DeleteSuccess = 102
  10. DeleteFail = 103
  11. UpdateSuccess = 104
  12. UpdateFail = 105
  13. TestAndSetSuccess = 106
  14. TestAndSetFail = 107
  15. GetSuccess = 110
  16. GetFail = 111
  17. ExpireCount = 112
  18. )
  19. type Stats struct {
  20. // Number of get requests
  21. GetSuccess uint64 `json:"getsSuccess"`
  22. GetFail uint64 `json:"getsFail"`
  23. // Number of sets requests
  24. SetSuccess uint64 `json:"setsSuccess"`
  25. SetFail uint64 `json:"setsFail"`
  26. // Number of delete requests
  27. DeleteSuccess uint64 `json:"deleteSuccess"`
  28. DeleteFail uint64 `json:"deleteFail"`
  29. // Number of update requests
  30. UpdateSuccess uint64 `json:"updateSuccess"`
  31. UpdateFail uint64 `json:"updateFail"`
  32. // Number of testAndSet requests
  33. TestAndSetSuccess uint64 `json:"testAndSetSuccess"`
  34. TestAndSetFail uint64 `json:"testAndSetFail"`
  35. ExpireCount uint64 `json:"expireCount"`
  36. Watchers uint64 `json:"watchers"`
  37. }
  38. func newStats() *Stats {
  39. s := new(Stats)
  40. return s
  41. }
  42. func (s *Stats) clone() *Stats {
  43. return &Stats{s.GetSuccess, s.GetFail, s.SetSuccess, s.SetFail,
  44. s.DeleteSuccess, s.DeleteFail, s.UpdateSuccess, s.UpdateFail,
  45. s.TestAndSetSuccess, s.TestAndSetFail, s.Watchers, s.ExpireCount}
  46. }
  47. // Status() return the statistics info of etcd storage its recent start
  48. func (s *Stats) toJson() []byte {
  49. b, _ := json.Marshal(s)
  50. return b
  51. }
  52. func (s *Stats) TotalReads() uint64 {
  53. return s.GetSuccess + s.GetFail
  54. }
  55. func (s *Stats) TotalWrites() uint64 {
  56. return s.SetSuccess + s.SetFail +
  57. s.DeleteSuccess + s.DeleteFail +
  58. s.TestAndSetSuccess + s.TestAndSetFail +
  59. s.UpdateSuccess + s.UpdateFail
  60. }
  61. func (s *Stats) Inc(field int) {
  62. switch field {
  63. case SetSuccess:
  64. atomic.AddUint64(&s.SetSuccess, 1)
  65. case SetFail:
  66. atomic.AddUint64(&s.SetFail, 1)
  67. case DeleteSuccess:
  68. atomic.AddUint64(&s.DeleteSuccess, 1)
  69. case DeleteFail:
  70. atomic.AddUint64(&s.DeleteFail, 1)
  71. case GetSuccess:
  72. atomic.AddUint64(&s.GetSuccess, 1)
  73. case GetFail:
  74. atomic.AddUint64(&s.GetFail, 1)
  75. case UpdateSuccess:
  76. atomic.AddUint64(&s.UpdateSuccess, 1)
  77. case UpdateFail:
  78. atomic.AddUint64(&s.UpdateFail, 1)
  79. case TestAndSetSuccess:
  80. atomic.AddUint64(&s.TestAndSetSuccess, 1)
  81. case TestAndSetFail:
  82. atomic.AddUint64(&s.TestAndSetFail, 1)
  83. case ExpireCount:
  84. atomic.AddUint64(&s.ExpireCount, 1)
  85. }
  86. }