Initial commit to check client alive 20/101420/3
authorSmokowski, Steven <steve.smokowski@att.com>
Fri, 7 Feb 2020 22:14:39 +0000 (17:14 -0500)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Fri, 7 Feb 2020 22:19:04 +0000 (17:19 -0500)
Initial commit to check client alive

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

adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryService.java
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/AppcOrchestratorApplication.java
adapters/so-appc-orchestrator/src/main/java/org/onap/so/adapters/appc/orchestrator/service/ApplicationControllerTaskService.java
common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java
common/src/test/java/org/onap/so/utils/ExternalTaskServiceUtilsTest.java [new file with mode: 0644]

index fb7e925..7cc7c02 100644 (file)
@@ -34,12 +34,15 @@ import org.springframework.stereotype.Component;
 @Profile("!test")
 public class AuditStackService {
 
+    private static final String MSO_AUDIT_LOCK_TIME = "mso.audit.lock-time";
+
     private static final Logger logger = LoggerFactory.getLogger(AuditStackService.class);
 
     private static final String DEFAULT_AUDIT_LOCK_TIME = "60000";
 
     private static final String DEFAULT_MAX_CLIENTS_FOR_TOPIC = "10";
 
+
     @Autowired
     public Environment env;
 
@@ -60,7 +63,7 @@ public class AuditStackService {
         for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) {
             ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient();
             client.subscribe("InventoryAddAudit")
-                    .lockDuration(Long.parseLong(env.getProperty("mso.audit.lock-time", DEFAULT_AUDIT_LOCK_TIME)))
+                    .lockDuration(Long.parseLong(env.getProperty(MSO_AUDIT_LOCK_TIME, DEFAULT_AUDIT_LOCK_TIME)))
                     .handler(auditCreateStack::executeExternalTask).open();
         }
     }
@@ -70,7 +73,7 @@ public class AuditStackService {
         for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) {
             ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient();
             client.subscribe("InventoryDeleteAudit")
-                    .lockDuration(Long.parseLong(env.getProperty("mso.audit.lock-time", DEFAULT_AUDIT_LOCK_TIME)))
+                    .lockDuration(Long.parseLong(env.getProperty(MSO_AUDIT_LOCK_TIME, DEFAULT_AUDIT_LOCK_TIME)))
                     .handler(auditDeleteStack::executeExternalTask).open();
         }
     }
@@ -80,7 +83,7 @@ public class AuditStackService {
         for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) {
             ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient();
             client.subscribe("InventoryQueryAudit")
-                    .lockDuration(Long.parseLong(env.getProperty("mso.audit.lock-time", DEFAULT_AUDIT_LOCK_TIME)))
+                    .lockDuration(Long.parseLong(env.getProperty(MSO_AUDIT_LOCK_TIME, DEFAULT_AUDIT_LOCK_TIME)))
                     .handler(auditQueryStack::executeExternalTask).open();
         }
     }
