mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-04 02:42:34 +02:00
fix route provider name
This commit is contained in:
parent
e5a32d4982
commit
8aa831804b
7 changed files with 45 additions and 31 deletions
|
@ -59,6 +59,8 @@ func List(cfg config.ConfigInstance, w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if which is "all" or empty, return map[string]Route of all routes
|
||||||
|
// otherwise, return a single Route with alias which or nil if not found.
|
||||||
func listRoute(which string) any {
|
func listRoute(which string) any {
|
||||||
if which == "" || which == "all" {
|
if which == "" || which == "all" {
|
||||||
return routes.RoutesByAlias()
|
return routes.RoutesByAlias()
|
||||||
|
|
|
@ -269,9 +269,9 @@ func (cfg *Config) loadRouteProviders(providers *types.Providers) E.Error {
|
||||||
errs.Add(E.PrependSubject(filename, err))
|
errs.Add(E.PrependSubject(filename, err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
cfg.providers.Store(p.GetName(), p)
|
cfg.providers.Store(p.String(), p)
|
||||||
if len(p.GetName()) > lenLongestName {
|
if len(p.String()) > lenLongestName {
|
||||||
lenLongestName = len(p.GetName())
|
lenLongestName = len(p.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for name, dockerHost := range providers.Docker {
|
for name, dockerHost := range providers.Docker {
|
||||||
|
@ -280,16 +280,16 @@ func (cfg *Config) loadRouteProviders(providers *types.Providers) E.Error {
|
||||||
errs.Add(E.PrependSubject(name, err))
|
errs.Add(E.PrependSubject(name, err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
cfg.providers.Store(p.GetName(), p)
|
cfg.providers.Store(p.String(), p)
|
||||||
if len(p.GetName()) > lenLongestName {
|
if len(p.String()) > lenLongestName {
|
||||||
lenLongestName = len(p.GetName())
|
lenLongestName = len(p.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cfg.providers.RangeAllParallel(func(_ string, p *proxy.Provider) {
|
cfg.providers.RangeAllParallel(func(_ string, p *proxy.Provider) {
|
||||||
if err := p.LoadRoutes(); err != nil {
|
if err := p.LoadRoutes(); err != nil {
|
||||||
errs.Add(err.Subject(p.String()))
|
errs.Add(err.Subject(p.String()))
|
||||||
}
|
}
|
||||||
results.Addf("%-"+strconv.Itoa(lenLongestName)+"s %d routes", p.GetName(), p.NumRoutes())
|
results.Addf("%-"+strconv.Itoa(lenLongestName)+"s %d routes", p.String(), p.NumRoutes())
|
||||||
})
|
})
|
||||||
logger.Info().Msg(results.String())
|
logger.Info().Msg(results.String())
|
||||||
return errs.Error()
|
return errs.Error()
|
||||||
|
|
|
@ -18,8 +18,8 @@ func (cfg *Config) DumpEntries() map[string]*types.RawEntry {
|
||||||
|
|
||||||
func (cfg *Config) DumpProviders() map[string]*provider.Provider {
|
func (cfg *Config) DumpProviders() map[string]*provider.Provider {
|
||||||
entries := make(map[string]*provider.Provider)
|
entries := make(map[string]*provider.Provider)
|
||||||
cfg.providers.RangeAll(func(name string, p *provider.Provider) {
|
cfg.providers.RangeAll(func(_ string, p *provider.Provider) {
|
||||||
entries[name] = p
|
entries[p.ShortName()] = p
|
||||||
})
|
})
|
||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,9 @@ func (cfg *Config) Statistics() map[string]any {
|
||||||
nTotalRPs := 0
|
nTotalRPs := 0
|
||||||
providerStats := make(map[string]provider.ProviderStats)
|
providerStats := make(map[string]provider.ProviderStats)
|
||||||
|
|
||||||
cfg.providers.RangeAll(func(name string, p *provider.Provider) {
|
cfg.providers.RangeAll(func(_ string, p *provider.Provider) {
|
||||||
stats := p.Statistics()
|
stats := p.Statistics()
|
||||||
providerStats[name] = stats
|
providerStats[p.ShortName()] = stats
|
||||||
|
|
||||||
nTotalRPs += stats.NumRPs
|
nTotalRPs += stats.NumRPs
|
||||||
nTotalStreams += stats.NumStreams
|
nTotalStreams += stats.NumStreams
|
||||||
|
|
|
@ -19,7 +19,6 @@ import (
|
||||||
|
|
||||||
type DockerProvider struct {
|
type DockerProvider struct {
|
||||||
name, dockerHost string
|
name, dockerHost string
|
||||||
ExplicitOnly bool
|
|
||||||
l zerolog.Logger
|
l zerolog.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,14 +29,13 @@ const (
|
||||||
|
|
||||||
var ErrAliasRefIndexOutOfRange = E.New("index out of range")
|
var ErrAliasRefIndexOutOfRange = E.New("index out of range")
|
||||||
|
|
||||||
func DockerProviderImpl(name, dockerHost string, explicitOnly bool) (ProviderImpl, error) {
|
func DockerProviderImpl(name, dockerHost string) (ProviderImpl, error) {
|
||||||
if dockerHost == common.DockerHostFromEnv {
|
if dockerHost == common.DockerHostFromEnv {
|
||||||
dockerHost = common.GetEnvString("DOCKER_HOST", client.DefaultDockerHost)
|
dockerHost = common.GetEnvString("DOCKER_HOST", client.DefaultDockerHost)
|
||||||
}
|
}
|
||||||
return &DockerProvider{
|
return &DockerProvider{
|
||||||
name,
|
name,
|
||||||
dockerHost,
|
dockerHost,
|
||||||
explicitOnly,
|
|
||||||
logger.With().Str("type", "docker").Str("name", name).Logger(),
|
logger.With().Str("type", "docker").Str("name", name).Logger(),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -46,6 +44,14 @@ func (p *DockerProvider) String() string {
|
||||||
return "docker@" + p.name
|
return "docker@" + p.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *DockerProvider) ShortName() string {
|
||||||
|
return p.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *DockerProvider) IsExplicitOnly() bool {
|
||||||
|
return p.name[len(p.name)-1] == '!'
|
||||||
|
}
|
||||||
|
|
||||||
func (p *DockerProvider) Logger() *zerolog.Logger {
|
func (p *DockerProvider) Logger() *zerolog.Logger {
|
||||||
return &p.l
|
return &p.l
|
||||||
}
|
}
|
||||||
|
@ -92,7 +98,7 @@ func (p *DockerProvider) loadRoutesImpl() (route.Routes, E.Error) {
|
||||||
|
|
||||||
func (p *DockerProvider) shouldIgnore(container *docker.Container) bool {
|
func (p *DockerProvider) shouldIgnore(container *docker.Container) bool {
|
||||||
return container.IsExcluded ||
|
return container.IsExcluded ||
|
||||||
!container.IsExplicit && p.ExplicitOnly ||
|
!container.IsExplicit && p.IsExplicitOnly() ||
|
||||||
!container.IsExplicit && container.IsDatabase ||
|
!container.IsExplicit && container.IsDatabase ||
|
||||||
strings.HasSuffix(container.ContainerName, "-old")
|
strings.HasSuffix(container.ContainerName, "-old")
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,12 @@ func makeEntries(cont *types.Container, dockerHostIP ...string) route.RawEntries
|
||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExplicitOnly(t *testing.T) {
|
||||||
|
p, err := NewDockerProvider("a!", "")
|
||||||
|
ExpectNoError(t, err)
|
||||||
|
ExpectTrue(t, p.IsExplicitOnly())
|
||||||
|
}
|
||||||
|
|
||||||
func TestApplyLabel(t *testing.T) {
|
func TestApplyLabel(t *testing.T) {
|
||||||
pathPatterns := `
|
pathPatterns := `
|
||||||
- /
|
- /
|
||||||
|
|
|
@ -3,6 +3,7 @@ package provider
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/yusing/go-proxy/internal/common"
|
"github.com/yusing/go-proxy/internal/common"
|
||||||
|
@ -48,6 +49,14 @@ func (p *FileProvider) String() string {
|
||||||
return p.fileName
|
return p.fileName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *FileProvider) ShortName() string {
|
||||||
|
return strings.Split(p.fileName, ".")[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *FileProvider) IsExplicitOnly() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (p *FileProvider) Logger() *zerolog.Logger {
|
func (p *FileProvider) Logger() *zerolog.Logger {
|
||||||
return &p.l
|
return &p.l
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
|
@ -21,7 +20,6 @@ type (
|
||||||
Provider struct {
|
Provider struct {
|
||||||
ProviderImpl `json:"-"`
|
ProviderImpl `json:"-"`
|
||||||
|
|
||||||
name string
|
|
||||||
t types.ProviderType
|
t types.ProviderType
|
||||||
routes R.Routes
|
routes R.Routes
|
||||||
|
|
||||||
|
@ -29,6 +27,8 @@ type (
|
||||||
}
|
}
|
||||||
ProviderImpl interface {
|
ProviderImpl interface {
|
||||||
fmt.Stringer
|
fmt.Stringer
|
||||||
|
ShortName() string
|
||||||
|
IsExplicitOnly() bool
|
||||||
loadRoutesImpl() (R.Routes, E.Error)
|
loadRoutesImpl() (R.Routes, E.Error)
|
||||||
NewWatcher() W.Watcher
|
NewWatcher() W.Watcher
|
||||||
Logger() *zerolog.Logger
|
Logger() *zerolog.Logger
|
||||||
|
@ -46,9 +46,8 @@ const (
|
||||||
|
|
||||||
var ErrEmptyProviderName = errors.New("empty provider name")
|
var ErrEmptyProviderName = errors.New("empty provider name")
|
||||||
|
|
||||||
func newProvider(name string, t types.ProviderType) *Provider {
|
func newProvider(t types.ProviderType) *Provider {
|
||||||
return &Provider{
|
return &Provider{
|
||||||
name: name,
|
|
||||||
t: t,
|
t: t,
|
||||||
routes: R.NewRoutes(),
|
routes: R.NewRoutes(),
|
||||||
}
|
}
|
||||||
|
@ -59,7 +58,7 @@ func NewFileProvider(filename string) (p *Provider, err error) {
|
||||||
if name == "" {
|
if name == "" {
|
||||||
return nil, ErrEmptyProviderName
|
return nil, ErrEmptyProviderName
|
||||||
}
|
}
|
||||||
p = newProvider(strings.ReplaceAll(name, ".", "_"), types.ProviderTypeFile)
|
p = newProvider(types.ProviderTypeFile)
|
||||||
p.ProviderImpl, err = FileProviderImpl(filename)
|
p.ProviderImpl, err = FileProviderImpl(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -73,8 +72,8 @@ func NewDockerProvider(name string, dockerHost string) (p *Provider, err error)
|
||||||
return nil, ErrEmptyProviderName
|
return nil, ErrEmptyProviderName
|
||||||
}
|
}
|
||||||
|
|
||||||
p = newProvider(name, types.ProviderTypeDocker)
|
p = newProvider(types.ProviderTypeDocker)
|
||||||
p.ProviderImpl, err = DockerProviderImpl(name, dockerHost, p.IsExplicitOnly())
|
p.ProviderImpl, err = DockerProviderImpl(name, dockerHost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -82,14 +81,6 @@ func NewDockerProvider(name string, dockerHost string) (p *Provider, err error)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Provider) IsExplicitOnly() bool {
|
|
||||||
return p.name[len(p.name)-1] == '!'
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *Provider) GetName() string {
|
|
||||||
return p.name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *Provider) GetType() types.ProviderType {
|
func (p *Provider) GetType() types.ProviderType {
|
||||||
return p.t
|
return p.t
|
||||||
}
|
}
|
||||||
|
@ -111,7 +102,7 @@ func (p *Provider) startRoute(parent task.Parent, r *R.Route) E.Error {
|
||||||
|
|
||||||
// Start implements task.TaskStarter.
|
// Start implements task.TaskStarter.
|
||||||
func (p *Provider) Start(parent task.Parent) E.Error {
|
func (p *Provider) Start(parent task.Parent) E.Error {
|
||||||
t := parent.Subtask("provider."+p.name, false)
|
t := parent.Subtask("provider."+p.String(), false)
|
||||||
|
|
||||||
// routes and event queue will stop on config reload
|
// routes and event queue will stop on config reload
|
||||||
errs := p.routes.CollectErrorsParallel(
|
errs := p.routes.CollectErrorsParallel(
|
||||||
|
|
Loading…
Add table
Reference in a new issue