From 7a7e6e39b0c1426ad5e107ca22e526ff565ceec2 Mon Sep 17 00:00:00 2001 From: "Plummer, Brittany" Date: Thu, 12 Mar 2020 19:23:27 -0400 Subject: Added check to prevent camunda history lookup on Added check to prevent camunda history lookup on older requests Issue-ID: SO-2726 Signed-off-by: Benjamin, Max (mb388a) Change-Id: Ie8513626f942404241c351313a791098a0708db4 --- .../so/apihandlerinfra/OrchestrationRequests.java | 35 +++++++++++--- .../src/main/resources/application.yaml | 1 + .../OrchestrationRequestsUnitTest.java | 53 ++++++++++++++++++++++ .../OrchestrationFilterResponse.json | 2 +- .../OrchestrationRequest/OrchestrationList.json | 4 +- 5 files changed, 86 insertions(+), 9 deletions(-) diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java index 33c2ac80be..c43a050500 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java @@ -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; + } } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml b/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml index baa7af77a5..b46690f2a7 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml +++ b/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml @@ -30,6 +30,7 @@ mso: uri: /sobpmnengine/history/activity-instance camundaURL: http://localhost:8089 camundaAuth: E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE + camundaCleanupInterval: 30 spring: datasource: diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java index 4631b53bc0..3db2b2d96d 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsUnitTest.java @@ -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()); + } } diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationFilterResponse.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationFilterResponse.json index 96fed36d45..3b2eca7ce2 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationFilterResponse.json +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationFilterResponse.json @@ -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" } diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationList.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationList.json index 801841313a..baddb21617 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationList.json +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationList.json @@ -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" } @@ -321,7 +321,7 @@ }, "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" } -- cgit 1.2.3-korg