fix display url of file server rouie, refactor

This commit is contained in:
yusing 2025-04-10 06:17:16 +08:00
parent 3cd9e47fd0
commit d1524c1013

View file

@ -4,9 +4,8 @@ import (
"fmt" "fmt"
"strings" "strings"
"github.com/docker/docker/api/types/container"
"github.com/yusing/go-proxy/agent/pkg/agent" "github.com/yusing/go-proxy/agent/pkg/agent"
"github.com/yusing/go-proxy/internal"
"github.com/yusing/go-proxy/internal/docker" "github.com/yusing/go-proxy/internal/docker"
"github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/gperr"
"github.com/yusing/go-proxy/internal/homepage" "github.com/yusing/go-proxy/internal/homepage"
@ -53,8 +52,9 @@ type (
Provider string `json:"provider,omitempty"` Provider string `json:"provider,omitempty"`
// private fields // private fields
LisURL *net.URL `json:"lurl,omitempty"` LisURL *net.URL `json:"lurl,omitempty"`
ProxyURL *net.URL `json:"purl,omitempty"` ProxyURL *net.URL `json:"purl,omitempty"`
Idlewatcher *idlewatcher.Config `json:"idlewatcher,omitempty"` Idlewatcher *idlewatcher.Config `json:"idlewatcher,omitempty"`
impl route.Route impl route.Route
@ -83,26 +83,24 @@ func (r *Route) Validate() (err gperr.Error) {
errs := gperr.NewBuilder("entry validation failed") errs := gperr.NewBuilder("entry validation failed")
switch r.Scheme { if r.Scheme == route.SchemeFileServer {
case route.SchemeFileServer:
r.impl, err = NewFileServer(r) r.impl, err = NewFileServer(r)
if err != nil { if err != nil {
errs.Add(err) errs.Add(err)
} }
r.ProxyURL = gperr.Collect(errs, net.ParseURL, "file://"+r.Root)
r.Host = ""
r.Port.Proxy = 0
} else {
switch r.Scheme {
case route.SchemeHTTP, route.SchemeHTTPS: case route.SchemeHTTP, route.SchemeHTTPS:
if r.Port.Listening != 0 { if r.Port.Listening != 0 {
errs.Addf("unexpected listening port for %s scheme", r.Scheme) errs.Addf("unexpected listening port for %s scheme", r.Scheme)
} }
fallthrough
case route.SchemeTCP, route.SchemeUDP: case route.SchemeTCP, route.SchemeUDP:
r.LisURL = gperr.Collect(errs, net.ParseURL, fmt.Sprintf("%s://:%d", r.Scheme, r.Port.Listening)) r.LisURL = gperr.Collect(errs, net.ParseURL, fmt.Sprintf("%s://:%d", r.Scheme, r.Port.Listening))
fallthrough
default:
if r.LoadBalance != nil && r.LoadBalance.Link == "" {
r.LoadBalance = nil
} }
r.ProxyURL = gperr.Collect(errs, net.ParseURL, fmt.Sprintf("%s://%s:%d", r.Scheme, r.Host, r.Port.Proxy)) r.ProxyURL = gperr.Collect(errs, net.ParseURL, fmt.Sprintf("%s://%s:%d", r.Scheme, r.Host, r.Port.Proxy))
r.Idlewatcher = gperr.Collect(errs, idlewatcher.ValidateConfig, r.Container)
} }
if !r.UseHealthCheck() && (r.UseLoadBalance() || r.UseIdleWatcher()) { if !r.UseHealthCheck() && (r.UseLoadBalance() || r.UseIdleWatcher()) {
@ -371,16 +369,8 @@ func (r *Route) Finalize() {
} }
} }
if isDocker && cont.IdleTimeout != "" { if r.LoadBalance != nil && r.LoadBalance.Link == "" {
if cont.WakeTimeout == "" { r.LoadBalance = nil
cont.WakeTimeout = common.WakeTimeoutDefault
}
if cont.StopTimeout == "" {
cont.StopTimeout = common.StopTimeoutDefault
}
if cont.StopMethod == "" {
cont.StopMethod = common.StopMethodDefault
}
} }
} }
@ -433,7 +423,7 @@ func (r *Route) FinalizeHomepageConfig() {
} }
} }
func lowestPort(ports map[int]container.Port) (res int) { func lowestPort(ports docker.PortMapping) (res int) {
cmp := (uint16)(65535) cmp := (uint16)(65535)
for port, v := range ports { for port, v := range ports {
if v.PrivatePort < cmp { if v.PrivatePort < cmp {