1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-27 01:45:23 +00:00
v2fly/stats.go

72 lines
1.1 KiB
Go
Raw Normal View History

2018-03-30 17:56:59 +00:00
package core
import (
"sync"
)
type StatCounter interface {
Value() int64
2018-03-30 21:17:28 +00:00
Set(int64) int64
2018-03-30 17:56:59 +00:00
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 {
2018-03-31 08:30:12 +00:00
return nil
2018-03-30 17:56:59 +00:00
}
return s.StatManager.Start()
}
func (s *syncStatManager) Close() error {
s.RLock()
defer s.RUnlock()
if s.StatManager == nil {
2018-03-31 08:30:12 +00:00
return nil
2018-03-30 17:56:59 +00:00
}
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
}