timer.go 932 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package metrics
  2. //import "sync/atomic"
  3. type Timer interface {
  4. AddTiming(int64)
  5. Clear()
  6. Avg() int64
  7. Min() int64
  8. Max() int64
  9. Total() int64
  10. }
  11. func NewTimer() Timer {
  12. return &StandardTimer{
  13. avg: 0,
  14. min: 0,
  15. max: 0,
  16. total: 0,
  17. count: 0,
  18. }
  19. }
  20. func (this *StandardTimer) AddTiming(time int64) {
  21. if this.min > time {
  22. this.min = time
  23. }
  24. if this.max < time {
  25. this.max = time
  26. }
  27. this.total += time
  28. this.count++
  29. this.avg = this.total / this.count
  30. }
  31. func (this *StandardTimer) Clear() {
  32. this.avg = 0
  33. this.min = 0
  34. this.max = 0
  35. this.total = 0
  36. this.count = 0
  37. }
  38. func (this *StandardTimer) Avg() int64 {
  39. return this.avg
  40. }
  41. func (this *StandardTimer) Min() int64 {
  42. return this.min
  43. }
  44. func (this *StandardTimer) Max() int64 {
  45. return this.max
  46. }
  47. func (this *StandardTimer) Total() int64 {
  48. return this.total
  49. }
  50. type StandardTimer struct {
  51. total int64
  52. count int64
  53. avg int64
  54. min int64
  55. max int64
  56. }