aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java
diff options
context:
space:
mode:
authorEinat Vinouze <einat.vinouze@intl.att.com>2019-07-16 17:17:36 +0300
committerIttay Stern <ittay.stern@att.com>2019-07-30 06:01:44 +0300
commite601bbdc43bae9a08e2e10c5139a6f76b47860d7 (patch)
tree1913f0b369ead3f2ea5557e5649d8281eca9871c /vid-app-common/src/main/java/org/onap/vid/services/AuditServiceImpl.java
parent76c6ee4a697617ec4cdee2f3b48bc83136c858c5 (diff)
Implant vid-app-common org.onap.vid.job (main and test)
Issue-ID: VID-378 Change-Id: I41b0bdc2c4e3635f3f3319b1cd63cefc61912dfc Signed-off-by: Einat Vinouze <einat.vinouze@intl.att.com> Signed-off-by: Ittay Stern <ittay.stern@att.com>
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.java189
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;