provider interface update

pull/39/head
Karolis Rusenas 2017-07-20 18:55:47 +01:00
parent f147d6ea25
commit 72d7fc6092
1 changed files with 34 additions and 0 deletions

View File

@ -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
}