add openstack audit of delete function 85/84285/1
authorBenjamin, Max (mb388a) <mb388a@us.att.com>
Thu, 4 Apr 2019 23:42:11 +0000 (19:42 -0400)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Thu, 4 Apr 2019 23:42:34 +0000 (19:42 -0400)
audit feature for disc and creates

Change-Id: I95b6e36d15f0a5a0790aa267a9dbf4c468f69b24
Issue-ID: SO-1749
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java [new file with mode: 0644]
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditCreateStackService.java [moved from adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackServiceData.java with 74% similarity]
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java [new file with mode: 0644]
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java

diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAuditService.java
new file mode 100644 (file)
index 0000000..710a6dd
--- /dev/null
@@ -0,0 +1,75 @@
+package org.onap.so.adapters.audit;
+
+import java.util.Optional;
+
+import org.camunda.bpm.client.task.ExternalTask;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+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;
+
+@Component
+public abstract class AbstractAuditService {
+       
+       private static final Logger logger = LoggerFactory.getLogger(AbstractAuditService.class);
+       
+       
+       
+       protected static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI = "Unable to find all VServers and L-Interaces in A&AI";
+       
+       @Autowired
+       public Environment env;
+       
+       /**
+        * @param auditHeatStackFailed
+        * @param auditList
+        * @return
+        */
+       protected boolean didCreateAuditFail(Optional<AAIObjectAuditList> auditList) {
+               if (auditList.get().getAuditList() != null && !auditList.get().getAuditList().isEmpty()) {
+                       if (logger.isInfoEnabled()) {
+                               logger.info("Audit Results: {}", auditList.get().toString());
+                       }
+                       return auditList.get().getAuditList().stream().filter(auditObject -> !auditObject.isDoesObjectExist())
+                                       .findFirst().map(v -> true).orElse(false);
+               } else {
+                       return false;
+               }
+       }
+       
+       /**
+        * @param auditHeatStackFailed
+        * @param auditList
+        * @return
+        */
+       protected boolean didDeleteAuditFail(Optional<AAIObjectAuditList> auditList) {
+               if (auditList.get().getAuditList() != null && !auditList.get().getAuditList().isEmpty()) {
+                       if (logger.isInfoEnabled()) {
+                               logger.info("Audit Results: {}", auditList.get().toString());
+                       }
+                       return auditList.get().getAuditList().stream().filter(AAIObjectAudit::isDoesObjectExist)
+                                       .findFirst().map(v -> true).orElse(false);
+               } else {
+                       return false;
+               }
+       }
+       
+       protected String[] getRetrySequence() {
+                return env.getProperty("mso.workflow.topics.retrySequence",String[].class);
+       }
+       
+       protected void setupMDC(ExternalTask externalTask) {
+               String msoRequestId = externalTask.getVariable("mso-request-id");
+               if(msoRequestId != null && !msoRequestId.isEmpty())
+                       MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId);
+       }
+       
+       protected long calculateRetryDelay(int currentRetries){
+               int retrySequence = getRetrySequence().length - currentRetries;
+               long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier","6000"));
+               return Integer.parseInt(getRetrySequence()[retrySequence]) * retryMultiplier;
+       }
+}
@@ -40,11 +40,9 @@ import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
 @Component
