diff --git a/provider/provider.go b/provider/provider.go index 40b21392..03f11f8e 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -9,13 +9,17 @@ import ( // Provider - generic provider interface type Provider interface { Submit(event types.Event) error + TrackedImages() ([]*types.TrackedImage, error) GetName() string + Stop() } // Providers - available providers type Providers interface { Submit(event types.Event) error + TrackedImages() ([]*types.TrackedImage, error) List() []string // list all providers + Stop() // stop all providers } // New - new providers registry @@ -24,6 +28,7 @@ func New(providers []Provider) *DefaultProviders { for _, p := range providers { pvs[p.GetName()] = p + log.Infof("provider.DefaultProviders: provider '%s' registered", p.GetName()) } return &DefaultProviders{ @@ -31,10 +36,12 @@ func New(providers []Provider) *DefaultProviders { } } +// DefaultProviders - default providers container type DefaultProviders struct { providers map[string]Provider } +// Submit - submit event to all providers func (p *DefaultProviders) Submit(event types.Event) error { for _, provider := range p.providers { err := provider.Submit(event) @@ -51,6 +58,25 @@ func (p *DefaultProviders) Submit(event types.Event) error { return nil } +// TrackedImages - get tracked images for provider +func (p *DefaultProviders) TrackedImages() ([]*types.TrackedImage, error) { + var trackedImages []*types.TrackedImage + for _, provider := range p.providers { + ti, err := provider.TrackedImages() + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "provider": provider.GetName(), + }).Error("provider.DefaultProviders: failed to get tracked images") + continue + } + trackedImages = append(trackedImages, ti...) + } + + return trackedImages, nil +} + +// List - list available providers func (p *DefaultProviders) List() []string { list := []string{} for name := range p.providers { @@ -58,3 +84,11 @@ func (p *DefaultProviders) List() []string { } return list } + +// Stop - stop all providers +func (p *DefaultProviders) Stop() { + for _, provider := range p.providers { + provider.Stop() + } + return +}