Added check to prevent camunda history lookup on 46/103646/1
authorPlummer, Brittany <brittany.plummer@att.com>
Thu, 12 Mar 2020 23:23:27 +0000 (19:23 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Thu, 12 Mar 2020 23:23:27 +0000 (19:23 -0400)
Added check to prevent camunda history lookup on older requests

Issue-ID: SO-2726
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: Ie8513626f942404241c351313a791098a0708db4

mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java
mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationFilterResponse.json
mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationList.json

index 33c2ac8..c43a050 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;
@@ -73,6 +74,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,6 +107,9 @@ public class OrchestrationRequests {
     @Autowired
     private CamundaRequestHandler camundaRequestHandler;
 
+    @Autowired
+    private Environment env;
+
     @GET
     @Path("/{version:[vV][4-8]}/{requestId}")
     @Operation(description = "Find Orchestrated Requests for a given requestId", responses = @ApiResponse(
@@ -436,12 +441,14 @@ public class OrchestrationRequests {
         String retryStatusMessage = iar.getRetryStatusMessage();
         String taskName = null;
 
-        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;
+        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;
+                    }
                 }
             }
         }
@@ -594,4 +601,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;
+    }
 }
index baa7af7..b46690f 100644 (file)
@@ -30,6 +30,7 @@ mso:
         uri: /sobpmnengine/history/activity-instance
   camundaURL: http://localhost:8089
   camundaAuth: E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE
+  camundaCleanupInterval: 30
                 
 spring:
   datasource:
index 4631b53..3db2b2d 100644 (file)
@@ -29,6 +29,11 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang.StringUtils;
 import org.junit.Before;
@@ -41,6 +46,7 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 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.constants.OrchestrationRequestFormat;
 import org.onap.so.constants.Status;
@@ -49,6 +55,7 @@ import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.serviceinstancebeans.InstanceReferences;
 import org.onap.so.serviceinstancebeans.Request;
 import org.onap.so.serviceinstancebeans.RequestStatus;
