diff --git a/internal/config/query.go b/internal/config/query.go index 1960a70..cbe4de0 100644 --- a/internal/config/query.go +++ b/internal/config/query.go @@ -2,36 +2,25 @@ package config import ( config "github.com/yusing/go-proxy/internal/config/types" - "github.com/yusing/go-proxy/internal/route" "github.com/yusing/go-proxy/internal/route/provider" ) -func (cfg *Config) DumpRoutes() map[string]*route.Route { - entries := make(map[string]*route.Route) - cfg.providers.RangeAll(func(_ string, p *provider.Provider) { - p.RangeRoutes(func(alias string, r *route.Route) { - entries[alias] = r - }) - }) - return entries -} - func (cfg *Config) DumpRouteProviders() map[string]*provider.Provider { - entries := make(map[string]*provider.Provider) - cfg.providers.RangeAll(func(_ string, p *provider.Provider) { + entries := make(map[string]*provider.Provider, cfg.providers.Size()) + for _, p := range cfg.providers.Range { entries[p.ShortName()] = p - }) + } return entries } func (cfg *Config) RouteProviderList() []config.RouteProviderListResponse { - var list []config.RouteProviderListResponse - cfg.providers.RangeAll(func(_ string, p *provider.Provider) { + list := make([]config.RouteProviderListResponse, 0, cfg.providers.Size()) + for _, p := range cfg.providers.Range { list = append(list, config.RouteProviderListResponse{ ShortName: p.ShortName(), FullName: p.String(), }) - }) + } return list } @@ -40,13 +29,13 @@ func (cfg *Config) Statistics() map[string]any { var total uint16 providerStats := make(map[string]provider.ProviderStats) - cfg.providers.RangeAll(func(_ string, p *provider.Provider) { + for _, p := range cfg.providers.Range { stats := p.Statistics() providerStats[p.ShortName()] = stats rps.AddOther(stats.RPs) streams.AddOther(stats.Streams) total += stats.RPs.Total + stats.Streams.Total - }) + } return map[string]any{ "total": total, diff --git a/internal/route/provider/provider.go b/internal/route/provider/provider.go index d0b6c54..258f7d3 100644 --- a/internal/route/provider/provider.go +++ b/internal/route/provider/provider.go @@ -137,9 +137,11 @@ func (p *Provider) Start(parent task.Parent) gperr.Error { return nil } -func (p *Provider) RangeRoutes(do func(string, *route.Route)) { +func (p *Provider) IterRoutes(yield func(string, *route.Route) bool) { for alias, r := range p.routes { - do(alias, r) + if !yield(alias, r) { + break + } } }