Update error handling for mapInfraActiveRequestToRequest
[so.git] / mso-api-handlers / mso-api-handler-infra / src / main / java / org / onap / so / apihandlerinfra / OrchestrationRequests.java
index fec93f7..5bf33b4 100644 (file)
@@ -28,6 +28,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -45,10 +46,10 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.EnumUtils;
 import org.apache.http.HttpStatus;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.apihandler.common.ErrorNumbers;
 import org.onap.so.apihandler.common.ResponseBuilder;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
-import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 import org.onap.so.constants.OrchestrationRequestFormat;
@@ -57,7 +58,6 @@ import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.beans.RequestProcessingData;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.exceptions.ValidationException;
-import org.onap.so.logger.ErrorCode;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.serviceinstancebeans.CloudRequestData;
 import org.onap.so.serviceinstancebeans.GetOrchestrationListResponse;
@@ -73,6 +73,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
@@ -105,8 +106,11 @@ public class OrchestrationRequests {
     @Autowired
     private CamundaRequestHandler camundaRequestHandler;
 
+    @Autowired
+    private Environment env;
+
     @GET
-    @Path("/{version:[vV][4-7]}/{requestId}")
+    @Path("/{version:[vV][4-8]}/{requestId}")
     @Operation(description = "Find Orchestrated Requests for a given requestId", responses = @ApiResponse(
             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
     @Produces(MediaType.APPLICATION_JSON)
@@ -115,7 +119,6 @@ public class OrchestrationRequests {
             @PathParam("version") String version, @QueryParam("includeCloudRequest") boolean includeCloudRequest,
             @QueryParam(value = "format") String format) throws ApiException {
 
-        String apiVersion = version.substring(1);
         GetOrchestrationResponse orchestrationResponse = new GetOrchestrationResponse();
 
         InfraActiveRequests infraActiveRequest = null;
@@ -152,7 +155,7 @@ public class OrchestrationRequests {
             }
         }
 
-        Request request = mapInfraActiveRequestToRequest(infraActiveRequest, includeCloudRequest, format);
+        Request request = mapInfraActiveRequestToRequest(infraActiveRequest, includeCloudRequest, format, version);
 
         if (null != requestProcessingData && !requestProcessingData.isEmpty()) {
             request.setRequestProcessingData(mapRequestProcessingData(requestProcessingData));
@@ -161,11 +164,11 @@ public class OrchestrationRequests {
         orchestrationResponse.setRequest(request);
 
         return builder.buildResponse(HttpStatus.SC_OK, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID), orchestrationResponse,
-                apiVersion);
+                version);
     }
 
     @GET
-    @Path("/{version:[vV][4-7]}")
+    @Path("/{version:[vV][4-8]}")
     @Operation(description = "Find Orchestrated Requests for a URI Information", responses = @ApiResponse(
             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
     @Produces(MediaType.APPLICATION_JSON)
@@ -206,11 +209,11 @@ public class OrchestrationRequests {
 
         for (InfraActiveRequests infraActive : activeRequests) {
             RequestList requestList = new RequestList();
-            Request request = mapInfraActiveRequestToRequest(infraActive, includeCloudRequest, format);
+            Request request = mapInfraActiveRequestToRequest(infraActive, includeCloudRequest, format, version);
 
             if (isRequestProcessingDataRequired(format)) {
                 List<RequestProcessingData> requestProcessingData =
-                        requestsDbClient.getRequestProcessingDataBySoRequestId(infraActive.getRequestId());
+                        requestsDbClient.getExternalRequestProcessingDataBySoRequestId(infraActive.getRequestId());
                 if (null != requestProcessingData && !requestProcessingData.isEmpty()) {
                     request.setRequestProcessingData(mapRequestProcessingData(requestProcessingData));
                 }
@@ -292,7 +295,7 @@ public class OrchestrationRequests {
     }
 
     protected Request mapInfraActiveRequestToRequest(InfraActiveRequests iar, boolean includeCloudRequest,
-            String format) throws ApiException {
+            String format, String version) throws ApiException {
         String requestBody = iar.getRequestBody();
         Request request = new Request();
 
@@ -307,6 +310,19 @@ public class OrchestrationRequests {
             request.setOriginalRequestId(originalRequestId);
         }
 
+        if (!version.matches("v[1-7]")) {
+            String workflowName = iar.getWorkflowName();
+            if (workflowName == null) {
+                workflowName = iar.getRequestAction();
+            }
+            request.setWorkflowName(workflowName);
+
+            String operationName = iar.getOperationName();
+            if (operationName != null) {
+                request.setOperationName(operationName);
+            }
+        }
+
         InstanceReferences ir = new InstanceReferences();
         if (iar.getNetworkId() != null)
             ir.setNetworkInstanceId(iar.getNetworkId());
@@ -328,8 +344,6 @@ public class OrchestrationRequests {
             ir.setVolumeGroupInstanceId(iar.getVolumeGroupId());
         if (iar.getVolumeGroupName() != null)
             ir.setVolumeGroupInstanceName(iar.getVolumeGroupName());
-        if (iar.getRequestorId() != null)
-            ir.setRequestorId(iar.getRequestorId());
         if (iar.getInstanceGroupId() != null)
             ir.setInstanceGroupId(iar.getInstanceGroupId());
         if (iar.getInstanceGroupName() != null)
@@ -355,16 +369,7 @@ public class OrchestrationRequests {
                 }
 
             } catch (IOException e) {
-                logger.error("Exception occurred", e);
-                ErrorLoggerInfo errorLoggerInfo =
-                        new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError)
-                                .build();
-                ValidateException validateException =
-                        new ValidateException.Builder("Mapping of request to JSON object failed : ",
-                                HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
-                                        .errorInfo(errorLoggerInfo).build();
-
-                throw validateException;
+                logger.error(String.format("Failed to parse request (id: %s) : ", request.getRequestId()), e);
             }
         }
         request.setRequestDetails(requestDetails);
@@ -404,7 +409,7 @@ public class OrchestrationRequests {
             });
         }
 
-        mapRequestStatusAndExtSysErrSrcToRequest(iar, status, format);
+        mapRequestStatusAndExtSysErrSrcToRequest(iar, status, format, version);
 
         request.setRequestStatus(status);
         return request;
@@ -433,17 +438,21 @@ public class OrchestrationRequests {
     }
 
     protected void mapRequestStatusAndExtSysErrSrcToRequest(InfraActiveRequests iar, RequestStatus status,
-            String format) {
+            String format, String version) {
         String rollbackStatusMessage = iar.getRollbackStatusMessage();
         String flowStatusMessage = iar.getFlowStatus();
         String retryStatusMessage = iar.getRetryStatusMessage();
         String taskName = null;
 
-        if (flowStatusMessage != null && !flowStatusMessage.equals("Successfully completed all Building Blocks")
-                && !flowStatusMessage.equals("All Rollback flows have completed successfully")) {
-            taskName = camundaRequestHandler.getTaskName(iar.getRequestId());
-            if (taskName != null) {
-                flowStatusMessage = flowStatusMessage + " TASK INFORMATION: " + taskName;
+        if (daysSinceRequest(iar) <= camundaCleanupInterval()) {
+            if (format == null || !format.equalsIgnoreCase(OrchestrationRequestFormat.SIMPLENOTASKINFO.toString())) {
+                if (flowStatusMessage != null && !flowStatusMessage.equals("Successfully completed all Building Blocks")
+                        && !flowStatusMessage.equals("All Rollback flows have completed successfully")) {
+                    taskName = camundaRequestHandler.getTaskName(iar.getRequestId());
+                    if (taskName != null) {
+                        flowStatusMessage = flowStatusMessage + " TASK INFORMATION: " + taskName;
+                    }
+                }
             }
         }
 
@@ -467,6 +476,12 @@ public class OrchestrationRequests {
             if (rollbackStatusMessage != null) {
                 status.setRollbackStatusMessage(rollbackStatusMessage);
             }
+            if (version.matches("v[8-9]|v[1-9][0-9]")) {
+                if (iar.getResourceStatusMessage() != null) {
+                    status.setResourceStatusMessage(iar.getResourceStatusMessage());
+                }
+            }
+
             status.setExtSystemErrorSource(iar.getExtSystemErrorSource());
             status.setRollbackExtSystemErrorSource(iar.getRollbackExtSystemErrorSource());
         } else {
@@ -492,6 +507,13 @@ public class OrchestrationRequests {
                     statusMessages = "ROLLBACK STATUS: " + rollbackStatusMessage;
                 }
             }
+            if (iar.getResourceStatusMessage() != null) {
+                if (statusMessages != null) {
+                    statusMessages = statusMessages + " " + "RESOURCE STATUS: " + iar.getResourceStatusMessage();
+                } else {
+                    statusMessages = "RESOURCE STATUS: " + iar.getResourceStatusMessage();
+                }
+            }
         }
 
         if (statusMessages != null) {
@@ -544,7 +566,8 @@ public class OrchestrationRequests {
     }
 
     protected boolean isRequestProcessingDataRequired(String format) {
-        if (StringUtils.isNotEmpty(format) && format.equalsIgnoreCase(OrchestrationRequestFormat.SIMPLE.name())) {
+        if (StringUtils.isNotEmpty(format) && (format.equalsIgnoreCase(OrchestrationRequestFormat.SIMPLE.name())
+                || format.equalsIgnoreCase(OrchestrationRequestFormat.SIMPLENOTASKINFO.toString()))) {
             return false;
         } else {
             return true;
@@ -581,4 +604,20 @@ public class OrchestrationRequests {
         }
         return infraActiveRequest;
     }
+
+    protected long daysSinceRequest(InfraActiveRequests request) {
+        long startTime = request.getStartTime().getTime();
+        long now = System.currentTimeMillis();
+
+        return TimeUnit.MILLISECONDS.toDays(now - startTime);
+    }
+
+    protected int camundaCleanupInterval() {
+        String cleanupInterval = env.getProperty("mso.camundaCleanupInterval");
+        int days = 30;
+        if (cleanupInterval != null) {
+            days = Integer.parseInt(cleanupInterval);
+        }
+        return days;
+    }
 }