diff --git a/common/limiter/errors.go b/common/limiter/errors.go index 6f1d1fa..e3bd6c2 100644 --- a/common/limiter/errors.go +++ b/common/limiter/errors.go @@ -2,8 +2,6 @@ package limiter import "github.com/xtls/xray-core/common/errors" -type errPathObjHolder struct{} - func newError(values ...interface{}) *errors.Error { - return errors.New(values...).WithPathObj(errPathObjHolder{}) + return errors.New(values...) } diff --git a/common/limiter/limiter.go b/common/limiter/limiter.go index a23eb2e..62047a5 100644 --- a/common/limiter/limiter.go +++ b/common/limiter/limiter.go @@ -183,10 +183,10 @@ func (l *Limiter) GetUserBucket(tag string, email string, ip string) (limiter *r ipMap.Delete(ip) return nil, false, true } - go l.pushIP(email, ip, uid) + go l.pushIP(email, ip) } } else { - go l.pushIP(email, ip, uid) + go l.pushIP(email, ip) } } @@ -210,18 +210,18 @@ func (l *Limiter) GetUserBucket(tag string, email string, ip string) (limiter *r } // Push new IP to redis -func (l *Limiter) pushIP(email string, ip string, uid int) { +func (l *Limiter) pushIP(email string, ip string) { ctx, cancel := context.WithTimeout(context.Background(), time.Second*time.Duration(l.g.Timeout)) defer cancel() - if err := l.g.R.HSet(ctx, email, map[string]any{ip: uid}).Err(); err != nil { - newError(fmt.Sprintf("Redis: %v", err)).AtError().WriteToLog() + if err := l.g.R.HSet(ctx, email, map[string]any{ip: 0}).Err(); err != nil { + newError(fmt.Errorf("redis: %v", err)).AtError().WriteToLog() } // check ttl, if ttl == -1, then set expire time. if l.g.R.TTL(ctx, email).Val() == -1 { if err := l.g.R.Expire(ctx, email, time.Duration(l.g.Expiry)*time.Minute).Err(); err != nil { - newError(fmt.Sprintf("Redis: %v", err)).AtError().WriteToLog() + newError(fmt.Errorf("redis: %v", err)).AtError().WriteToLog() } } } diff --git a/service/controller/controller.go b/service/controller/controller.go index aed1c83..a3ec924 100644 --- a/service/controller/controller.go +++ b/service/controller/controller.go @@ -5,7 +5,6 @@ import ( "fmt" "log" "reflect" - "strconv" "sync" "time" @@ -654,7 +653,7 @@ func (c *Controller) globalLimitFetch() (err error) { inboundInfo := value.(*limiter.InboundInfo) for { - if emails, cursor, err = c.g.R.Scan(ctx, cursor, "*", 1000).Result(); err != nil { + if emails, cursor, err = c.g.R.Scan(ctx, cursor, "*", 10000).Result(); err != nil { newError(err).AtError().WriteToLog() } pipe := c.g.R.Pipeline() @@ -666,15 +665,14 @@ func (c *Controller) globalLimitFetch() (err error) { } if _, err := pipe.Exec(ctx); err != nil { - newError(fmt.Sprintf("Redis: %v", err)).AtError().WriteToLog() + newError(fmt.Errorf("redis: %v", err)).AtError().WriteToLog() } else { inboundInfo.GlobalOnlineIP = new(sync.Map) for k := range cmdMap { ips := cmdMap[k].Val() ipMap := new(sync.Map) for i := range ips { - uid, _ := strconv.Atoi(ips[i]) - ipMap.Store(i, uid) + ipMap.Store(i, 0) inboundInfo.GlobalOnlineIP.Store(k, ipMap) } }