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 }