github.com/kubeshop/testkube@v1.17.23/pkg/event/kind/common/interfaces.go (about) 1 package common 2 3 import ( 4 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 5 ) 6 7 const ( 8 ListenerKindWebsocket string = "websocket" 9 ListenerKindSlack string = "slack" 10 ListenerKindWebhook string = "webhook" 11 ) 12 13 type Listener interface { 14 // Name uniquely identifies listener 15 Name() string 16 // Notify sends event to listener 17 Notify(event testkube.Event) testkube.EventResult 18 // Kind of listener 19 Kind() string 20 // Selector is used to filter events 21 Selector() string 22 // Event is used to filter events 23 Events() []testkube.EventType 24 // Metadata with additional information about listener 25 Metadata() map[string]string 26 } 27 28 type ListenerLoader interface { 29 // Load listeners from configuration 30 Load() (listeners Listeners, err error) 31 // Kind of listener 32 } 33 34 type Listeners []Listener 35 36 func (l Listeners) Log() []any { 37 var result []any 38 for _, listener := range l { 39 result = append(result, map[string]any{ 40 "kind": listener.Kind(), 41 "events": listener.Events(), 42 "selector": listener.Selector(), 43 "metadata": listener.Metadata(), 44 }) 45 } 46 return []any{"listeners", result} 47 } 48 49 // CompareListeners compares listeners by metadata 50 func CompareListeners(a, b Listener) bool { 51 mapA := a.Metadata() 52 mapB := b.Metadata() 53 54 for key, value := range mapA { 55 if v, ok := mapB[key]; !ok || value != v { 56 return false 57 } 58 } 59 60 for key, value := range mapB { 61 if v, ok := mapA[key]; !ok || value != v { 62 return false 63 } 64 } 65 66 return true 67 }