Expose CNF simple status check api 60/122960/10
authorGrzegorz Wielgosinski <g.wielgosins@samsung.com>
Fri, 13 Aug 2021 14:37:15 +0000 (16:37 +0200)
committerGrzegorz Wielgosinski <g.wielgosins@samsung.com>
Mon, 23 Aug 2021 12:27:47 +0000 (14:27 +0200)
Issue-ID: SO-3690

Signed-off-by: Grzegorz Wielgosinski <g.wielgosins@samsung.com>
Change-Id: I63b7d7cb84898873cef38add59ebd812eafa41e4

so-cnf-adapter-application/src/main/java/org/onap/so/adapters/cnf/model/statuscheck/StatusCheckResponse.java
so-cnf-adapter-application/src/main/java/org/onap/so/adapters/cnf/rest/CnfAdapterRest.java
so-cnf-adapter-application/src/main/java/org/onap/so/adapters/cnf/service/CnfAdapterService.java
so-cnf-adapter-application/src/main/java/org/onap/so/adapters/cnf/service/statuscheck/SimpleStatusCheckService.java [new file with mode: 0644]

index 86f4812..5fdf762 100644 (file)
@@ -13,7 +13,7 @@ public class StatusCheckResponse {
     @JsonProperty("result")
     private List<StatusCheckInstanceResponse> instanceResponse;
 
-    @JsonProperty("errorMessage")
+    @JsonProperty("error")
     private String errorMessage;
 
     public List<StatusCheckInstanceResponse> getInstanceResponse() {
index aab138e..5a729dd 100644 (file)
@@ -52,6 +52,8 @@ import org.onap.so.adapters.cnf.model.Tag;
 import org.onap.so.adapters.cnf.model.healthcheck.HealthCheckResponse;
 import org.onap.so.adapters.cnf.model.statuscheck.StatusCheckResponse;
 import org.onap.so.adapters.cnf.service.CnfAdapterService;
+import org.onap.so.adapters.cnf.service.statuscheck.SimpleStatusCheckService;
+import org.onap.so.client.exception.BadResponseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -75,14 +77,17 @@ public class CnfAdapterRest {
 
     private static final Logger logger = LoggerFactory.getLogger(CnfAdapterRest.class);
     private final CloseableHttpClient httpClient = HttpClients.createDefault();
+    private final SimpleStatusCheckService simpleStatusCheckService;
     private final CnfAdapterService cnfAdapterService;
     private final SoCallbackClient callbackClient;
     private final String uri;
 
     @Autowired
-    public CnfAdapterRest(CnfAdapterService cnfAdapterService,
+    public CnfAdapterRest(SimpleStatusCheckService simpleStatusCheckService,
+                          CnfAdapterService cnfAdapterService,
                           SoCallbackClient callbackClient,
                           MulticloudConfiguration multicloudConfiguration) {
+        this.simpleStatusCheckService = simpleStatusCheckService;
         this.cnfAdapterService = cnfAdapterService;
         this.callbackClient = callbackClient;
         this.uri = multicloudConfiguration.getMulticloudUrl();
@@ -113,6 +118,31 @@ public class CnfAdapterRest {
         return response;
     }
 
+    @ResponseBody
+    @RequestMapping(value = {"/api/cnf-adapter/v1/statuscheck"}, method = RequestMethod.POST,
+            produces = "application/json")
+    public DeferredResult<ResponseEntity> statusCheck(@RequestBody CheckInstanceRequest statusCheckRequest) {
+        logger.info("statusCheck called.");
+        DeferredResult<ResponseEntity> response = new DeferredResult<>();
+
+        ForkJoinPool.commonPool().submit(() -> {
+            logger.info("Processing healthCheck service");
+            StatusCheckResponse statusCheckResponse = null;
+            try {
+                statusCheckResponse = simpleStatusCheckService.statusCheck(statusCheckRequest);
+            } catch (BadResponseException e) {
+                StatusCheckResponse errorStatusCheck = new StatusCheckResponse();
+                errorStatusCheck.setErrorMessage(e.getMessage());
+                callbackClient.sendPostCallback(statusCheckRequest.getCallbackUrl(), e);
+                return;
+            }
+            callbackClient.sendPostCallback(statusCheckRequest.getCallbackUrl(), statusCheckResponse);
+        });
+
+        response.setResult(ResponseEntity.accepted().build());
+        return response;
+    }
+
     @ResponseBody
     @RequestMapping(value = {"/api/cnf-adapter/v1/instance"}, method = RequestMethod.POST,
             produces = "application/json", consumes = "application/json")
index 2008280..a74a9b3 100644 (file)
@@ -32,6 +32,7 @@ import org.onap.so.adapters.cnf.model.CheckInstanceRequest;
 import org.onap.so.adapters.cnf.model.MulticloudInstanceRequest;
 import org.onap.so.adapters.cnf.model.healthcheck.HealthCheckResponse;
 import org.onap.so.adapters.cnf.service.healthcheck.HealthCheckService;
+import org.onap.so.adapters.cnf.service.statuscheck.SimpleStatusCheckService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,15 +54,18 @@ public class CnfAdapterService {
     private static final String INSTANCE_CREATE_PATH = "/v1/instance";
 
     private final RestTemplate restTemplate;
-    private HealthCheckService healthCheckService;
+    private final HealthCheckService healthCheckService;
+    private final SimpleStatusCheckService simpleStatusCheckService;
     private final String uri;
 
     @Autowired
     public CnfAdapterService(RestTemplate restTemplate,
                              HealthCheckService healthCheckService,
+                             SimpleStatusCheckService simpleStatusCheckService,
                              MulticloudConfiguration multicloudConfiguration) {
         this.restTemplate = restTemplate;
         this.healthCheckService = healthCheckService;
+        this.simpleStatusCheckService = simpleStatusCheckService;
         this.uri = multicloudConfiguration.getMulticloudUrl();
     }
 
diff --git a/so-cnf-adapter-application/src/main/java/org/onap/so/adapters/cnf/service/statuscheck/SimpleStatusCheckService.java b/so-cnf-adapter-application/src/main/java/org/onap/so/adapters/cnf/service/statuscheck/SimpleStatusCheckService.java
new file mode 100644 (file)
index 0000000..510d6b8
--- /dev/null
@@ -0,0 +1,56 @@
+package org.onap.so.adapters.cnf.service.statuscheck;
+
+import org.onap.so.adapters.cnf.client.MulticloudClient;
+import org.onap.so.adapters.cnf.model.CheckInstanceRequest;
+import org.onap.so.adapters.cnf.model.InstanceRequest;
+import org.onap.so.adapters.cnf.model.statuscheck.K8sRbInstanceStatus;
+import org.onap.so.adapters.cnf.model.statuscheck.StatusCheckInstanceResponse;
+import org.onap.so.adapters.cnf.model.statuscheck.StatusCheckResponse;
+import org.onap.so.client.exception.BadResponseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class SimpleStatusCheckService {
+
+    private final Logger log = LoggerFactory.getLogger(SimpleStatusCheckService.class);
+    private final MulticloudClient instanceApi;
+
+    @Autowired
+    public SimpleStatusCheckService(MulticloudClient instanceApi) {
+        this.instanceApi = instanceApi;
+    }
+
+    public StatusCheckResponse statusCheck(CheckInstanceRequest instanceIds) throws BadResponseException {
+        log.info("CnfAdapterService statusCheck called");
+        StatusCheckResponse result = new StatusCheckResponse();
+
+        List<StatusCheckInstanceResponse> simpleStatuses = new ArrayList<>();
+        for (InstanceRequest instanceRequest : instanceIds.getInstances()) {
+            String instanceId = instanceRequest.getInstanceId();
+            StatusCheckInstanceResponse statusCheck = getStatusCheck(instanceId);
+            simpleStatuses.add(statusCheck);
+        }
+
+        result.setInstanceResponse(simpleStatuses);
+        return result;
+    }
+
+    private StatusCheckInstanceResponse getStatusCheck(String instanceId) throws BadResponseException {
+        log.debug("SIMPLE STATUS CHECK - START");
+        K8sRbInstanceStatus instanceStatus = instanceApi.getInstanceStatus(instanceId);
+        boolean isInstanceReady = instanceStatus.isReady();
+        log.info("Get status for instanceId: {}", instanceId);
+        log.info("Instance status: {}", instanceStatus);
+        StatusCheckInstanceResponse result = new StatusCheckInstanceResponse(instanceId, null, isInstanceReady);
+        log.debug("SIMPLE STATUS CHECK - END SUCCESS");
+
+        return result;
+    }
+
+}