From 95fe294f7da8741aaa5d4eeae1d5581dd8695bf5 Mon Sep 17 00:00:00 2001 From: yusing Date: Fri, 28 Mar 2025 08:08:49 +0800 Subject: [PATCH] feat: add AgentProvider implementation and integrate with provider types --- internal/route/provider/agent.go | 34 +++++++++++++++++++ internal/route/provider/provider.go | 13 +++++-- .../route/provider/types/provider_type.go | 1 + 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 internal/route/provider/agent.go diff --git a/internal/route/provider/agent.go b/internal/route/provider/agent.go new file mode 100644 index 0000000..c4dd88d --- /dev/null +++ b/internal/route/provider/agent.go @@ -0,0 +1,34 @@ +package provider + +import ( + "github.com/rs/zerolog" + "github.com/yusing/go-proxy/agent/pkg/agent" + "github.com/yusing/go-proxy/internal/gperr" + "github.com/yusing/go-proxy/internal/route" + "github.com/yusing/go-proxy/internal/watcher" +) + +type AgentProvider struct { + *agent.AgentConfig + docker ProviderImpl +} + +func (p *AgentProvider) ShortName() string { + return p.AgentConfig.Name() +} + +func (p *AgentProvider) NewWatcher() watcher.Watcher { + return p.docker.NewWatcher() +} + +func (p *AgentProvider) IsExplicitOnly() bool { + return p.docker.IsExplicitOnly() +} + +func (p *AgentProvider) loadRoutesImpl() (route.Routes, gperr.Error) { + return p.docker.loadRoutesImpl() +} + +func (p *AgentProvider) Logger() *zerolog.Logger { + return p.docker.Logger() +} diff --git a/internal/route/provider/provider.go b/internal/route/provider/provider.go index eed8ff2..ffdf049 100644 --- a/internal/route/provider/provider.go +++ b/internal/route/provider/provider.go @@ -7,6 +7,7 @@ import ( "time" "github.com/rs/zerolog" + "github.com/yusing/go-proxy/agent/pkg/agent" "github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/route" "github.com/yusing/go-proxy/internal/route/provider/types" @@ -65,8 +66,15 @@ func NewDockerProvider(name string, dockerHost string) *Provider { return p } +func NewAgentProvider(cfg *agent.AgentConfig) *Provider { + p := newProvider(types.ProviderTypeAgent) + agent := &AgentProvider{ + AgentConfig: cfg, + docker: DockerProviderImpl(cfg.Name(), cfg.FakeDockerHost()), + } + p.ProviderImpl = agent p.watcher = p.NewWatcher() - return + return p } func (p *Provider) GetType() types.ProviderType { @@ -78,7 +86,7 @@ func (p *Provider) MarshalText() ([]byte, error) { return []byte(p.String()), nil } -func (p *Provider) startRoute(parent task.Parent, r *route.Route) E.Error { +func (p *Provider) startRoute(parent task.Parent, r *route.Route) gperr.Error { err := r.Start(parent) if err != nil { delete(p.routes, r.Alias) @@ -150,6 +158,7 @@ func (p *Provider) loadRoutes() (routes route.Routes, err gperr.Error) { delete(routes, alias) continue } + r.FinalizeHomepageConfig() } return routes, errs.Error() } diff --git a/internal/route/provider/types/provider_type.go b/internal/route/provider/types/provider_type.go index 2907762..6447e39 100644 --- a/internal/route/provider/types/provider_type.go +++ b/internal/route/provider/types/provider_type.go @@ -5,4 +5,5 @@ type ProviderType string const ( ProviderTypeDocker ProviderType = "docker" ProviderTypeFile ProviderType = "file" + ProviderTypeAgent ProviderType = "agent" )