-public class AuditStackServiceData {
-       
-       private static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI = "Unable to find all VServers and L-Interaces in A&AI";
-       
-       private static final Logger logger = LoggerFactory.getLogger(AuditStackServiceData.class);
+public class AuditCreateStackService extends AbstractAuditService{
+
+       private static final Logger logger = LoggerFactory.getLogger(AuditCreateStackService.class);
        
        @Autowired
        public HeatStackAudit heatStackAudit; 
@@ -64,7 +62,7 @@ public class AuditStackServiceData {
                if (auditListOpt.isPresent()) {
                        GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
                        variables.put("auditInventoryResult", objectMapper.getMapper().writeValueAsString(auditListOpt.get()));
-                       success = !didAuditFail(auditListOpt);
+                       success = !didCreateAuditFail(auditListOpt);
                }
                } catch (Exception e) {
                        logger.error("Error during audit of stack", e);
@@ -88,35 +86,8 @@ public class AuditStackServiceData {
                        logger.debug("The External Task Id: {} Failed", externalTask.getId());
                }
        }
-       private void setupMDC(ExternalTask externalTask) {
-               String msoRequestId = externalTask.getVariable("mso-request-id");
-               if(msoRequestId != null && !msoRequestId.isEmpty())
-                       MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId);
-       }
-       protected long calculateRetryDelay(int currentRetries){
-               int retrySequence = getRetrySequence().length - currentRetries;
-               long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier","6000"));
-               return Integer.parseInt(getRetrySequence()[retrySequence]) * retryMultiplier;
-       }
+
        
-       /**
-        * @param auditHeatStackFailed
-        * @param auditList
-        * @return
-        */
-       protected boolean didAuditFail(Optional<AAIObjectAuditList> auditList) {
-               if (auditList.get().getAuditList() != null && !auditList.get().getAuditList().isEmpty()) {
-                       if (logger.isInfoEnabled()) {
-                               logger.info("Audit Results: {}", auditList.get().toString());
-                       }
-                       return auditList.get().getAuditList().stream().filter(auditObject -> !auditObject.isDoesObjectExist())
-                                       .findFirst().map(v -> true).orElse(false);
-               } else {
-                       return false;
-               }
-       }
-       public String[] getRetrySequence() {
-                return env.getProperty("mso.workflow.topics.retrySequence",String[].class);
-       }
+
 
 }
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditDeleteStackService.java
new file mode 100644 (file)
index 0000000..2c2b2f8
--- /dev/null
@@ -0,0 +1,87 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.adapters.audit;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.audit.beans.AuditInventory;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+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;
+
+@Component
+public class AuditDeleteStackService extends AbstractAuditService{
+       
+       private static final Logger logger = LoggerFactory.getLogger(AuditDeleteStackService.class);
+       
+       @Autowired
+       public HeatStackAudit heatStackAudit; 
+       
+       @Autowired
+       public Environment env;
+
+       protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService){
+               AuditInventory auditInventory = externalTask.getVariable("auditInventory");
+               Map<String, Object> variables = new HashMap<>();
+               setupMDC(externalTask);
+               boolean success = false;
+               try {
+                       logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory,externalTask.getRetries());
+                       Optional<AAIObjectAuditList> auditListOpt=heatStackAudit.auditHeatStack(auditInventory.getCloudRegion(), auditInventory.getCloudOwner(),
+                                       auditInventory.getTenantId(), auditInventory.getHeatStackName());
+                        if (auditListOpt.isPresent()) {
+                               GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+                               variables.put("auditInventoryResult", objectMapper.getMapper().writeValueAsString(auditListOpt.get()));
+                               success = didDeleteAuditFail(auditListOpt);
+                       }
+               } catch (Exception e) {
+                       logger.error("Error during audit of stack", e);
+               }
+               variables.put("auditIsSuccessful", success);
+               if (success) {
+                       externalTaskService.complete(externalTask, variables);
+                       logger.debug("The External Task Id: {}  Successful", externalTask.getId());
+               } else {
+                       if(externalTask.getRetries() == null){
+                               logger.debug("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}", externalTask.getId(),getRetrySequence().length);
+                               externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, getRetrySequence().length, 10000);                  
+                       }else if(externalTask.getRetries() != null &&
+                                       externalTask.getRetries()-1 == 0){
+                               logger.debug("The External Task Id: {}  Failed, All Retries Exhausted", externalTask.getId());
+                               externalTaskService.complete(externalTask);
+                       }else{
+                               logger.debug("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ", externalTask.getId(),externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries()));
+                               externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries()));
+                       }
+                       logger.debug("The External Task Id: {} Failed", externalTask.getId());
+               }
+       }
+
+}
\ No newline at end of file
index 499c113..1e16c2a 100644 (file)
@@ -46,10 +46,13 @@ public class AuditStackService {
        public Environment env;
 
        @Autowired
-       private AuditStackServiceData auditStack;
+       private AuditCreateStackService auditCreateStack;
+       
+       @Autowired
+       private AuditDeleteStackService auditDeleteStack;
 
        @PostConstruct
-       public void auditAAIInventory() {
+       public void auditAddAAIInventory() {
                String auth = "";
                try {
                        auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey"));
@@ -60,9 +63,26 @@ public class AuditStackService {
                                auth);
                ExternalTaskClient client = ExternalTaskClient.create()
                                .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor)
-                               .asyncResponseTimeout(120000).backoffStrategy(new ExponentialBackoffStrategy(10000, 2, 120000)).build();
-               client.subscribe("InventoryAudit").lockDuration(60000)
-                               .handler(auditStack::executeExternalTask).open();
+                               .asyncResponseTimeout(120000).build();
+               client.subscribe("InventoryAddAudit").lockDuration(60000)
+                               .handler(auditCreateStack::executeExternalTask).open();
        }
-
+       
+       @PostConstruct
+       public void auditDeleteAAIInventory() {
+               String auth = "";
+               try {
+                       auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey"));
+               } catch (IllegalStateException | GeneralSecurityException e) {
+                       logger.error("Error Decrypting Password", e);
+               }
+               ClientRequestInterceptor interceptor = new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"),
+                               auth);
+               ExternalTaskClient client = ExternalTaskClient.create()
+                               .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1).addInterceptor(interceptor)
+                               .asyncResponseTimeout(120000).build();
+               client.subscribe("InventoryDeleteAudit").lockDuration(60000)
+                               .handler(auditDeleteStack::executeExternalTask).open();
+       }
+       
 }
index 29e672a..1eaac18 100644 (file)
 
 package org.onap.so.adapters.audit;
 
-import static org.hamcrest.CoreMatchers.isA;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.doReturn;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 
 import org.camunda.bpm.client.task.ExternalTask;
 import org.camunda.bpm.client.task.ExternalTaskService;
-import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
@@ -42,17 +38,17 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.onap.aai.domain.yang.LInterface;
 import org.onap.so.audit.beans.AuditInventory;
 import org.springframework.core.env.Environment;
+
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-public class AuditStackServiceDataTest extends AuditStackServiceData {
+public class AuditStackServiceDataTest extends AuditCreateStackService {
 
        @InjectMocks
-       private AuditStackServiceData auditStackService = new AuditStackServiceData();
+       private AuditCreateStackService auditStackService = new AuditCreateStackService();
 
        @Mock
        private HeatStackAudit heatStackAuditMock;
@@ -191,13 +187,13 @@ public class AuditStackServiceDataTest extends AuditStackServiceData {
 
        @Test
        public void determineAuditResult_Test() throws Exception{               
-               boolean actual = auditStackService.didAuditFail(auditListOptSuccess);
+               boolean actual = auditStackService.didCreateAuditFail(auditListOptSuccess);
                assertEquals(false, actual);
        }
        
        @Test
        public void determineAuditResult_Failure_Test() throws Exception{
-               boolean actual = auditStackService.didAuditFail(auditListOptFailure);
+               boolean actual = auditStackService.didCreateAuditFail(auditListOptFailure);
                assertEquals(true, actual);
        }
 }