github.com/Axway/agent-sdk@v1.1.101/pkg/agent/handler/traceaccessrequest.go (about)

     1  package handler
     2  
     3  import (
     4  	"context"
     5  
     6  	agentcache "github.com/Axway/agent-sdk/pkg/agent/cache"
     7  	apiv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1"
     8  	management "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/management/v1alpha1"
     9  	"github.com/Axway/agent-sdk/pkg/watchmanager/proto"
    10  )
    11  
    12  type traceAccessRequestHandler struct {
    13  	marketplaceHandler
    14  	cache  agentcache.Manager
    15  	client client
    16  }
    17  
    18  // NewTraceAccessRequestHandler creates a Handler for Access Requests for trace agent
    19  func NewTraceAccessRequestHandler(cache agentcache.Manager, client client) Handler {
    20  	return &traceAccessRequestHandler{
    21  		cache:  cache,
    22  		client: client,
    23  	}
    24  }
    25  
    26  // Handle processes grpc events triggered for AccessRequests for trace agent
    27  func (h *traceAccessRequestHandler) Handle(ctx context.Context, _ *proto.EventMeta, resource *apiv1.ResourceInstance) error {
    28  	action := GetActionFromContext(ctx)
    29  	if resource.Kind != management.AccessRequestGVK().Kind {
    30  		return nil
    31  	}
    32  
    33  	if action == proto.Event_DELETED {
    34  		return h.cache.DeleteAccessRequest(resource.Metadata.ID)
    35  	}
    36  
    37  	ar := &management.AccessRequest{}
    38  	err := ar.FromInstance(resource)
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	ok := isStatusFound(ar.Status)
    44  	if !ok {
    45  		return nil
    46  	}
    47  
    48  	if h.shouldProcessForTrace(ar.Status, ar.Metadata.State) {
    49  		cachedAccessReq := h.cache.GetAccessRequest(resource.Metadata.ID)
    50  		if cachedAccessReq == nil {
    51  			h.cache.AddAccessRequest(resource)
    52  		}
    53  	}
    54  	return nil
    55  }