index 5261f8a..4ab4d14 100644 (file)
@@ -43,7 +43,6 @@ public class CreateInventoryService {
 
     @PostConstruct
     public void auditAAIInventory() throws Exception {
-
         ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient();
         client.subscribe("InventoryCreate")
                 .lockDuration(Long.parseLong(env.getProperty("mso.audit.lock-time", "60000")))
index 258c95a..0230d7f 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.adapters.appc.orchestrator;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * @since Version 1.0
@@ -29,6 +30,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
  */
 
 @SpringBootApplication(scanBasePackages = {"org.onap"})
+@EnableScheduling
 public class AppcOrchestratorApplication {
 
     private static final String LOGS_DIR = "logs_dir";
index 2a33124..3484e09 100644 (file)
@@ -1,6 +1,7 @@
 package org.onap.so.adapters.appc.orchestrator.service;
 
 import javax.annotation.PostConstruct;
+import org.camunda.bpm.client.ExternalTaskClient;
 import org.onap.so.utils.ExternalTaskServiceUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Profile;
@@ -23,8 +24,9 @@ public class ApplicationControllerTaskService {
     @PostConstruct
     public void appcOrchestrator() throws Exception {
         for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) {
-            externalTaskServiceUtils.createExternalTaskClient().subscribe("AppcService").lockDuration(604800000)
-                    .handler(appcOrchestrator::executeExternalTask).open();
+            ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient();
+            client.subscribe("AppcService").lockDuration(604800000).handler(appcOrchestrator::executeExternalTask)
+                    .open();
         }
     }
 
index e43b431..4f13cec 100644 (file)
@@ -1,6 +1,8 @@
 package org.onap.so.utils;
 
 import java.security.GeneralSecurityException;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import org.camunda.bpm.client.ExternalTaskClient;
 import org.camunda.bpm.client.interceptor.ClientRequestInterceptor;
 import org.camunda.bpm.client.interceptor.auth.BasicAuthProvider;
@@ -8,21 +10,30 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+
+
 @Component
 public class ExternalTaskServiceUtils {
 
     @Autowired
     public Environment env;
 
+    protected Set<ExternalTaskClient> taskClients = ConcurrentHashMap.newKeySet();
+
+
     private static final Logger logger = LoggerFactory.getLogger(ExternalTaskServiceUtils.class);
 
     public ExternalTaskClient createExternalTaskClient() throws Exception {
         String auth = getAuth();
         ClientRequestInterceptor interceptor = createClientInterceptor(auth);
-        return ExternalTaskClient.create().baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1)
-                .addInterceptor(interceptor).asyncResponseTimeout(120000).build();
+        ExternalTaskClient client =
+                ExternalTaskClient.create().baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(1)
+                        .addInterceptor(interceptor).asyncResponseTimeout(120000).build();
+        taskClients.add(client);
+        return client;
     }
 
     protected ClientRequestInterceptor createClientInterceptor(String auth) {
@@ -42,5 +53,13 @@ public class ExternalTaskServiceUtils {
         return Integer.parseInt(env.getProperty("workflow.topics.maxClients", "3"));
     }
 
+    @Scheduled(fixedDelay = 30000)
+    public void checkAllClientsActive() {
+        getClients().stream().filter(client -> !client.isActive()).forEach(ExternalTaskClient::start);
+    }
+
+    protected Set<ExternalTaskClient> getClients() {
+        return taskClients;
+    }
 
 }
diff --git a/common/src/test/java/org/onap/so/utils/ExternalTaskServiceUtilsTest.java b/common/src/test/java/org/onap/so/utils/ExternalTaskServiceUtilsTest.java
new file mode 100644 (file)
index 0000000..c9fc27e
--- /dev/null
@@ -0,0 +1,62 @@
+package org.onap.so.utils;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import org.camunda.bpm.client.ExternalTaskClient;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.springframework.core.env.Environment;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ExternalTaskServiceUtilsTest {
+
+    @Spy
+    @InjectMocks
+    private ExternalTaskServiceUtils utils = new ExternalTaskServiceUtils();
+
+    @Mock
+    private ExternalTaskClient actualClient1;
+
+    @Mock
+    private ExternalTaskClient actualClient2;
+
+    @Mock
+    private ExternalTaskClient actualClient3;
+
+    @Mock
+    private ExternalTaskClient actualClient4;
+
+    @Test
+    public void testCheckActiveClients() throws Exception {
+        Set<ExternalTaskClient> taskClients = ConcurrentHashMap.newKeySet();
+        taskClients.add(actualClient1);
+        taskClients.add(actualClient2);
+        taskClients.add(actualClient3);
+        taskClients.add(actualClient4);
+        when(utils.getClients()).thenReturn(taskClients);
+        when(actualClient1.isActive()).thenReturn(false);
+        when(actualClient2.isActive()).thenReturn(true);
+        when(actualClient3.isActive()).thenReturn(false);
+        when(actualClient4.isActive()).thenReturn(true);
+        utils.checkAllClientsActive();
+        verify(actualClient1, times(1)).isActive();
+        verify(actualClient2, times(1)).isActive();
+        verify(actualClient3, times(1)).isActive();
+        verify(actualClient4, times(1)).isActive();
+        verify(actualClient1, times(1)).start();
+        verify(actualClient3, times(1)).start();
+    }
+
+}