mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-06-08 03:34:13 +08:00
Fix
This commit is contained in:
parent
40be0627f5
commit
847c80a1fe
@ -159,15 +159,11 @@ func (s *APIServer) getStats(writer http.ResponseWriter, request *http.Request)
|
|||||||
requireClear := chi.URLParam(request, "clear") == "true"
|
requireClear := chi.URLParam(request, "clear") == "true"
|
||||||
|
|
||||||
users := s.user.List()
|
users := s.user.List()
|
||||||
s.traffic.ReadUsers(users)
|
s.traffic.ReadUsers(users, requireClear)
|
||||||
for i := range users {
|
for i := range users {
|
||||||
users[i].Password = ""
|
users[i].Password = ""
|
||||||
}
|
}
|
||||||
uplinkBytes, downlinkBytes, uplinkPackets, downlinkPackets, tcpSessions, udpSessions := s.traffic.ReadGlobal()
|
uplinkBytes, downlinkBytes, uplinkPackets, downlinkPackets, tcpSessions, udpSessions := s.traffic.ReadGlobal(requireClear)
|
||||||
|
|
||||||
if requireClear {
|
|
||||||
s.traffic.Clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
render.JSON(writer, request, render.M{
|
render.JSON(writer, request, render.M{
|
||||||
"uplinkBytes": uplinkBytes,
|
"uplinkBytes": uplinkBytes,
|
||||||
|
@ -136,80 +136,77 @@ func (s *TrafficManager) TrackPacketConnection(conn N.PacketConn, metadata adapt
|
|||||||
func (s *TrafficManager) ReadUser(user *UserObject) {
|
func (s *TrafficManager) ReadUser(user *UserObject) {
|
||||||
s.userAccess.Lock()
|
s.userAccess.Lock()
|
||||||
defer s.userAccess.Unlock()
|
defer s.userAccess.Unlock()
|
||||||
s.readUser(user)
|
s.readUser(user, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TrafficManager) readUser(user *UserObject) {
|
func (s *TrafficManager) readUser(user *UserObject, swap bool) {
|
||||||
if counter, loaded := s.userUplink[user.UserName]; loaded {
|
if counter, loaded := s.userUplink[user.UserName]; loaded {
|
||||||
user.UplinkBytes = counter.Load()
|
if swap {
|
||||||
|
user.UplinkBytes = counter.Swap(0)
|
||||||
|
} else {
|
||||||
|
user.UplinkBytes = counter.Load()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if counter, loaded := s.userDownlink[user.UserName]; loaded {
|
if counter, loaded := s.userDownlink[user.UserName]; loaded {
|
||||||
user.DownlinkBytes = counter.Load()
|
if swap {
|
||||||
|
user.DownlinkBytes = counter.Swap(0)
|
||||||
|
} else {
|
||||||
|
user.DownlinkBytes = counter.Load()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if counter, loaded := s.userUplinkPackets[user.UserName]; loaded {
|
if counter, loaded := s.userUplinkPackets[user.UserName]; loaded {
|
||||||
user.UplinkPackets = counter.Load()
|
if swap {
|
||||||
|
user.UplinkPackets = counter.Swap(0)
|
||||||
|
} else {
|
||||||
|
user.UplinkPackets = counter.Load()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if counter, loaded := s.userDownlinkPackets[user.UserName]; loaded {
|
if counter, loaded := s.userDownlinkPackets[user.UserName]; loaded {
|
||||||
user.DownlinkPackets = counter.Load()
|
if swap {
|
||||||
|
user.DownlinkPackets = counter.Swap(0)
|
||||||
|
} else {
|
||||||
|
user.DownlinkPackets = counter.Load()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if counter, loaded := s.userTCPSessions[user.UserName]; loaded {
|
if counter, loaded := s.userTCPSessions[user.UserName]; loaded {
|
||||||
user.TCPSessions = counter.Load()
|
if swap {
|
||||||
|
user.TCPSessions = counter.Swap(0)
|
||||||
|
} else {
|
||||||
|
user.TCPSessions = counter.Load()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if counter, loaded := s.userUDPSessions[user.UserName]; loaded {
|
if counter, loaded := s.userUDPSessions[user.UserName]; loaded {
|
||||||
user.UDPSessions = counter.Load()
|
if swap {
|
||||||
|
user.UDPSessions = counter.Swap(0)
|
||||||
|
} else {
|
||||||
|
user.UDPSessions = counter.Load()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TrafficManager) ReadUsers(users []*UserObject) {
|
func (s *TrafficManager) ReadUsers(users []*UserObject, swap bool) {
|
||||||
s.userAccess.Lock()
|
s.userAccess.Lock()
|
||||||
defer s.userAccess.Unlock()
|
defer s.userAccess.Unlock()
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
s.readUser(user)
|
s.readUser(user, swap)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TrafficManager) ReadGlobal() (
|
func (s *TrafficManager) ReadGlobal(swap bool) (uplinkBytes int64, downlinkBytes int64, uplinkPackets int64, downlinkPackets int64, tcpSessions int64, udpSessions int64) {
|
||||||
uplinkBytes int64,
|
if swap {
|
||||||
downlinkBytes int64,
|
return s.globalUplink.Swap(0),
|
||||||
uplinkPackets int64,
|
s.globalDownlink.Swap(0),
|
||||||
downlinkPackets int64,
|
s.globalUplinkPackets.Swap(0),
|
||||||
tcpSessions int64,
|
s.globalDownlinkPackets.Swap(0),
|
||||||
udpSessions int64,
|
s.globalTCPSessions.Swap(0),
|
||||||
) {
|
s.globalUDPSessions.Swap(0)
|
||||||
return s.globalUplink.Load(),
|
} else {
|
||||||
s.globalDownlink.Load(),
|
return s.globalUplink.Load(),
|
||||||
s.globalUplinkPackets.Load(),
|
s.globalDownlink.Load(),
|
||||||
s.globalDownlinkPackets.Load(),
|
s.globalUplinkPackets.Load(),
|
||||||
s.globalTCPSessions.Load(),
|
s.globalDownlinkPackets.Load(),
|
||||||
s.globalUDPSessions.Load()
|
s.globalTCPSessions.Load(),
|
||||||
}
|
s.globalUDPSessions.Load()
|
||||||
|
|
||||||
func (s *TrafficManager) Clear() {
|
|
||||||
s.globalUplink.Store(0)
|
|
||||||
s.globalDownlink.Store(0)
|
|
||||||
s.globalUplinkPackets.Store(0)
|
|
||||||
s.globalDownlinkPackets.Store(0)
|
|
||||||
s.globalTCPSessions.Store(0)
|
|
||||||
s.globalUDPSessions.Store(0)
|
|
||||||
s.userAccess.Lock()
|
|
||||||
defer s.userAccess.Unlock()
|
|
||||||
for _, counter := range s.userUplink {
|
|
||||||
counter.Store(0)
|
|
||||||
}
|
|
||||||
for _, counter := range s.userDownlink {
|
|
||||||
counter.Store(0)
|
|
||||||
}
|
|
||||||
for _, counter := range s.userUplinkPackets {
|
|
||||||
counter.Store(0)
|
|
||||||
}
|
|
||||||
for _, counter := range s.userDownlinkPackets {
|
|
||||||
counter.Store(0)
|
|
||||||
}
|
|
||||||
for _, counter := range s.userTCPSessions {
|
|
||||||
counter.Store(0)
|
|
||||||
}
|
|
||||||
for _, counter := range s.userUDPSessions {
|
|
||||||
counter.Store(0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user