+import org.springframework.core.env.Environment;
 
 @RunWith(MockitoJUnitRunner.class)
 public class OrchestrationRequestsUnitTest {
@@ -62,6 +69,8 @@ public class OrchestrationRequestsUnitTest {
     private Response response;
     @Mock
     private CamundaRequestHandler camundaRequestHandler;
+    @Mock
+    private Environment env;
     @Rule
     public ExpectedException thrown = ExpectedException.none();
     @InjectMocks
@@ -79,6 +88,7 @@ public class OrchestrationRequestsUnitTest {
     private InfraActiveRequests iar;
     boolean includeCloudRequest = false;
     private static final String ROLLBACK_EXT_SYSTEM_ERROR_SOURCE = "SDNC";
+    private Timestamp startTime = new Timestamp(System.currentTimeMillis());
 
 
     @Before
@@ -93,6 +103,7 @@ public class OrchestrationRequestsUnitTest {
         iar.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
         iar.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
         iar.setResourceStatusMessage("The vf module already exist");
+        iar.setStartTime(startTime);
     }
 
     @Test
@@ -113,6 +124,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         iar.setOriginalRequestId(ORIGINAL_REQUEST_ID);
 
@@ -138,6 +150,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
@@ -161,6 +174,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
 
@@ -187,6 +201,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
 
@@ -214,6 +229,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
 
@@ -236,6 +252,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
 
@@ -259,6 +276,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
 
@@ -283,6 +301,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
 
@@ -306,6 +325,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
         iar.setFlowStatus(null);
@@ -348,6 +368,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
         iar.setFlowStatus("Successfully completed all Building Blocks");
@@ -374,6 +395,7 @@ public class OrchestrationRequestsUnitTest {
         expected.setInstanceReferences(instanceReferences);
         expected.setRequestStatus(requestStatus);
         expected.setRequestScope(SERVICE);
+        expected.setStartTime(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(startTime) + " GMT");
 
         includeCloudRequest = false;
         iar.setFlowStatus("All Rollback flows have completed successfully");
@@ -431,4 +453,35 @@ public class OrchestrationRequestsUnitTest {
         assertFalse(required);
     }
 
+    @Test
+    public void taskNameLookup() throws ContactCamundaException {
+        InfraActiveRequests req = new InfraActiveRequests();
+        req.setRequestId("70debc2a-d6bc-4795-87ba-38a94d9b0b99");
+        Instant startInstant = Instant.now().minus(1, ChronoUnit.DAYS);
+        req.setStartTime(Timestamp.from(startInstant));
+        when(env.getProperty("mso.camundaCleanupInterval")).thenReturn(null);
+        when(camundaRequestHandler.getTaskName("70debc2a-d6bc-4795-87ba-38a94d9b0b99")).thenReturn("taskName");
+
+        RequestStatus requestStatus = new RequestStatus();
+        req.setFlowStatus("Building blocks 1 of 3 completed.");
+
+        orchestrationRequests.mapRequestStatusAndExtSysErrSrcToRequest(req, requestStatus, null, "v7");
+        assertEquals("FLOW STATUS: Building blocks 1 of 3 completed. TASK INFORMATION: taskName",
+                requestStatus.getStatusMessage());
+    }
+
+    @Test
+    public void noCamundaLookupAfterInterval() throws ContactCamundaException {
+        InfraActiveRequests req = new InfraActiveRequests();
+        req.setRequestId("70debc2a-d6bc-4795-87ba-38a94d9b0b99");
+        Instant startInstant = Instant.now().minus(36, ChronoUnit.DAYS);
+        req.setStartTime(Timestamp.from(startInstant));
+        when(env.getProperty("mso.camundaCleanupInterval")).thenReturn("35");
+
+        RequestStatus requestStatus = new RequestStatus();
+        req.setFlowStatus("Building blocks 1 of 3 completed.");
+
+        orchestrationRequests.mapRequestStatusAndExtSysErrSrcToRequest(req, requestStatus, null, "v7");
+        assertEquals("FLOW STATUS: Building blocks 1 of 3 completed.", requestStatus.getStatusMessage());
+    }
 }
index 96fed36..3b2eca7 100644 (file)
@@ -61,7 +61,7 @@
         },
         "requestStatus": {
           "requestState": "COMPLETE",
-          "statusMessage": "STATUS: Vf Module has been deleted successfully. FLOW STATUS: Building blocks 1 of 3 completed. TASK INFORMATION: Last task executed: BB to Execute ROLLBACK STATUS: Rollback has been completed successfully.",
+          "statusMessage": "STATUS: Vf Module has been deleted successfully. FLOW STATUS: Building blocks 1 of 3 completed. ROLLBACK STATUS: Rollback has been completed successfully.",
           "percentProgress": 100,
           "timestamp": "Thu, 22 Dec 2016 08:30:28 GMT"
         }
index 8018413..baddb21 100644 (file)
@@ -58,7 +58,7 @@
             },
             "requestStatus":{
                "requestState":"PENDING",
-               "statusMessage":"FLOW STATUS: Building blocks 1 of 3 completed. TASK INFORMATION: Last task executed: BB to Execute RETRY STATUS: Retry 2/5 will be started in 8 min. ROLLBACK STATUS: Rollback has been completed successfully.",
+               "statusMessage":"FLOW STATUS: Building blocks 1 of 3 completed. RETRY STATUS: Retry 2/5 will be started in 8 min. ROLLBACK STATUS: Rollback has been completed successfully.",
                "percentProgress":0,
                "timestamp": "Thu, 22 Dec 2016 08:30:28 GMT"
             }
             },
             "requestStatus":{
                "requestState":"PENDING",
-               "statusMessage":"STATUS: Adding members. FLOW STATUS: Building blocks 1 of 3 completed. TASK INFORMATION: Last task executed: BB to Execute RETRY STATUS: Retry 2/5 will be started in 8 min. ROLLBACK STATUS: Rollback has been completed successfully.",
+               "statusMessage":"STATUS: Adding members. FLOW STATUS: Building blocks 1 of 3 completed. RETRY STATUS: Retry 2/5 will be started in 8 min. ROLLBACK STATUS: Rollback has been completed successfully.",
                "percentProgress":0,
                "timestamp": "Thu, 22 Dec 2016 08:30:28 GMT"
             }