subscribing to approvals

pull/99/head
Karolis Rusenas 2017-08-28 20:07:23 +01:00
parent d7774d72fc
commit f7532b50a2
1 changed files with 40 additions and 5 deletions

View File

@ -1,6 +1,9 @@
package provider
import (
"context"
"github.com/rusenask/keel/approvals"
"github.com/rusenask/keel/types"
log "github.com/Sirupsen/logrus"
@ -23,7 +26,7 @@ type Providers interface {
}
// New - new providers registry
func New(providers []Provider) *DefaultProviders {
func New(providers []Provider, approvalsManager approvals.Manager) *DefaultProviders {
pvs := make(map[string]Provider)
for _, p := range providers {
@ -31,14 +34,46 @@ func New(providers []Provider) *DefaultProviders {
log.Infof("provider.defaultProviders: provider '%s' registered", p.GetName())
}
return &DefaultProviders{
providers: pvs,
dp := &DefaultProviders{
providers: pvs,
approvalsManager: approvalsManager,
stopCh: make(chan struct{}),
}
// subscribing to approved events
// TODO: create Start() function for DefaultProviders
go dp.subscribeToApproved()
return dp
}
// DefaultProviders - default providers container
type DefaultProviders struct {
providers map[string]Provider
providers map[string]Provider
approvalsManager approvals.Manager
stopCh chan struct{}
}
func (p *DefaultProviders) subscribeToApproved() {
ctx, cancel := context.WithCancel(context.Background())
approvedCh, err := p.approvalsManager.SubscribeApproved(ctx)
if err != nil {
log.WithFields(log.Fields{
"error": err,
}).Fatal("provider.subscribeToApproved: failed to subscribe for approved reqs")
}
for {
select {
case approval := <-approvedCh:
p.Submit(*approval.Event)
case <-p.stopCh:
cancel()
return
}
}
}
// Submit - submit event to all providers
@ -51,7 +86,7 @@ func (p *DefaultProviders) Submit(event types.Event) error {
"provider": provider.GetName(),
"event": event.Repository,
"trigger": event.TriggerName,
}).Error("provider.defaultProviders: submit event failed")
}).Error("provider.Submit: submit event failed")
}
}