From fe6a21a96cb8e06c7d71056f7d5c1e9fc144f3ca Mon Sep 17 00:00:00 2001 From: yuzuki999 Date: Wed, 7 Sep 2022 17:26:12 +0800 Subject: [PATCH] performance optimization --- core/core.go | 3 +++ core/user.go | 29 +++++++++++++++++------------ node/node.go | 2 +- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/core/core.go b/core/core.go index 591fb11..a4af062 100644 --- a/core/core.go +++ b/core/core.go @@ -12,6 +12,7 @@ import ( "github.com/xtls/xray-core/features/inbound" "github.com/xtls/xray-core/features/outbound" "github.com/xtls/xray-core/features/routing" + statsFeature "github.com/xtls/xray-core/features/stats" coreConf "github.com/xtls/xray-core/infra/conf" io "io/ioutil" "log" @@ -24,6 +25,7 @@ type Core struct { Server *core.Instance ihm inbound.Manager ohm outbound.Manager + shm statsFeature.Manager dispatcher *dispatcher.DefaultDispatcher } @@ -155,6 +157,7 @@ func (p *Core) Start() { if err := p.Server.Start(); err != nil { log.Panicf("Failed to start instance: %s", err) } + p.shm = p.Server.GetFeature(statsFeature.ManagerType()).(statsFeature.Manager) p.ihm = p.Server.GetFeature(inbound.ManagerType()).(inbound.Manager) p.ohm = p.Server.GetFeature(outbound.ManagerType()).(outbound.Manager) p.dispatcher = p.Server.GetFeature(routing.DispatcherType()).(*dispatcher.DefaultDispatcher) diff --git a/core/user.go b/core/user.go index 7231b4b..f6364f1 100644 --- a/core/user.go +++ b/core/user.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/Yuzuki616/V2bX/core/app/dispatcher" "github.com/xtls/xray-core/common/protocol" - "github.com/xtls/xray-core/features/stats" "github.com/xtls/xray-core/proxy" ) @@ -57,19 +56,25 @@ func (p *Core) RemoveUsers(users []string, tag string) error { return nil } -func (p *Core) GetUserTraffic(email string) (up int64, down int64) { +func (p *Core) GetUserTraffic(email string, reset bool) (up int64, down int64) { upName := "user>>>" + email + ">>>traffic>>>uplink" downName := "user>>>" + email + ">>>traffic>>>downlink" - statsManager := p.Server.GetFeature(stats.ManagerType()).(stats.Manager) - upCounter := statsManager.GetCounter(upName) - downCounter := statsManager.GetCounter(downName) - if upCounter != nil { - up = upCounter.Value() - upCounter.Set(0) - } - if downCounter != nil { - down = downCounter.Value() - downCounter.Set(0) + upCounter := p.shm.GetCounter(upName) + downCounter := p.shm.GetCounter(downName) + if reset { + if upCounter != nil { + up = upCounter.Set(0) + } + if downCounter != nil { + down = downCounter.Set(0) + } + } else { + if upCounter != nil { + up = upCounter.Value() + } + if downCounter != nil { + down = downCounter.Value() + } } return up, down } diff --git a/node/node.go b/node/node.go index 7c61593..62c339d 100644 --- a/node/node.go +++ b/node/node.go @@ -363,7 +363,7 @@ func (c *Node) userInfoMonitor() (err error) { // Get User traffic userTraffic := make([]panel.UserTraffic, 0) for i := range c.userList { - up, down := c.server.GetUserTraffic(c.buildUserTag(&(c.userList)[i])) + up, down := c.server.GetUserTraffic(c.buildUserTag(&(c.userList)[i]), true) if up > 0 || down > 0 { userTraffic = append(userTraffic, panel.UserTraffic{ UID: (c.userList)[i].UID,