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

     1  package slack
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"go.uber.org/zap"
     7  
     8  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     9  	"github.com/kubeshop/testkube/pkg/event/kind/common"
    10  	"github.com/kubeshop/testkube/pkg/log"
    11  	"github.com/kubeshop/testkube/pkg/slack"
    12  )
    13  
    14  var _ common.ListenerLoader = (*SlackLoader)(nil)
    15  
    16  func NewSlackLoader(messageTemplate, configString, clusterName, dashboardURI string,
    17  	events []testkube.EventType, envs map[string]string) *SlackLoader {
    18  	var config []slack.NotificationsConfig
    19  	if err := json.Unmarshal([]byte(configString), &config); err != nil {
    20  		log.DefaultLogger.Errorw("error unmarshalling slack config", "error", err)
    21  	}
    22  	slackNotifier := slack.NewNotifier(messageTemplate, clusterName, dashboardURI, config, envs)
    23  	return &SlackLoader{
    24  		Log:           log.DefaultLogger,
    25  		events:        events,
    26  		slackNotifier: slackNotifier,
    27  	}
    28  }
    29  
    30  // SlackLoader is a reconciler for slack events for now it returns single listener for slack
    31  type SlackLoader struct {
    32  	Log           *zap.SugaredLogger
    33  	events        []testkube.EventType
    34  	slackNotifier *slack.Notifier
    35  }
    36  
    37  func (r *SlackLoader) Kind() string {
    38  	return "slack"
    39  }
    40  
    41  // Load returns single listener for slack (as we don't have any sophisticated config yet)
    42  func (r *SlackLoader) Load() (listeners common.Listeners, err error) {
    43  
    44  	if r.slackNotifier.Ready {
    45  		return common.Listeners{NewSlackListener("slack", "", r.events, r.slackNotifier)}, nil
    46  	}
    47  	r.Log.Debugw("Slack notifier is not ready or not configured properly, omiting", "kind", r.Kind())
    48  	return common.Listeners{}, nil
    49  }