github.com/Axway/agent-sdk@v1.1.101/pkg/agent/handler/proxy.go (about) 1 package handler 2 3 import ( 4 "context" 5 6 v1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 7 "github.com/Axway/agent-sdk/pkg/watchmanager/proto" 8 ) 9 10 // ProxyHandler interface to represent the proxy resource handler. 11 type ProxyHandler interface { 12 // RegisterTargetHandler adds the target handler 13 RegisterTargetHandler(name string, resourceHandler Handler) 14 // UnregisterTargetHandler removes the specified handler 15 UnregisterTargetHandler(name string) 16 } 17 18 // StreamWatchProxyHandler - proxy handler for stream watch 19 type StreamWatchProxyHandler struct { 20 targetResourceHandlerMap map[string]Handler 21 } 22 23 // NewStreamWatchProxyHandler - creates a Handler to proxy target resource handler 24 func NewStreamWatchProxyHandler() *StreamWatchProxyHandler { 25 return &StreamWatchProxyHandler{ 26 targetResourceHandlerMap: make(map[string]Handler), 27 } 28 } 29 30 // RegisterTargetHandler adds the target handler 31 func (h *StreamWatchProxyHandler) RegisterTargetHandler(name string, resourceHandler Handler) { 32 h.targetResourceHandlerMap[name] = resourceHandler 33 } 34 35 // UnregisterTargetHandler removes the specified handler 36 func (h *StreamWatchProxyHandler) UnregisterTargetHandler(name string) { 37 delete(h.targetResourceHandlerMap, name) 38 } 39 40 // Handle receives the type of the event (add, update, delete), event metadata and updated API Server resource 41 func (h *StreamWatchProxyHandler) Handle(ctx context.Context, eventMetadata *proto.EventMeta, resource *v1.ResourceInstance) error { 42 if h.targetResourceHandlerMap != nil { 43 for _, handler := range h.targetResourceHandlerMap { 44 err := handler.Handle(ctx, eventMetadata, resource) 45 if err != nil { 46 return err 47 } 48 } 49 } 50 return nil 51 }