refactor(config): restructured with better concurrency and error handling, reduced cross referencing

This commit is contained in:
yusing
2025-10-09 01:02:24 +08:00
parent d08be872a0
commit cab68807ee
25 changed files with 720 additions and 623 deletions

View File

@@ -0,0 +1,42 @@
package statequery
import (
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/types"
)
type RouteProviderListResponse struct {
ShortName string `json:"short_name"`
FullName string `json:"full_name"`
} // @name RouteProvider
func DumpRouteProviders() map[string]types.RouteProvider {
state := config.ActiveState.Load()
entries := make(map[string]types.RouteProvider, state.NumProviders())
for _, p := range state.IterProviders() {
entries[p.ShortName()] = p
}
return entries
}
func RouteProviderList() []RouteProviderListResponse {
state := config.ActiveState.Load()
list := make([]RouteProviderListResponse, 0, state.NumProviders())
for _, p := range state.IterProviders() {
list = append(list, RouteProviderListResponse{
ShortName: p.ShortName(),
FullName: p.String(),
})
}
return list
}
func SearchRoute(alias string) types.Route {
state := config.ActiveState.Load()
for _, p := range state.IterProviders() {
if r, ok := p.GetRoute(alias); ok {
return r
}
}
return nil
}

View File

@@ -0,0 +1,38 @@
package statequery
import (
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/types"
)
type Statistics struct {
Total uint16 `json:"total"`
ReverseProxies types.RouteStats `json:"reverse_proxies"`
Streams types.RouteStats `json:"streams"`
Providers map[string]types.ProviderStats `json:"providers"`
}
func GetStatistics() Statistics {
state := config.ActiveState.Load()
var (
rps, streams types.RouteStats
total uint16
providerStats = make(map[string]types.ProviderStats)
)
for _, p := range state.IterProviders() {
stats := p.Statistics()
providerStats[p.ShortName()] = stats
rps.AddOther(stats.RPs)
streams.AddOther(stats.Streams)
total += stats.RPs.Total + stats.Streams.Total
}
return Statistics{
Total: total,
ReverseProxies: rps,
Streams: streams,
Providers: providerStats,
}
}