diff options
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java')
-rw-r--r-- | vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java | 189 |
1 files changed, 121 insertions, 68 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java index 7fb126e23..287a771d3 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java @@ -7,9 +7,9 @@ * 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. @@ -20,22 +20,20 @@ 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 static org.apache.commons.lang3.ObjectUtils.notEqual; + +import org.jetbrains.annotations.NotNull; +import org.onap.vid.dal.AsyncInstantiationRepository; +import org.onap.vid.job.Job; 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.*; 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.Objects; import java.util.UUID; import java.util.stream.Collectors; @@ -43,41 +41,20 @@ import java.util.stream.Collectors; @Service public class AuditServiceImpl implements AuditService{ - private final AsyncInstantiationBusinessLogic asyncInstantiationBL; private final RestMsoImplementation restMso; + private final AsyncInstantiationRepository asyncInstantiationRepository; @Inject - public AuditServiceImpl(AsyncInstantiationBusinessLogic asyncInstantiationBL, RestMsoImplementation restMso) { - this.asyncInstantiationBL = asyncInstantiationBL; + public AuditServiceImpl(RestMsoImplementation restMso, AsyncInstantiationRepository asyncInstantiationRepository) { this.restMso = restMso; + this.asyncInstantiationRepository = asyncInstantiationRepository; } @Override public void setFailedAuditStatusFromMso(UUID jobUuid, String requestId, int statusCode, String msoResponse){ final String failedMsoRequestStatus = "FAILED"; - String additionalInfo = formatExceptionAdditionalInfo(statusCode, msoResponse); - asyncInstantiationBL.auditMsoStatus(jobUuid, failedMsoRequestStatus, requestId, additionalInfo); - } - - private String formatExceptionAdditionalInfo(int statusCode, String msoResponse) { - String errorMsg = "Http Code:" + statusCode; - if (!StringUtils.isEmpty(msoResponse)) { - String filteredJson; - try { - ObjectMapper objectMapper = new ObjectMapper(); - filteredJson = StringUtils.defaultIfEmpty( - objectMapper.readTree(msoResponse).path("serviceException").toString().replaceAll("[\\{\\}]","") , - msoResponse - ); - } catch (JsonParseException e) { - filteredJson = msoResponse; - } catch (IOException e) { - throw new GenericUncheckedException(e); - } - - errorMsg = errorMsg + ", " + filteredJson; - } - return errorMsg; + String additionalInfo = MsoUtil.formatExceptionAdditionalInfo(statusCode, msoResponse); + auditMsoStatus(jobUuid, failedMsoRequestStatus, requestId, additionalInfo); } @Override @@ -87,64 +64,133 @@ public class AuditServiceImpl implements AuditService{ } @Override - public List<JobAuditStatus> getAuditStatusFromMsoByServiceInstanceId(UUID jobId, UUID serviceInstanceId) { - String filter = "serviceInstanceId:EQUALS:" + serviceInstanceId; - return getAuditStatusFromMso(jobId, filter, serviceInstanceId); + public List<JobAuditStatus> getAuditStatusFromMsoByInstanceId(JobAuditStatus.ResourceTypeFilter resourceTypeFilter, UUID instanceId, UUID jobId) { + String filter = resourceTypeFilter.getFilterBy() + ":EQUALS:" + instanceId; + return getAuditStatusFromMso(jobId, filter, instanceId); } @Override public List<JobAuditStatus> getAuditStatusFromMsoByJobId(UUID jobId) { - List<JobAuditStatus> auditStatuses = asyncInstantiationBL.getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO); + List<JobAuditStatus> auditStatuses = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO); String instanceName = getInstanceNameFromServiceInfo(jobId); auditStatuses.stream().forEach(status -> - status.setInstanceName(instanceName) + status.setInstanceName(instanceName) ); return auditStatuses; } + @Override + public void auditVidStatus(UUID jobUUID, Job.JobStatus jobStatus){ + JobAuditStatus vidStatus = new JobAuditStatus(jobUUID, jobStatus.toString(), JobAuditStatus.SourceStatus.VID); + auditStatus(vidStatus); + } + @Override + public void auditMsoStatus(UUID jobUUID, AsyncRequestStatus.Request msoRequestStatus){ + auditMsoStatus(jobUUID, msoRequestStatus.requestStatus.getRequestState(), msoRequestStatus.requestId, msoRequestStatus.requestStatus.getStatusMessage()); + } + + @Override + public void auditMsoStatus(UUID jobUUID, String jobStatus, String requestId, String additionalInfo){ + JobAuditStatus msoStatus = new JobAuditStatus(jobUUID, jobStatus, JobAuditStatus.SourceStatus.MSO, + requestId != null ? UUID.fromString(requestId) : null, + additionalInfo); + auditStatus(msoStatus); + } - private List<JobAuditStatus> getAuditStatusFromMso(UUID jobId, String filter, UUID serviceInstanceId) { + private void auditStatus(JobAuditStatus jobAuditStatus){ + JobAuditStatus latestStatus = getLatestAuditStatus(jobAuditStatus.getJobId(), jobAuditStatus.getSource()); + if (notEqual(jobAuditStatus, latestStatus)) { + jobAuditStatus.setOrdinal(nextOrdinalAfter(latestStatus)); + asyncInstantiationRepository.addJobAudiStatus(jobAuditStatus); + } + } + + protected int nextOrdinalAfter(JobAuditStatus jobAuditStatus) { + return jobAuditStatus == null ? 0 : (jobAuditStatus.getOrdinal() + 1); + } + + private JobAuditStatus getLatestAuditStatus(UUID jobUUID, JobAuditStatus.SourceStatus source){ + List<JobAuditStatus> list = getAuditStatuses(jobUUID, source); + return !list.isEmpty() ? list.get(list.size()-1) : null; + } + + public List<JobAuditStatus> getAuditStatuses(UUID jobUUID, JobAuditStatus.SourceStatus source) { + return asyncInstantiationRepository.getAuditStatuses(jobUUID, source); + } + + @Override + //modelType is requestScope in MSO response + public List<AsyncRequestStatus.Request> retrieveRequestsFromMsoByServiceIdAndRequestTypeAndScope(String instanceId, String requestType, String modelType) { + String filter = JobAuditStatus.ResourceTypeFilter.SERVICE.getFilterBy() + ":EQUALS:" + instanceId; + List<AsyncRequestStatus> msoStatuses = getAsyncRequestStatusListFromMso(filter); + return msoStatuses.stream() + .filter(x -> Objects.equals(x.request.requestType, requestType) && Objects.equals(x.request.requestScope, modelType)) + .map(x -> x.request) + .collect(Collectors.toList()); + } + + private List<JobAuditStatus> getAuditStatusFromMso(UUID jobId, String filter, UUID instanceId) { + + List<AsyncRequestStatus> msoStatuses = getAsyncRequestStatusListFromMso(filter); + + //add service name from service info for each audit status (in case that serviceInstanceId is null all statuses belong to service) + String userInstanceName = (instanceId == null && jobId != null) ? getInstanceNameFromServiceInfo(jobId) : null; + return convertMsoResponseStatusToJobAuditStatus(msoStatuses, userInstanceName); + } + + @NotNull + private List<AsyncRequestStatus> getAsyncRequestStatusListFromMso(String filter) { 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); + return msoResponse.get().getRequestList(); } private String getInstanceNameFromServiceInfo(UUID jobId) { - return asyncInstantiationBL.getServiceInfoByJobId(jobId).getServiceInstanceName(); + return asyncInstantiationRepository.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) { + return msoStatuses.stream().map(status -> + convertAsyncRequestStatusToJobAuditStatus(status, defaultName) + ).collect(Collectors.toList()); + } + + private JobAuditStatus convertAsyncRequestStatusToJobAuditStatus(AsyncRequestStatus status, String defaultName){ + if (status == null) { + return null; + } + + 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) { + if (request.requestId != 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(); - } + } + instanceName = extractInstanceName(instanceName, request); + instanceType = request.requestScope; + if(request.requestStatus != null) { + jobStatus = request.requestStatus.getRequestState(); + additionalInfo = request.requestStatus.getStatusMessage(); + if(!request.requestStatus.getAdditionalProperties().isEmpty() && + request.requestStatus.getAdditionalProperties().get("finishTime") != null) { + created = request.requestStatus.getAdditionalProperties().get("finishTime").toString(); + } else { + created = request.requestStatus.getTimestamp(); } } - return new JobAuditStatus(instanceName, jobStatus, requestId, additionalInfo, created, instanceType); - }).collect(Collectors.toList()); + } + return new JobAuditStatus(instanceName, jobStatus, requestId, additionalInfo, created, instanceType); } private String extractInstanceName(String instanceName, AsyncRequestStatus.Request request) { @@ -154,6 +200,13 @@ public class AuditServiceImpl implements AuditService{ return instanceName; } + @Override + public JobAuditStatus getResourceAuditStatus(String trackById) { + AsyncRequestStatus asyncRequestStatus = asyncInstantiationRepository.getResourceInfoByTrackId(trackById).getErrorMessage(); + return convertAsyncRequestStatusToJobAuditStatus(asyncRequestStatus, null); + } + + public static class BadResponseFromMso extends RuntimeException { private final RestObject<AsyncRequestStatusList> msoResponse; |