github.com/kubeshop/testkube@v1.17.23/pkg/event/loader.go (about)

     1  package event
     2  
     3  import (
     4  	"go.uber.org/zap"
     5  
     6  	"github.com/kubeshop/testkube/pkg/event/kind/common"
     7  	"github.com/kubeshop/testkube/pkg/log"
     8  )
     9  
    10  func NewLoader() *Loader {
    11  	return &Loader{
    12  		Log:     log.DefaultLogger,
    13  		Loaders: make([]common.ListenerLoader, 0),
    14  	}
    15  }
    16  
    17  // Loader updates list of available listeners in the background as we don't want to load them on each event
    18  type Loader struct {
    19  	Log     *zap.SugaredLogger
    20  	Loaders []common.ListenerLoader
    21  }
    22  
    23  // Register registers new listener reconciler
    24  func (s *Loader) Register(loader common.ListenerLoader) {
    25  	s.Loaders = append(s.Loaders, loader)
    26  }
    27  
    28  // Reconcile loop for reconciling listeners from different sources
    29  func (s *Loader) Reconcile() (listeners common.Listeners) {
    30  	listeners = make(common.Listeners, 0)
    31  	for _, loader := range s.Loaders {
    32  		l, err := loader.Load()
    33  		s.Log.Debugf("Got listeners from loader %T %+v\n", loader, l)
    34  
    35  		if err != nil {
    36  			s.Log.Errorw("error loading listeners", "error", err)
    37  			continue
    38  		}
    39  		listeners = append(listeners, l...)
    40  	}
    41  
    42  	return listeners
    43  }