github.com/Axway/agent-sdk@v1.1.101/pkg/transaction/util/util.go (about) 1 package util 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "strings" 7 8 "github.com/Axway/agent-sdk/pkg/agent/cache" 9 v1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 10 catalog "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/catalog/v1alpha1" 11 management "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/management/v1alpha1" 12 "github.com/Axway/agent-sdk/pkg/transaction/models" 13 "github.com/Axway/agent-sdk/pkg/util/log" 14 ) 15 16 const ( 17 unknown = "unknown" 18 // SummaryEventProxyIDPrefix - Prefix for proxyID in summary event 19 SummaryEventProxyIDPrefix = "remoteApiId_" 20 21 // SummaryEventApplicationIDPrefix - Prefix for application.ID in summary event 22 SummaryEventApplicationIDPrefix = "remoteAppId_" 23 ) 24 25 // GetAccessRequest - 26 func GetAccessRequest(cacheManager cache.Manager, managedApp *v1.ResourceInstance, apiID, stage, version string) *management.AccessRequest { 27 if managedApp == nil { 28 return nil 29 } 30 31 // Lookup Access Request 32 apiID = strings.TrimPrefix(apiID, "remoteApiId_") 33 accessReq := &management.AccessRequest{} 34 ri := cacheManager.GetAccessRequestByAppAndAPIStageVersion(managedApp.Name, apiID, stage, version) 35 if ri == nil { 36 return nil 37 } 38 accessReq.FromInstance(ri) 39 return accessReq 40 } 41 42 // GetSubscriptionID - 43 func GetSubscriptionID(subscription *v1.ResourceInstance) string { 44 if subscription == nil { 45 return unknown 46 } 47 return subscription.Metadata.ID 48 } 49 50 // GetConsumerOrgID - 51 func GetConsumerOrgID(ri *v1.ResourceInstance) string { 52 if ri == nil { 53 return "" 54 } 55 56 // Lookup Subscription 57 app := &management.ManagedApplication{} 58 app.FromInstance(ri) 59 60 if app.Marketplace.Resource.Owner != nil { 61 return app.Marketplace.Resource.Owner.Organization.ID 62 } 63 return "" 64 } 65 66 // GetConsumerApplication - 67 func GetConsumerApplication(ri *v1.ResourceInstance) (string, string) { 68 if ri == nil { 69 return "", "" 70 } 71 72 for _, ref := range ri.Metadata.References { 73 // get the ID of the Catalog Application 74 if ref.Kind == catalog.ApplicationGVK().Kind { 75 return ref.ID, ref.Name 76 } 77 } 78 79 return ri.Metadata.ID, ri.Name // default to the managed app id 80 } 81 82 // IsHTTPSuccessStatus - Returns true if the HTTP status is between 200 and 400 83 func IsHTTPSuccessStatus(status int) bool { 84 return status >= http.StatusOK && status < http.StatusBadRequest 85 } 86 87 // IsSuccessStatus - Returns true if the HTTP status is between 200 and 400 88 func IsSuccessStatus(status int) bool { 89 // DEPRECATED 90 log.DeprecationWarningReplace("IsSuccessStatus", "IsHTTPSuccessStatus") 91 return IsHTTPSuccessStatus(status) 92 } 93 94 // IsHTTPFailureStatus - Returns true if the HTTP status is between 400 and 500 95 func IsHTTPFailureStatus(status int) bool { 96 return status >= http.StatusBadRequest && status < http.StatusInternalServerError 97 } 98 99 // IsFailureStatus - Returns true if the HTTP status is between 400 and 500 100 func IsFailureStatus(status int) bool { 101 // DEPRECATED 102 log.DeprecationWarningReplace("IsFailureStatus", "IsHTTPFailureStatus") 103 return IsHTTPFailureStatus(status) 104 } 105 106 // IsHTTPExceptionStatus - Returns true if the HTTP status is between 500 and 511 107 func IsHTTPExceptionStatus(status int) bool { 108 return status >= http.StatusInternalServerError && status <= http.StatusNetworkAuthenticationRequired 109 } 110 111 // IsExceptionStatus - Returns true if the HTTP status is between 500 and 511 112 func IsExceptionStatus(status int) bool { 113 // DEPRECATED 114 log.DeprecationWarningReplace("IsExceptionStatus", "IsHTTPExceptionStatus") 115 return IsHTTPExceptionStatus(status) 116 } 117 118 // GetTransactionSummaryStatus - Returns the summary status based on HTTP status code. 119 func GetTransactionSummaryStatus(status int) string { 120 transSummaryStatus := "Unknown" 121 if IsHTTPSuccessStatus(status) { 122 transSummaryStatus = "Success" 123 } else if IsHTTPFailureStatus(status) { 124 transSummaryStatus = "Failure" 125 } else if IsHTTPExceptionStatus(status) { 126 transSummaryStatus = "Exception" 127 } 128 return transSummaryStatus 129 } 130 131 // GetTransactionEventStatus - Returns the transaction event status based on HTTP status code. 132 func GetTransactionEventStatus(status int) string { 133 transStatus := "Fail" 134 if IsHTTPSuccessStatus(status) { 135 transStatus = "Pass" 136 } 137 return transStatus 138 } 139 140 // MarshalHeadersAsJSONString - Serializes the header key/values in map as JSON string 141 func MarshalHeadersAsJSONString(headers map[string]string) string { 142 bb, _ := json.Marshal(headers) 143 return string(bb) 144 } 145 146 // FormatProxyID - Returns the prefixed proxyID for summary event. 147 func FormatProxyID(proxyID string) string { 148 return SummaryEventProxyIDPrefix + proxyID 149 } 150 151 // FormatApplicationID - Returns the prefixed applicationID for summary event. 152 func FormatApplicationID(applicationID string) string { 153 return SummaryEventApplicationIDPrefix + applicationID 154 } 155 156 // UpdateWithConsumerDetails - 157 func UpdateWithConsumerDetails(accessRequest *management.AccessRequest, managedApp *v1.ResourceInstance, log log.FieldLogger) *models.ConsumerDetails { 158 159 // Set defaults to unknown to consumer details in case access request or managed apps comes back nil 160 consumerDetails := &models.ConsumerDetails{ 161 Subscription: &models.Subscription{ 162 ID: unknown, 163 Name: unknown, 164 }, 165 Application: &models.AppDetails{ 166 ConsumerOrgID: unknown, 167 ID: unknown, 168 Name: unknown, 169 }, 170 PublishedProduct: &models.Product{ 171 ID: unknown, 172 Name: unknown, 173 }, 174 } 175 176 if accessRequest == nil || managedApp == nil { 177 log.Trace("access request or managed app is nil. Setting default values to unknown") 178 return consumerDetails 179 } 180 181 subRef := accessRequest.GetReferenceByGVK(catalog.SubscriptionGVK()) 182 if subRef.ID == "" || subRef.Name == "" { 183 log.Debug("could not get subscription, setting subscription to unknown") 184 } else { 185 consumerDetails.Subscription.ID = subRef.ID 186 consumerDetails.Subscription.Name = subRef.Name 187 } 188 log. 189 WithField("subscription-id", consumerDetails.Subscription.ID). 190 WithField("subscription-name", consumerDetails.Subscription.Name). 191 Trace("subscription information") 192 193 appRef := accessRequest.GetReferenceByGVK(catalog.ApplicationGVK()) 194 if appRef.ID == "" || appRef.Name == "" { 195 log.Debug("could not get application, setting application to unknown") 196 } else { 197 consumerDetails.Application.ID = appRef.ID 198 consumerDetails.Application.Name = appRef.Name 199 } 200 201 log. 202 WithField("application-id", consumerDetails.Application.ID). 203 WithField("application-name", consumerDetails.Application.Name). 204 Trace("application information") 205 206 // try to get consumer org ID from the managed app first 207 208 consumerOrgID := GetConsumerOrgID(managedApp) 209 if consumerOrgID == "" { 210 log.Debug("could not get consumer org ID from the managed app, try getting consumer org ID from subscription") 211 } else { 212 consumerDetails.Application.ConsumerOrgID = consumerOrgID 213 } 214 log. 215 WithField("consumer-org-id", consumerDetails.Application.ConsumerOrgID). 216 Trace("consumer org ID ") 217 218 publishProductRef := accessRequest.GetReferenceByGVK(catalog.PublishedProductGVK()) 219 if publishProductRef.ID == "" || publishProductRef.Name == "" { 220 log.Debug("could not get published product, setting published product to unknown") 221 } else { 222 consumerDetails.PublishedProduct.ID = publishProductRef.ID 223 consumerDetails.PublishedProduct.Name = publishProductRef.Name 224 } 225 226 log. 227 WithField("published-product-id", consumerDetails.PublishedProduct.ID). 228 WithField("published-product-name", consumerDetails.PublishedProduct.Name). 229 Trace("published product information") 230 231 return consumerDetails 232 }