From 226ef715d7afe3758fbc88c05cf4d752c6bed51b Mon Sep 17 00:00:00 2001 From: Rachitha Ramappa Date: Wed, 23 Sep 2020 12:42:19 +0530 Subject: New audit info screen changes Audit screen css changes and export mso status to external file Change-Id: I71d577121e18090eab7a388ed01707823e45ac82 Issue-ID: VID-901 Signed-off-by: rachitha.ramappa@att.com --- .../java/org/onap/vid/model/JobAuditStatus.java | 48 ++++++++ .../org/onap/vid/mso/rest/AsyncRequestStatus.java | 54 ++++++++- .../java/org/onap/vid/mso/rest/RequestStatus.java | 39 ++++++- .../java/org/onap/vid/properties/Features.java | 1 + .../org/onap/vid/services/AuditServiceImpl.java | 130 ++++++++++++++++++++- .../src/main/webapp/app/vid/styles/common.css | 9 +- 6 files changed, 270 insertions(+), 11 deletions(-) (limited to 'vid-app-common/src/main') diff --git a/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java b/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java index 012db5a31..3f25b8012 100644 --- a/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java +++ b/vid-app-common/src/main/java/org/onap/vid/model/JobAuditStatus.java @@ -126,6 +126,7 @@ public class JobAuditStatus extends VidBaseEntity { .append(source, that.source) .append(requestId, that.requestId) .append(additionalInfo, that.additionalInfo) + .append(modelType, that.modelType) // ordinal is not part of equality (similarly to "created" field) .isEquals(); } @@ -138,6 +139,7 @@ public class JobAuditStatus extends VidBaseEntity { .append(source) .append(requestId) .append(additionalInfo) + // ordinal is not part of equality (similarly to "created" field) .toHashCode(); } @@ -165,6 +167,52 @@ public class JobAuditStatus extends VidBaseEntity { } } + public JobAuditStatus(UUID requestId, String instanceName, + String modelType, String instanceType, String startTime, + String finishTime, String jobStatus, String additionalInfo) { + this.requestId = requestId; + this.instanceName = instanceName; + this.modelType = modelType; + this.instanceType = instanceType; + + this.startTime = startTime; + this.finishTime = finishTime; + + this.jobStatus = jobStatus; + this.additionalInfo = additionalInfo; + this.created = dateStringToDate(finishTime); + } + private String modelType; + private String startTime; + private String finishTime; + + @Transient + public String getModelType() { + return modelType; + } + + public void setModelType(String modelType) { + this.modelType = modelType; + } + + @Transient + public String getFinishTime() { + return finishTime; + } + + public void setFinishTime(String finishTime) { + this.finishTime = finishTime; + } + + @Transient + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + private UUID jobId; private String instanceName; diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java index 61e0d3af6..09c571c29 100644 --- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java +++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java @@ -31,6 +31,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; @JsonIgnoreProperties(ignoreUnknown = true) public class AsyncRequestStatus { + public Request request; public AsyncRequestStatus(Request request) { @@ -88,14 +89,61 @@ public class AsyncRequestStatus { public static class RequestDetails { public RequestInfo requestInfo; + public ModelInfo modelInfo; + public RequestParameters requestParameters; + public Project project; + public OwningEntity owningEntity; + public CloudConfiguration cloudConfiguration; + public LineOfBusiness lineOfBusiness; + public Platform platform; + + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class LineOfBusiness { + public String lineOfBusinessName; + } + @JsonIgnoreProperties(ignoreUnknown = true) + public static class CloudConfiguration { + public String tenantId; + public String tenantName; + public String cloudOwner; + public String lcpCloudRegionId; + } + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Platform { + public String platformName; } @JsonIgnoreProperties(ignoreUnknown = true) public static class RequestInfo { public String instanceName; + public String source; + } + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ModelInfo { + public String modelInvariantId; + public String modelType; + public String modelName; + public String modelVersion; + public String modelVersionId; + public String modelUuid; + public String modelInvariantUuid; + } + @JsonIgnoreProperties(ignoreUnknown = true) + public static class RequestParameters { + public String subscriptionServiceType; + public String aLaCarte; + public String testApi; + } + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Project { + public String projectName; + } + @JsonIgnoreProperties(ignoreUnknown = true) + public static class OwningEntity { + public String owningEntityId; + public String owningEntityName; } - - - } diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestStatus.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestStatus.java index 29356aa4d..c574e5ae5 100644 --- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestStatus.java +++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestStatus.java @@ -50,6 +50,21 @@ public class RequestStatus { this.statusMessage = statusMessage; this.timestamp = timestamp; } + public RequestStatus(String requestState, String statusMessage, String timestamp, String flowStatus) { + this.requestState = requestState; + this.statusMessage = statusMessage; + this.timestamp = timestamp; + this.flowStatus = flowStatus; + } + + /** + * short description of the flow status + * (Required) + * + */ + @JsonProperty("flowStatus") + private String flowStatus; + /** * percentage complete estimate from 0 to 100 @@ -215,6 +230,28 @@ public class RequestStatus { this.additionalProperties.put(name, value); } + /** + * additional descriptive information about the status + * + * @return + * The flowStatus + */ + @JsonProperty("flowStatus") + public String getFlowStatus() { + return flowStatus; + } + + /** + * additional descriptive information about the status + * + * @param flowStatus + * The flowStatus + */ + @JsonProperty("flowStatus") + public void setFlowStatus(String flowStatus) { + this.flowStatus = flowStatus; + } + @Override public int hashCode() { return new HashCodeBuilder().append(percentProgress).append(requestState).append(statusMessage).append(timestamp).append(wasRolledBack).append(additionalProperties).toHashCode(); @@ -229,7 +266,7 @@ public class RequestStatus { return false; } RequestStatus rhs = ((RequestStatus) other); - return new EqualsBuilder().append(percentProgress, rhs.percentProgress).append(requestState, rhs.requestState).append(statusMessage, rhs.statusMessage).append(timestamp, rhs.timestamp).append(wasRolledBack, rhs.wasRolledBack).append(additionalProperties, rhs.additionalProperties).isEquals(); + return new EqualsBuilder().append(percentProgress, rhs.percentProgress).append(requestState, rhs.requestState).append(statusMessage, rhs.statusMessage).append(timestamp, rhs.timestamp).append(wasRolledBack, rhs.wasRolledBack).append(flowStatus, rhs.flowStatus).append(additionalProperties, rhs.additionalProperties).isEquals(); } } diff --git a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java index 9d3faa062..6ff6157ff 100644 --- a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java +++ b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java @@ -103,6 +103,7 @@ public enum Features implements Feature { FLAG_2008_PAUSE_INSTANTIATION_ON_VFMODULE_POPUP, FLAG_2008_REMOVE_PAUSE_INSTANTIATION, FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE, + FLAG_2011_EXPORT_MSO_STATUS, ; public boolean isActive() { 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 287a771d3..4f32eca85 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 @@ -30,7 +30,8 @@ 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 java.text.MessageFormat; +import org.apache.commons.lang3.StringUtils; import javax.inject.Inject; import java.util.List; import java.util.Objects; @@ -59,13 +60,13 @@ public class AuditServiceImpl implements AuditService{ @Override public List getAuditStatusFromMsoByRequestId(UUID jobId, UUID requestId) { - String filter = "requestId:EQUALS:" + requestId; + String filter = "requestId:EQUALS:" + requestId + "&format=statusDetail"; return getAuditStatusFromMso(jobId, filter, null); } @Override public List getAuditStatusFromMsoByInstanceId(JobAuditStatus.ResourceTypeFilter resourceTypeFilter, UUID instanceId, UUID jobId) { - String filter = resourceTypeFilter.getFilterBy() + ":EQUALS:" + instanceId; + String filter = resourceTypeFilter.getFilterBy() + ":EQUALS:" + instanceId + "&format=statusDetail"; return getAuditStatusFromMso(jobId, filter, instanceId); } @@ -156,10 +157,131 @@ public class AuditServiceImpl implements AuditService{ protected List convertMsoResponseStatusToJobAuditStatus(List msoStatuses, String defaultName){ return msoStatuses.stream().map(status -> - convertAsyncRequestStatusToJobAuditStatus(status, defaultName) + convertAsyncRequestStatusToJobAuditStatusAdditionalInfo(status, defaultName) ).collect(Collectors.toList()); } + private JobAuditStatus convertAsyncRequestStatusToJobAuditStatusAdditionalInfo(AsyncRequestStatus status, String defaultName) { + if (status == null) { + return null; + } + UUID requestId = null; + String instanceName = defaultName; + String jobStatus = null; + String additionalInfo = null; + String finishTime = null; + String instanceType = null; + String modelType = ""; + String startTime = null; + AsyncRequestStatus.Request request = status.request; + if (request != null) { + if (request.requestId != null) { + requestId = UUID.fromString(request.requestId); + } + instanceName = extractInstanceName(instanceName, request); + instanceType = request.requestType; + if (request.requestDetails != null && request.requestDetails.modelInfo != null) { + modelType = request.requestDetails.modelInfo.modelType; + } + startTime = request.startTime; + if (request.requestStatus != null) { + jobStatus = request.requestStatus.getRequestState(); + additionalInfo = buildAdditionalInfo(request); + + if (!request.requestStatus.getAdditionalProperties().isEmpty() && + request.requestStatus.getAdditionalProperties().get("finishTime") != null) { + finishTime = request.requestStatus.getAdditionalProperties().get("finishTime").toString(); + } else { + finishTime = request.requestStatus.getTimestamp(); + } + } + } + return new JobAuditStatus(requestId, instanceName, modelType, instanceType, startTime, finishTime, + jobStatus, additionalInfo); + } + private String buildAdditionalInfo(AsyncRequestStatus.Request request) { + String source = ""; + String statusMessage = ""; + String flowStatus = ""; + String subscriptionServiceType = ""; + String alacarte = ""; + String testApi = ""; + String projectName = ""; + String owningEntityId = ""; + String owningEntityName = ""; + String requestScope = ""; + String tenantId = ""; + String tenantName = ""; + String cloudOwner = ""; + String platformName = ""; + String lineOfBusiness = ""; + MessageFormat mfBasedOnService = null; + String otherInfo = ""; + MessageFormat mf = new MessageFormat("{0}" + + "{1}" + + "{2}" + + "{3}" + + "{4}" + + "{5}"+ + "{6}"); + requestScope = request.requestScope; + statusMessage = request.requestStatus != null ? "StatusMessage:"+request.requestStatus.getStatusMessage()+ "
": ""; + if(request.requestDetails != null && request.requestDetails.requestInfo != null) { + source = "Source: "+request.requestDetails.requestInfo.source + "
"; + } + if(request.requestStatus != null && request.requestStatus.getFlowStatus() != null) { + flowStatus = "FlowStatus: "+request.requestStatus.getFlowStatus()+ "
"; + } + if(request.requestDetails != null && request.requestDetails.requestParameters != null && + request.requestDetails.requestParameters.subscriptionServiceType != null) { + subscriptionServiceType = "SubscriptionServiceType: "+request.requestDetails.requestParameters.subscriptionServiceType+ "
"; + } + if(request.requestDetails != null && request.requestDetails.requestParameters != null && + request.requestDetails.requestParameters.aLaCarte != null) { + alacarte = "Alacarte: "+request.requestDetails.requestParameters.aLaCarte+ "
"; + } + if(request.requestDetails != null && request.requestDetails.requestParameters != null && + request.requestDetails.requestParameters.testApi != null) { + testApi = "TestAPI: "+request.requestDetails.requestParameters.testApi+ "
"; + } + + if(request.requestDetails != null) { + if("service".equals(requestScope)) { + mfBasedOnService = new MessageFormat("ProjectName: {0}
" + + "OwningEntityId: {1}
" + + "OwningEntityName: {2}
"); + projectName = request.requestDetails.project != null ? request.requestDetails.project.projectName : ""; + owningEntityId = request.requestDetails.owningEntity != null ? request.requestDetails.owningEntity.owningEntityId : ""; + owningEntityName = request.requestDetails.owningEntity != null ? request.requestDetails.owningEntity.owningEntityName : ""; + Object[] arr1 = new Object[]{projectName, owningEntityId, owningEntityName}; + otherInfo = mfBasedOnService.format(arr1); + } else if("vnf".equals(requestScope)) { + mfBasedOnService = new MessageFormat("TenantId: {0}
" + + "TenantName: {1}
" + + "CloudOwner: {2}
" + + "PlatformName: {3}
" + + "LineOfBusiness: {4}
"); + tenantId = request.requestDetails.cloudConfiguration != null ? request.requestDetails.cloudConfiguration.tenantId : ""; + tenantName= request.requestDetails.cloudConfiguration != null ? request.requestDetails.cloudConfiguration.tenantName : ""; + cloudOwner= request.requestDetails.cloudConfiguration != null ? request.requestDetails.cloudConfiguration.cloudOwner : ""; + platformName= request.requestDetails.platform != null ? request.requestDetails.platform.platformName : ""; + lineOfBusiness= request.requestDetails.lineOfBusiness != null ? request.requestDetails.lineOfBusiness.lineOfBusinessName : ""; + Object[] arr2 = new Object[]{tenantId, tenantName, cloudOwner,platformName,lineOfBusiness}; + otherInfo = mfBasedOnService.format(arr2); + } else if("vfModule".equals(requestScope)) { + mfBasedOnService = new MessageFormat("TenantId: {0}
" + + "TenantName: {1}
" + + "CloudOwner: {2}
"); + tenantId = request.requestDetails.cloudConfiguration != null ? request.requestDetails.cloudConfiguration.tenantId : ""; + tenantName= request.requestDetails.cloudConfiguration != null ? request.requestDetails.cloudConfiguration.tenantName : ""; + cloudOwner= request.requestDetails.cloudConfiguration != null ? request.requestDetails.cloudConfiguration.cloudOwner : ""; + Object[] arr2 = new Object[]{tenantId, tenantName, cloudOwner}; + otherInfo = mfBasedOnService.format(arr2); + } + } + Object[] objArray = {source, statusMessage, flowStatus, subscriptionServiceType, alacarte, testApi, otherInfo}; + return StringUtils.chomp(mf.format(objArray)); + } private JobAuditStatus convertAsyncRequestStatusToJobAuditStatus(AsyncRequestStatus status, String defaultName){ if (status == null) { return null; diff --git a/vid-app-common/src/main/webapp/app/vid/styles/common.css b/vid-app-common/src/main/webapp/app/vid/styles/common.css index f941034a3..8a8af5d9b 100644 --- a/vid-app-common/src/main/webapp/app/vid/styles/common.css +++ b/vid-app-common/src/main/webapp/app/vid/styles/common.css @@ -106,7 +106,9 @@ body { flex: 1; } .content.modal-open .body-content-jsp{ - margin: 0 auto; + margin-left: 3%; + margin-right: 3%; + margin-top: 0%; } .content .body-content-jsp > div.ng-scope > div.overlay{ display: none; @@ -125,9 +127,8 @@ body { .content.modal-open .body-content-jsp .service-models-page .service-model-content{ z-index: 3005; - margin: 0 auto; flex: none; - width: 1100px; + width: 100%; padding: 10px; } .content.modal-open{ @@ -136,6 +137,8 @@ body { .body-content-jsp { flex: 1; + margin-left: 14%; + margin-right: 2%; } .button--inactive { -- cgit 1.2.3-korg