diff --git a/cmd/gost/cmd.go b/cmd/gost/cmd.go index 9bf41f0..a4cbf01 100644 --- a/cmd/gost/cmd.go +++ b/cmd/gost/cmd.go @@ -273,6 +273,22 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { cfg.Hosts = append(cfg.Hosts, hostsCfg) delete(mh, "hosts") } + + input := metadata.GetString(md, "limiter.input") + output := metadata.GetString(md, "limiter.output") + if input != "" || output != "" { + limiter := &config.LimiterConfig{ + Name: fmt.Sprintf("limiter-%d", len(cfg.Limiters)), + RateLimit: &config.RateLimitConfig{ + Input: input, + Output: output, + }, + } + service.Limiter = limiter.Name + cfg.Limiters = append(cfg.Limiters, limiter) + delete(mh, "limiter.input") + delete(mh, "limiter.output") + } } return cfg, nil diff --git a/cmd/gost/config.go b/cmd/gost/config.go index b0b4d39..df811b2 100644 --- a/cmd/gost/config.go +++ b/cmd/gost/config.go @@ -62,6 +62,7 @@ func buildService(cfg *config.Config) (services []service.Service) { } } } + for _, recorderCfg := range cfg.Recorders { if h := parsing.ParseRecorder(recorderCfg); h != nil { if err := registry.RecorderRegistry().Register(recorderCfg.Name, h); err != nil { @@ -70,6 +71,14 @@ func buildService(cfg *config.Config) (services []service.Service) { } } + for _, rlimiterCfg := range cfg.Limiters { + if h := parsing.ParseRateLimiter(rlimiterCfg); h != nil { + if err := registry.RateLimiterRegistry().Register(rlimiterCfg.Name, h); err != nil { + log.Fatal(err) + } + } + } + for _, chainCfg := range cfg.Chains { c, err := parsing.ParseChain(chainCfg) if err != nil {