From 9a5553a5b8ef7341aaa06b7d4814ff25a5bb13a1 Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 5 Apr 2025 13:31:09 +0800 Subject: [PATCH] refactor(provider): simplify provider initializations, initialize watcher only when needed --- internal/route/provider/provider.go | 48 ++++++++++------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/internal/route/provider/provider.go b/internal/route/provider/provider.go index ffdf049..0e60aca 100644 --- a/internal/route/provider/provider.go +++ b/internal/route/provider/provider.go @@ -3,7 +3,6 @@ package provider import ( "errors" "fmt" - "path" "time" "github.com/rs/zerolog" @@ -22,8 +21,6 @@ type ( t types.ProviderType routes route.Routes - - watcher W.Watcher } ProviderImpl interface { fmt.Stringer @@ -41,43 +38,31 @@ const ( var ErrEmptyProviderName = errors.New("empty provider name") -func newProvider(t types.ProviderType) *Provider { - return &Provider{t: t} -} - -func NewFileProvider(filename string) (p *Provider, err error) { - name := path.Base(filename) - if name == "" { - return nil, ErrEmptyProviderName +func NewFileProvider(filename string) *Provider { + return &Provider{ + t: types.ProviderTypeFile, + ProviderImpl: FileProviderImpl(filename), } - p = newProvider(types.ProviderTypeFile) - p.ProviderImpl, err = FileProviderImpl(filename) - if err != nil { - return nil, err - } - p.watcher = p.NewWatcher() - return } func NewDockerProvider(name string, dockerHost string) *Provider { - p := newProvider(types.ProviderTypeDocker) - p.ProviderImpl = DockerProviderImpl(name, dockerHost) - p.watcher = p.NewWatcher() - return p + return &Provider{ + t: types.ProviderTypeDocker, + ProviderImpl: DockerProviderImpl(name, dockerHost), + } } func NewAgentProvider(cfg *agent.AgentConfig) *Provider { - p := newProvider(types.ProviderTypeAgent) - agent := &AgentProvider{ - AgentConfig: cfg, - docker: DockerProviderImpl(cfg.Name(), cfg.FakeDockerHost()), + return &Provider{ + t: types.ProviderTypeAgent, + ProviderImpl: &AgentProvider{ + AgentConfig: cfg, + docker: DockerProviderImpl(cfg.Name(), cfg.FakeDockerHost()), + }, } - p.ProviderImpl = agent - p.watcher = p.NewWatcher() - return p } -func (p *Provider) GetType() types.ProviderType { +func (p *Provider) Type() types.ProviderType { return p.t } @@ -105,6 +90,7 @@ func (p *Provider) Start(parent task.Parent) gperr.Error { errs.Add(p.startRoute(t, r)) } + watcher := p.NewWatcher() eventQueue := events.NewEventQueue( t.Subtask("event_queue", false), providerEventFlushInterval, @@ -118,7 +104,7 @@ func (p *Provider) Start(parent task.Parent) gperr.Error { gperr.LogError("event error", err, p.Logger()) }, ) - eventQueue.Start(p.watcher.Events(t.Context())) + eventQueue.Start(watcher.Events(t.Context())) if err := errs.Error(); err != nil { return err.Subject(p.String())