mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-21 16:01:22 +02:00
refactored some stuff, added healthcheck support, fixed 'include file' reload not showing in log
This commit is contained in:
@@ -103,7 +103,7 @@ func (cfg *Config) WatchChanges() {
|
||||
case <-cfg.watcherCtx.Done():
|
||||
return
|
||||
case <-cfg.reloadReq:
|
||||
if err := cfg.Reload(); err.HasError() {
|
||||
if err := cfg.Reload(); err != nil {
|
||||
cfg.l.Error(err)
|
||||
}
|
||||
}
|
||||
@@ -130,9 +130,9 @@ func (cfg *Config) WatchChanges() {
|
||||
}()
|
||||
}
|
||||
|
||||
func (cfg *Config) forEachRoute(do func(alias string, r R.Route, p *PR.Provider)) {
|
||||
func (cfg *Config) forEachRoute(do func(alias string, r *R.Route, p *PR.Provider)) {
|
||||
cfg.proxyProviders.RangeAll(func(_ string, p *PR.Provider) {
|
||||
p.RangeRoutes(func(a string, r R.Route) {
|
||||
p.RangeRoutes(func(a string, r *R.Route) {
|
||||
do(a, r, p)
|
||||
})
|
||||
})
|
||||
@@ -146,20 +146,20 @@ func (cfg *Config) load() (res E.NestedError) {
|
||||
defer cfg.l.Debug("loaded config")
|
||||
|
||||
data, err := E.Check(os.ReadFile(common.ConfigPath))
|
||||
if err.HasError() {
|
||||
if err != nil {
|
||||
b.Add(E.FailWith("read config", err))
|
||||
logrus.Fatal(b.Build())
|
||||
}
|
||||
|
||||
if !common.NoSchemaValidation {
|
||||
if err = Validate(data); err.HasError() {
|
||||
if err = Validate(data); err != nil {
|
||||
b.Add(E.FailWith("schema validation", err))
|
||||
logrus.Fatal(b.Build())
|
||||
}
|
||||
}
|
||||
|
||||
model := types.DefaultConfig()
|
||||
if err := E.From(yaml.Unmarshal(data, model)); err.HasError() {
|
||||
if err := E.From(yaml.Unmarshal(data, model)); err != nil {
|
||||
b.Add(E.FailWith("parse config", err))
|
||||
logrus.Fatal(b.Build())
|
||||
}
|
||||
@@ -182,7 +182,7 @@ func (cfg *Config) initAutoCert(autocertCfg *types.AutoCertConfig) (err E.Nested
|
||||
defer cfg.l.Debug("initialized autocert")
|
||||
|
||||
cfg.autocertProvider, err = autocert.NewConfig(autocertCfg).GetProvider()
|
||||
if err.HasError() {
|
||||
if err != nil {
|
||||
err = E.FailWith("autocert provider", err)
|
||||
}
|
||||
return
|
||||
@@ -220,12 +220,12 @@ func (cfg *Config) controlProviders(action string, do func(*PR.Provider) E.Neste
|
||||
errors := E.NewBuilder("errors in %s these providers", action)
|
||||
|
||||
cfg.proxyProviders.RangeAllParallel(func(name string, p *PR.Provider) {
|
||||
if err := do(p); err.HasError() {
|
||||
if err := do(p); err != nil {
|
||||
errors.Add(err.Subject(p))
|
||||
}
|
||||
})
|
||||
|
||||
if err := errors.Build(); err.HasError() {
|
||||
if err := errors.Build(); err != nil {
|
||||
cfg.l.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/yusing/go-proxy/internal/common"
|
||||
H "github.com/yusing/go-proxy/internal/homepage"
|
||||
"github.com/yusing/go-proxy/internal/homepage"
|
||||
PR "github.com/yusing/go-proxy/internal/proxy/provider"
|
||||
R "github.com/yusing/go-proxy/internal/route"
|
||||
"github.com/yusing/go-proxy/internal/types"
|
||||
@@ -15,8 +15,8 @@ import (
|
||||
|
||||
func (cfg *Config) DumpEntries() map[string]*types.RawEntry {
|
||||
entries := make(map[string]*types.RawEntry)
|
||||
cfg.forEachRoute(func(alias string, r R.Route, p *PR.Provider) {
|
||||
entries[alias] = r.Entry()
|
||||
cfg.forEachRoute(func(alias string, r *R.Route, p *PR.Provider) {
|
||||
entries[alias] = r.Entry
|
||||
})
|
||||
return entries
|
||||
}
|
||||
@@ -29,7 +29,7 @@ func (cfg *Config) DumpProviders() map[string]*PR.Provider {
|
||||
return entries
|
||||
}
|
||||
|
||||
func (cfg *Config) HomepageConfig() H.HomePageConfig {
|
||||
func (cfg *Config) HomepageConfig() homepage.Config {
|
||||
var proto, port string
|
||||
domains := cfg.value.MatchDomains
|
||||
cert, _ := cfg.autocertProvider.GetCert(nil)
|
||||
@@ -41,16 +41,16 @@ func (cfg *Config) HomepageConfig() H.HomePageConfig {
|
||||
port = common.ProxyHTTPPort
|
||||
}
|
||||
|
||||
hpCfg := H.NewHomePageConfig()
|
||||
cfg.forEachRoute(func(alias string, r R.Route, p *PR.Provider) {
|
||||
hpCfg := homepage.NewHomePageConfig()
|
||||
cfg.forEachRoute(func(alias string, r *R.Route, p *PR.Provider) {
|
||||
if !r.Started() {
|
||||
return
|
||||
}
|
||||
|
||||
entry := r.Entry()
|
||||
entry := r.Entry
|
||||
if entry.Homepage == nil {
|
||||
entry.Homepage = &H.HomePageItem{
|
||||
Show: r.Entry().IsExplicit || !p.IsExplicitOnly(),
|
||||
entry.Homepage = &homepage.Item{
|
||||
Show: r.Entry.IsExplicit || !p.IsExplicitOnly(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ func (cfg *Config) HomepageConfig() H.HomePageConfig {
|
||||
item.Show = true
|
||||
}
|
||||
|
||||
if !item.Show || r.Type() != R.RouteTypeReverseProxy {
|
||||
if !item.Show || r.Type != R.RouteTypeReverseProxy {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -99,19 +99,19 @@ func (cfg *Config) HomepageConfig() H.HomePageConfig {
|
||||
|
||||
func (cfg *Config) RoutesByAlias() map[string]U.SerializedObject {
|
||||
routes := make(map[string]U.SerializedObject)
|
||||
cfg.forEachRoute(func(alias string, r R.Route, p *PR.Provider) {
|
||||
cfg.forEachRoute(func(alias string, r *R.Route, p *PR.Provider) {
|
||||
if !r.Started() {
|
||||
return
|
||||
}
|
||||
obj, err := U.Serialize(r)
|
||||
if err.HasError() {
|
||||
if err != nil {
|
||||
cfg.l.Error(err)
|
||||
return
|
||||
}
|
||||
obj["provider"] = p.GetName()
|
||||
obj["type"] = string(r.Type())
|
||||
obj["type"] = string(r.Type)
|
||||
obj["started"] = r.Started()
|
||||
obj["raw"] = r.Entry()
|
||||
obj["raw"] = r.Entry
|
||||
routes[alias] = obj
|
||||
})
|
||||
return routes
|
||||
@@ -138,9 +138,9 @@ func (cfg *Config) Statistics() map[string]any {
|
||||
}
|
||||
}
|
||||
|
||||
func (cfg *Config) FindRoute(alias string) R.Route {
|
||||
func (cfg *Config) FindRoute(alias string) *R.Route {
|
||||
return F.MapFind(cfg.proxyProviders,
|
||||
func(p *PR.Provider) (R.Route, bool) {
|
||||
func(p *PR.Provider) (*R.Route, bool) {
|
||||
if route, ok := p.GetRoute(alias); ok {
|
||||
return route, true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user