stats.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package core
  2. import (
  3. "sync"
  4. )
  5. type StatCounter interface {
  6. Value() int64
  7. Set(int64) int64
  8. Add(int64) int64
  9. }
  10. type StatManager interface {
  11. Feature
  12. RegisterCounter(string) (StatCounter, error)
  13. GetCounter(string) StatCounter
  14. }
  15. type syncStatManager struct {
  16. sync.RWMutex
  17. StatManager
  18. }
  19. func (s *syncStatManager) Start() error {
  20. s.RLock()
  21. defer s.RUnlock()
  22. if s.StatManager == nil {
  23. return nil
  24. }
  25. return s.StatManager.Start()
  26. }
  27. func (s *syncStatManager) Close() error {
  28. s.RLock()
  29. defer s.RUnlock()
  30. if s.StatManager == nil {
  31. return nil
  32. }
  33. return s.StatManager.Close()
  34. }
  35. func (s *syncStatManager) RegisterCounter(name string) (StatCounter, error) {
  36. s.RLock()
  37. defer s.RUnlock()
  38. if s.StatManager == nil {
  39. return nil, newError("StatManager not set.")
  40. }
  41. return s.StatManager.RegisterCounter(name)
  42. }
  43. func (s *syncStatManager) GetCounter(name string) StatCounter {
  44. s.RLock()
  45. defer s.RUnlock()
  46. if s.StatManager == nil {
  47. return nil
  48. }
  49. return s.StatManager.GetCounter(name)
  50. }
  51. func (s *syncStatManager) Set(m StatManager) {
  52. s.Lock()
  53. defer s.Unlock()
  54. s.StatManager = m
  55. }