Skip to content

Commit

Permalink
feat: not reset traffic when report failed
Browse files Browse the repository at this point in the history
  • Loading branch information
pocketW committed Aug 29, 2022
1 parent 8991284 commit f0610d0
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 12 deletions.
27 changes: 19 additions & 8 deletions service/controller/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/xtls/xray-core/core"
"github.com/xtls/xray-core/features/inbound"
"github.com/xtls/xray-core/features/outbound"
"github.com/xtls/xray-core/features/stats"
"github.com/xtls/xray-core/proxy"
)

Expand Down Expand Up @@ -102,21 +103,31 @@ func (c *Controller) removeUsers(users []string, tag string) error {
return nil
}

func (c *Controller) getTraffic(email string) (up int64, down int64) {
func (c *Controller) getTraffic(email string) (up int64, down int64, upCounter stats.Counter, downCounter stats.Counter) {
upName := "user>>>" + email + ">>>traffic>>>uplink"
downName := "user>>>" + email + ">>>traffic>>>downlink"
upCounter := c.stm.GetCounter(upName)
downCounter := c.stm.GetCounter(downName)
if upCounter != nil {
upCounter = c.stm.GetCounter(upName)
downCounter = c.stm.GetCounter(downName)
if upCounter != nil && upCounter.Value() != 0 {
up = upCounter.Value()
upCounter.Set(0)
} else {
upCounter = nil
}
if downCounter != nil {
if downCounter != nil && upCounter.Value() != 0 {
down = downCounter.Value()
downCounter.Set(0)
} else {
downCounter = nil
}
return up, down
return up, down, upCounter, downCounter
}

func (c *Controller) resetTraffic(upCounterList *[]stats.Counter, downCounterList *[]stats.Counter) {
for _, upCounter := range *upCounterList {
upCounter.Set(0)
}
for _, downCounter := range *downCounterList {
downCounter.Set(0)
}
}

func (c *Controller) AddInboundLimiter(tag string, nodeSpeedLimit uint64, userList *[]api.UserInfo) error {
Expand Down
23 changes: 19 additions & 4 deletions service/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -427,21 +427,36 @@ func (c *Controller) userInfoMonitor() (err error) {
}

// Get User traffic
userTraffic := make([]api.UserTraffic, 0)
var userTraffic []api.UserTraffic
var upCounterList []stats.Counter
var downCounterList []stats.Counter
for _, user := range *c.userList {
up, down := c.getTraffic(c.buildUserTag(&user))
up, down, upCounter, downCounter := c.getTraffic(c.buildUserTag(&user))
if up > 0 || down > 0 {
userTraffic = append(userTraffic, api.UserTraffic{
UID: user.UID,
Email: user.Email,
Upload: up,
Download: down})

if upCounter != nil {
upCounterList = append(upCounterList, upCounter)
}
if downCounter != nil {
downCounterList = append(downCounterList, downCounter)
}
}
}
if len(userTraffic) > 0 && !c.config.DisableUploadTraffic {
err = c.apiClient.ReportUserTraffic(&userTraffic)
if len(userTraffic) > 0 {
var err error // Define an empty error
if !c.config.DisableUploadTraffic {
err = c.apiClient.ReportUserTraffic(&userTraffic)
}
// If report traffic error, not clear the traffic
if err != nil {
log.Print(err)
} else {
c.resetTraffic(&upCounterList, &downCounterList)
}
}

Expand Down

0 comments on commit f0610d0

Please sign in to comment.