stats.go 1002 B

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