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  }