Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / services / AuditServiceImpl.java
index b4806f1..339a9ed 100644 (file)
@@ -1,47 +1,42 @@
-/*-
- * ============LICENSE_START=======================================================
- * VID
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2018 Nokia. 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.vid.services;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.vid.exceptions.GenericUncheckedException;
+import org.onap.vid.model.JobAuditStatus;
+import org.onap.vid.mso.MsoBusinessLogicImpl;
+import org.onap.vid.mso.MsoProperties;
+import org.onap.vid.mso.RestMsoImplementation;
+import org.onap.vid.mso.RestObject;
+import org.onap.vid.mso.rest.AsyncRequestStatus;
+import org.onap.vid.mso.rest.AsyncRequestStatusList;
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
 import java.io.IOException;
+import java.util.List;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 
 @Service
 public class AuditServiceImpl implements AuditService{
 
+    private final AsyncInstantiationBusinessLogic asyncInstantiationBL;
+    private final RestMsoImplementation restMso;
+
     @Inject
-    private AsyncInstantiationBusinessLogic asyncInstantiationBL;
-    public static final String FAILED_MSO_REQUEST_STATUS = "FAILED";
+    public AuditServiceImpl(AsyncInstantiationBusinessLogic asyncInstantiationBL, RestMsoImplementation restMso) {
+        this.asyncInstantiationBL = asyncInstantiationBL;
+        this.restMso = restMso;
+    }
 
     @Override
     public void setFailedAuditStatusFromMso(UUID jobUuid, String requestId, int statusCode, String msoResponse){
+        final String failedMsoRequestStatus = "FAILED";
         String additionalInfo = formatExceptionAdditionalInfo(statusCode, msoResponse);
-        asyncInstantiationBL.auditMsoStatus(jobUuid, FAILED_MSO_REQUEST_STATUS, requestId, additionalInfo);
+        asyncInstantiationBL.auditMsoStatus(jobUuid, failedMsoRequestStatus, requestId, additionalInfo);
     }
 
     private String formatExceptionAdditionalInfo(int statusCode, String msoResponse) {
@@ -64,4 +59,90 @@ public class AuditServiceImpl implements AuditService{
         }
         return errorMsg;
     }
+
+    @Override
+    public List<JobAuditStatus> getAuditStatusFromMsoByRequestId(UUID jobId, UUID requestId) {
+        String filter = "requestId:EQUALS:" + requestId;
+        return getAuditStatusFromMso(jobId, filter, null);
+    }
+
+    @Override
+    public List<JobAuditStatus> getAuditStatusFromMsoByServiceInstanceId(UUID jobId, UUID serviceInstanceId) {
+        String filter = "serviceInstanceId:EQUALS:" + serviceInstanceId;
+        return getAuditStatusFromMso(jobId, filter, serviceInstanceId);
+    }
+
+    @Override
+    public List<JobAuditStatus> getAuditStatusFromMsoByJobId(UUID jobId) {
+        List<JobAuditStatus> auditStatuses = asyncInstantiationBL.getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO);
+        String instanceName = getInstanceNameFromServiceInfo(jobId);
+        auditStatuses.stream().forEach(status ->
+            status.setInstanceName(instanceName)
+        );
+        return auditStatuses;
+    }
+
+
+
+    private List<JobAuditStatus> getAuditStatusFromMso(UUID jobId, String filter, UUID serviceInstanceId) {
+
+        String path = MsoBusinessLogicImpl.validateEndpointPath(MsoProperties.MSO_REST_API_GET_ORC_REQS) + "filter=" + filter;
+        RestObject<AsyncRequestStatusList> msoResponse = restMso.GetForObject(path , AsyncRequestStatusList.class);
+        if (msoResponse.getStatusCode() >= 400 || msoResponse.get() == null) {
+            throw new BadResponseFromMso(msoResponse);
+        }
+
+        //add service name from service info for each audit status (in case that serviceInstanceId is null all statuses belong to service)
+        String userInstanceName = serviceInstanceId == null ? getInstanceNameFromServiceInfo(jobId): null;
+        return convertMsoResponseStatusToJobAuditStatus(msoResponse.get().getRequestList(), userInstanceName);
+    }
+
+    private String getInstanceNameFromServiceInfo(UUID jobId) {
+        return asyncInstantiationBL.getServiceInfoByJobId(jobId).getServiceInstanceName();
+    }
+
+    protected List<JobAuditStatus> convertMsoResponseStatusToJobAuditStatus(List<AsyncRequestStatus> msoStatuses, String defaultName){
+        return msoStatuses.stream().map(status -> {
+            UUID requestId = null;
+            String instanceName = defaultName;
+            String jobStatus = null;
+            String additionalInfo = null;
+            String created = null;
+            String instanceType = null;
+
+            AsyncRequestStatus.Request request = status.request;
+            if(request != null) {
+                requestId = UUID.fromString(request.requestId);
+                instanceName = extractInstanceName(instanceName, request);
+                instanceType = request.requestScope;
+                if(request.requestStatus != null) {
+                    jobStatus = request.requestStatus.getRequestState();
+                    additionalInfo = request.requestStatus.getStatusMessage();
+                    if(!request.requestStatus.getAdditionalProperties().isEmpty()) {
+                        created = request.requestStatus.getAdditionalProperties().get("finishTime") != null? request.requestStatus.getAdditionalProperties().get("finishTime").toString() : request.requestStatus.getTimestamp();
+                    }
+                }
+            }
+            return new JobAuditStatus(instanceName, jobStatus, requestId, additionalInfo, created, instanceType);
+        }).collect(Collectors.toList());
+    }
+
+    private String extractInstanceName(String instanceName, AsyncRequestStatus.Request request) {
+        if(request.requestDetails != null && request.requestDetails.requestInfo != null && request.requestDetails.requestInfo.instanceName != null) {
+            instanceName = request.requestDetails.requestInfo.instanceName;
+        }
+        return instanceName;
+    }
+
+    public static class BadResponseFromMso extends RuntimeException {
+        private final RestObject<AsyncRequestStatusList> msoResponse;
+
+        public BadResponseFromMso(RestObject<AsyncRequestStatusList> msoResponse) {
+            this.msoResponse = msoResponse;
+        }
+
+        public RestObject<AsyncRequestStatusList> getMsoResponse() {
+            return msoResponse;
+        }
+    }
 }