mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 12:42:34 +02:00
155 lines
3.7 KiB
Go
155 lines
3.7 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/yusing/go-proxy/internal/common"
|
|
"github.com/yusing/go-proxy/internal/homepage"
|
|
route "github.com/yusing/go-proxy/internal/route"
|
|
"github.com/yusing/go-proxy/internal/route/entry"
|
|
proxy "github.com/yusing/go-proxy/internal/route/provider"
|
|
"github.com/yusing/go-proxy/internal/route/routes"
|
|
"github.com/yusing/go-proxy/internal/route/types"
|
|
"github.com/yusing/go-proxy/internal/utils/strutils"
|
|
)
|
|
|
|
func DumpEntries() map[string]*types.RawEntry {
|
|
entries := make(map[string]*types.RawEntry)
|
|
instance.providers.RangeAll(func(_ string, p *proxy.Provider) {
|
|
p.RangeRoutes(func(alias string, r *route.Route) {
|
|
entries[alias] = r.Entry
|
|
})
|
|
})
|
|
return entries
|
|
}
|
|
|
|
func DumpProviders() map[string]*proxy.Provider {
|
|
entries := make(map[string]*proxy.Provider)
|
|
instance.providers.RangeAll(func(name string, p *proxy.Provider) {
|
|
entries[name] = p
|
|
})
|
|
return entries
|
|
}
|
|
|
|
func HomepageConfig() homepage.Config {
|
|
var proto, port string
|
|
domains := instance.value.MatchDomains
|
|
cert, _ := instance.autocertProvider.GetCert(nil)
|
|
if cert != nil {
|
|
proto = "https"
|
|
port = common.ProxyHTTPSPort
|
|
} else {
|
|
proto = "http"
|
|
port = common.ProxyHTTPPort
|
|
}
|
|
|
|
hpCfg := homepage.NewHomePageConfig()
|
|
routes.GetHTTPRoutes().RangeAll(func(alias string, r types.HTTPRoute) {
|
|
en := r.RawEntry()
|
|
item := en.Homepage
|
|
if item == nil {
|
|
item = new(homepage.Item)
|
|
item.Show = true
|
|
}
|
|
|
|
if !item.IsEmpty() {
|
|
item.Show = true
|
|
}
|
|
|
|
if !item.Show {
|
|
return
|
|
}
|
|
|
|
if item.Name == "" {
|
|
item.Name = strutils.Title(
|
|
strings.ReplaceAll(
|
|
strings.ReplaceAll(alias, "-", " "),
|
|
"_", " ",
|
|
),
|
|
)
|
|
}
|
|
|
|
if instance.value.Homepage.UseDefaultCategories {
|
|
if en.Container != nil && item.Category == "" {
|
|
if category, ok := homepage.PredefinedCategories[en.Container.ImageName]; ok {
|
|
item.Category = category
|
|
}
|
|
}
|
|
|
|
if item.Category == "" {
|
|
if category, ok := homepage.PredefinedCategories[strings.ToLower(alias)]; ok {
|
|
item.Category = category
|
|
}
|
|
}
|
|
}
|
|
|
|
switch {
|
|
case entry.IsDocker(r):
|
|
if item.Category == "" {
|
|
item.Category = "Docker"
|
|
}
|
|
item.SourceType = string(proxy.ProviderTypeDocker)
|
|
case entry.UseLoadBalance(r):
|
|
if item.Category == "" {
|
|
item.Category = "Load-balanced"
|
|
}
|
|
item.SourceType = "loadbalancer"
|
|
default:
|
|
if item.Category == "" {
|
|
item.Category = "Others"
|
|
}
|
|
item.SourceType = string(proxy.ProviderTypeFile)
|
|
}
|
|
|
|
if item.URL == "" {
|
|
if len(domains) > 0 {
|
|
item.URL = fmt.Sprintf("%s://%s%s:%s", proto, strings.ToLower(alias), domains[0], port)
|
|
}
|
|
}
|
|
item.AltURL = r.TargetURL().String()
|
|
|
|
hpCfg.Add(item)
|
|
})
|
|
return hpCfg
|
|
}
|
|
|
|
func RoutesByAlias(typeFilter ...route.RouteType) map[string]any {
|
|
rts := make(map[string]any)
|
|
if len(typeFilter) == 0 || typeFilter[0] == "" {
|
|
typeFilter = []route.RouteType{route.RouteTypeReverseProxy, route.RouteTypeStream}
|
|
}
|
|
for _, t := range typeFilter {
|
|
switch t {
|
|
case route.RouteTypeReverseProxy:
|
|
routes.GetHTTPRoutes().RangeAll(func(alias string, r types.HTTPRoute) {
|
|
rts[alias] = r
|
|
})
|
|
case route.RouteTypeStream:
|
|
routes.GetStreamRoutes().RangeAll(func(alias string, r types.StreamRoute) {
|
|
rts[alias] = r
|
|
})
|
|
}
|
|
}
|
|
return rts
|
|
}
|
|
|
|
func Statistics() map[string]any {
|
|
nTotalStreams := 0
|
|
nTotalRPs := 0
|
|
providerStats := make(map[string]proxy.ProviderStats)
|
|
|
|
instance.providers.RangeAll(func(name string, p *proxy.Provider) {
|
|
stats := p.Statistics()
|
|
providerStats[name] = stats
|
|
|
|
nTotalRPs += stats.NumRPs
|
|
nTotalStreams += stats.NumStreams
|
|
})
|
|
|
|
return map[string]any{
|
|
"num_total_streams": nTotalStreams,
|
|
"num_total_reverse_proxies": nTotalRPs,
|
|
"providers": providerStats,
|
|
}
|
|
}
|