update limiter
This commit is contained in:
parent
50cf4edd1f
commit
e8071d9b65
@ -6,12 +6,14 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
mdutil "github.com/go-gost/core/metadata/util"
|
mdutil "github.com/go-gost/core/metadata/util"
|
||||||
"github.com/go-gost/x/config"
|
"github.com/go-gost/x/config"
|
||||||
xlimiter "github.com/go-gost/x/limiter"
|
"github.com/go-gost/x/limiter/conn"
|
||||||
|
"github.com/go-gost/x/limiter/traffic"
|
||||||
mdx "github.com/go-gost/x/metadata"
|
mdx "github.com/go-gost/x/metadata"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
)
|
)
|
||||||
@ -275,29 +277,48 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
|
|||||||
delete(mh, "hosts")
|
delete(mh, "hosts")
|
||||||
}
|
}
|
||||||
|
|
||||||
in := mdutil.GetString(md, "limiter.rate.in")
|
in := mdutil.GetString(md, "limiter.in")
|
||||||
out := mdutil.GetString(md, "limiter.rate.out")
|
out := mdutil.GetString(md, "limiter.out")
|
||||||
cin := mdutil.GetString(md, "limiter.rate.conn.in")
|
cin := mdutil.GetString(md, "limiter.conn.in")
|
||||||
cout := mdutil.GetString(md, "limiter.rate.conn.out")
|
cout := mdutil.GetString(md, "limiter.conn.out")
|
||||||
if in != "" || cin != "" {
|
if in != "" || cin != "" {
|
||||||
limiter := &config.LimiterConfig{
|
limiter := &config.LimiterConfig{
|
||||||
Name: fmt.Sprintf("limiter-%d", len(cfg.Limiters)),
|
Name: fmt.Sprintf("limiter-%d", len(cfg.Limiters)),
|
||||||
Rate: &config.RateLimiterConfig{},
|
|
||||||
}
|
}
|
||||||
if in != "" {
|
if in != "" {
|
||||||
limiter.Rate.Limits = append(limiter.Rate.Limits,
|
limiter.Limits = append(limiter.Limits,
|
||||||
fmt.Sprintf("%s %s %s", xlimiter.GlobalLimitKey, in, out))
|
fmt.Sprintf("%s %s %s", traffic.GlobalLimitKey, in, out))
|
||||||
}
|
}
|
||||||
if cin != "" {
|
if cin != "" {
|
||||||
limiter.Rate.Limits = append(limiter.Rate.Limits,
|
limiter.Limits = append(limiter.Limits,
|
||||||
fmt.Sprintf("%s %s %s", xlimiter.ConnLimitKey, cin, cout))
|
fmt.Sprintf("%s %s %s", traffic.ConnLimitKey, cin, cout))
|
||||||
}
|
}
|
||||||
service.Limiter = limiter.Name
|
service.Limiter = limiter.Name
|
||||||
cfg.Limiters = append(cfg.Limiters, limiter)
|
cfg.Limiters = append(cfg.Limiters, limiter)
|
||||||
delete(mh, "limiter.rate.in")
|
delete(mh, "limiter.in")
|
||||||
delete(mh, "limiter.rate.out")
|
delete(mh, "limiter.out")
|
||||||
delete(mh, "limiter.rate.conn.in")
|
delete(mh, "limiter.conn.in")
|
||||||
delete(mh, "limiter.rate.conn.out")
|
delete(mh, "limiter.conn.out")
|
||||||
|
}
|
||||||
|
|
||||||
|
if climit := mdutil.GetInt(md, "climiter"); climit > 0 {
|
||||||
|
limiter := &config.LimiterConfig{
|
||||||
|
Name: fmt.Sprintf("climiter-%d", len(cfg.CLimiters)),
|
||||||
|
Limits: []string{fmt.Sprintf("%s %d", conn.GlobalLimitKey, climit)},
|
||||||
|
}
|
||||||
|
service.CLimiter = limiter.Name
|
||||||
|
cfg.CLimiters = append(cfg.CLimiters, limiter)
|
||||||
|
delete(mh, "climiter")
|
||||||
|
}
|
||||||
|
|
||||||
|
if rlimit := mdutil.GetFloat(md, "rlimiter"); rlimit > 0 {
|
||||||
|
limiter := &config.LimiterConfig{
|
||||||
|
Name: fmt.Sprintf("rlimiter-%d", len(cfg.RLimiters)),
|
||||||
|
Limits: []string{fmt.Sprintf("%s %s", conn.GlobalLimitKey, strconv.FormatFloat(rlimit, 'f', -1, 64))},
|
||||||
|
}
|
||||||
|
service.RLimiter = limiter.Name
|
||||||
|
cfg.RLimiters = append(cfg.RLimiters, limiter)
|
||||||
|
delete(mh, "rlimiter")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,9 +71,23 @@ func buildService(cfg *config.Config) (services []service.Service) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, rlimiterCfg := range cfg.Limiters {
|
for _, limiterCfg := range cfg.Limiters {
|
||||||
if h := parsing.ParseRateLimiter(rlimiterCfg); h != nil {
|
if h := parsing.ParseTrafficLimiter(limiterCfg); h != nil {
|
||||||
if err := registry.RateLimiterRegistry().Register(rlimiterCfg.Name, h); err != nil {
|
if err := registry.TrafficLimiterRegistry().Register(limiterCfg.Name, h); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, limiterCfg := range cfg.CLimiters {
|
||||||
|
if h := parsing.ParseConnLimiter(limiterCfg); h != nil {
|
||||||
|
if err := registry.ConnLimiterRegistry().Register(limiterCfg.Name, h); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, limiterCfg := range cfg.RLimiters {
|
||||||
|
if h := parsing.ParseRateLimiter(limiterCfg); h != nil {
|
||||||
|
if err := registry.RateLimiterRegistry().Register(limiterCfg.Name, h); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
go.mod
4
go.mod
@ -5,8 +5,8 @@ go 1.18
|
|||||||
replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20211111114238-98168dcec14a
|
replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20211111114238-98168dcec14a
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/go-gost/core v0.0.0-20220908143917-e7a104651a75
|
github.com/go-gost/core v0.0.0-20220914115321-50d443049f3b
|
||||||
github.com/go-gost/x v0.0.0-20220908144104-999707db199f
|
github.com/go-gost/x v0.0.0-20220914120035-01d7dc77c67a
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
8
go.sum
8
go.sum
@ -98,8 +98,8 @@ github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ
|
|||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gost/core v0.0.0-20220908143917-e7a104651a75 h1:8DoQErtmgR9pRajWTswswLgaqOprJtkz/iC+2oOe24g=
|
github.com/go-gost/core v0.0.0-20220914115321-50d443049f3b h1:fWUPYFp0W/6GEhL0wrURGPQN2AQHhf4IZKiALJJOJh8=
|
||||||
github.com/go-gost/core v0.0.0-20220908143917-e7a104651a75/go.mod h1:bHVbCS9da6XtKNYMkMUVcck5UqDDUkyC37erVfs4GXQ=
|
github.com/go-gost/core v0.0.0-20220914115321-50d443049f3b/go.mod h1:bHVbCS9da6XtKNYMkMUVcck5UqDDUkyC37erVfs4GXQ=
|
||||||
github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s=
|
github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s=
|
||||||
github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc=
|
github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc=
|
||||||
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04=
|
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04=
|
||||||
@ -108,8 +108,8 @@ github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7 h1:itaaJhQJ19kUXEB
|
|||||||
github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
||||||
github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I=
|
github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I=
|
||||||
github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs=
|
github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs=
|
||||||
github.com/go-gost/x v0.0.0-20220908144104-999707db199f h1:VAHBiNtm2EuXFMrXYaQNZK7PEV+GoXIntM7/HVX4omc=
|
github.com/go-gost/x v0.0.0-20220914120035-01d7dc77c67a h1:eq3whATyaFYmwTb4LspCOlIvWT5PFZlzPm+ZMZxTBCU=
|
||||||
github.com/go-gost/x v0.0.0-20220908144104-999707db199f/go.mod h1:dybZlkfP8/WB6j4703l5SwdEnTe68vgcZ+HEStzgORM=
|
github.com/go-gost/x v0.0.0-20220914120035-01d7dc77c67a/go.mod h1:jILEGMQKVQDNGVbPqV985vv+/x9xYUbXSOkYP8ynjsU=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||||
|
Loading…
Reference in New Issue
Block a user