| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | package coreimport (	"sync")type StatCounter interface {	Value() int64	Set(int64) int64	Add(int64) int64}type StatManager interface {	Feature	RegisterCounter(string) (StatCounter, error)	GetCounter(string) StatCounter}type syncStatManager struct {	sync.RWMutex	StatManager}func (s *syncStatManager) Start() error {	s.RLock()	defer s.RUnlock()	if s.StatManager == nil {		return newError("StatManager not set.")	}	return s.StatManager.Start()}func (s *syncStatManager) Close() error {	s.RLock()	defer s.RUnlock()	if s.StatManager == nil {		return newError("StatManager not set.")	}	return s.StatManager.Close()}func (s *syncStatManager) RegisterCounter(name string) (StatCounter, error) {	s.RLock()	defer s.RUnlock()	if s.StatManager == nil {		return nil, newError("StatManager not set.")	}	return s.StatManager.RegisterCounter(name)}func (s *syncStatManager) GetCounter(name string) StatCounter {	s.RLock()	defer s.RUnlock()	if s.StatManager == nil {		return nil	}	return s.StatManager.GetCounter(name)}func (s *syncStatManager) Set(m StatManager) {	s.Lock()	defer s.Unlock()	s.StatManager = m}
 |