refactor(provider): simplify provider initializations, initialize watcher only when needed

This commit is contained in:
yusing 2025-04-05 13:31:09 +08:00
parent df24acb4af
commit 9a5553a5b8

View file

@ -3,7 +3,6 @@ package provider
import ( import (
"errors" "errors"
"fmt" "fmt"
"path"
"time" "time"
"github.com/rs/zerolog" "github.com/rs/zerolog"
@ -22,8 +21,6 @@ type (
t types.ProviderType t types.ProviderType
routes route.Routes routes route.Routes
watcher W.Watcher
} }
ProviderImpl interface { ProviderImpl interface {
fmt.Stringer fmt.Stringer
@ -41,43 +38,31 @@ const (
var ErrEmptyProviderName = errors.New("empty provider name") var ErrEmptyProviderName = errors.New("empty provider name")
func newProvider(t types.ProviderType) *Provider { func NewFileProvider(filename string) *Provider {
return &Provider{t: t} return &Provider{
} t: types.ProviderTypeFile,
ProviderImpl: FileProviderImpl(filename),
func NewFileProvider(filename string) (p *Provider, err error) {
name := path.Base(filename)
if name == "" {
return nil, ErrEmptyProviderName
} }
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 { func NewDockerProvider(name string, dockerHost string) *Provider {
p := newProvider(types.ProviderTypeDocker) return &Provider{
p.ProviderImpl = DockerProviderImpl(name, dockerHost) t: types.ProviderTypeDocker,
p.watcher = p.NewWatcher() ProviderImpl: DockerProviderImpl(name, dockerHost),
return p }
} }
func NewAgentProvider(cfg *agent.AgentConfig) *Provider { func NewAgentProvider(cfg *agent.AgentConfig) *Provider {
p := newProvider(types.ProviderTypeAgent) return &Provider{
agent := &AgentProvider{ t: types.ProviderTypeAgent,
AgentConfig: cfg, ProviderImpl: &AgentProvider{
docker: DockerProviderImpl(cfg.Name(), cfg.FakeDockerHost()), 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 return p.t
} }
@ -105,6 +90,7 @@ func (p *Provider) Start(parent task.Parent) gperr.Error {
errs.Add(p.startRoute(t, r)) errs.Add(p.startRoute(t, r))
} }
watcher := p.NewWatcher()
eventQueue := events.NewEventQueue( eventQueue := events.NewEventQueue(
t.Subtask("event_queue", false), t.Subtask("event_queue", false),
providerEventFlushInterval, providerEventFlushInterval,
@ -118,7 +104,7 @@ func (p *Provider) Start(parent task.Parent) gperr.Error {
gperr.LogError("event error", err, p.Logger()) 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 { if err := errs.Error(); err != nil {
return err.Subject(p.String()) return err.Subject(p.String())