From 250b5b2a4ad4020df9c0dd053743d28616e28485 Mon Sep 17 00:00:00 2001 From: prathamesh morde Date: Mon, 13 May 2019 11:53:08 -0400 Subject: Upates in sdc-listener notification part. -Added COMPOENT_DONE_OK status if sdc-listener fails to parse the CBA archive. -Make use of IComponentDoneStatusMessage instead of IFinalDistrStatusMessage. -Added DownloadStausMessage to handle download CSAR notification. -Change the sli-version in blueprint-processor to 0.5.0-SNAPSHOT. Change-Id: Ie6bb0569e6daffb13e06532f670aac27af1f935e Issus-ID:CCSDK-1319 Signed-off-by: prathamesh morde --- .../SdcListenerNotificationCallback.java | 12 +++- .../ccsdk/cds/sdclistener/dto/SdcListenerDto.java | 10 ++++ .../sdclistener/service/ListenerServiceImpl.java | 43 +++++++++----- .../sdclistener/status/ComponentStatusMessage.java | 65 ++++++++++++++++++++++ .../status/DistributionStatusMessage.java | 55 ------------------ .../cds/sdclistener/status/SdcListenerStatus.java | 65 ++++++++++++++++------ 6 files changed, 162 insertions(+), 88 deletions(-) create mode 100644 ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/ComponentStatusMessage.java delete mode 100644 ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/DistributionStatusMessage.java (limited to 'ms/sdclistener/application/src/main') diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/SdcListenerNotificationCallback.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/SdcListenerNotificationCallback.java index 67db02e77..d5f156e55 100644 --- a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/SdcListenerNotificationCallback.java +++ b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/SdcListenerNotificationCallback.java @@ -24,6 +24,7 @@ import java.util.Objects; import org.onap.ccsdk.cds.sdclistener.dto.SdcListenerDto; import org.onap.ccsdk.cds.sdclistener.service.ListenerService; import org.onap.ccsdk.cds.sdclistener.status.SdcListenerStatus; +import org.onap.ccsdk.cds.sdclistener.status.SdcListenerStatus.NotificationType; import org.onap.ccsdk.cds.sdclistener.util.FileUtil; import org.onap.sdc.api.IDistributionClient; import org.onap.sdc.api.consumer.INotificationCallback; @@ -80,7 +81,9 @@ public class SdcListenerNotificationCallback implements INotificationCallback { */ private void downloadCsarArtifacts(IArtifactInfo info, IDistributionClient distributionClient) { final String url = info.getArtifactURL(); + sdcListenerDto.setArtifactUrl(url); final String id = info.getArtifactUUID(); + final String distributionId = sdcListenerDto.getDistributionId(); if (Objects.equals(info.getArtifactType(), SdcListenerConfiguration.TOSCA_CSAR)) { LOGGER.info("Trying to download the artifact from : {} and UUID is {} ", url, id); @@ -89,12 +92,15 @@ public class SdcListenerNotificationCallback implements INotificationCallback { IDistributionClientDownloadResult result = distributionClient.download(info); if (!Objects.equals(result.getDistributionActionResult(), SUCCESS)) { - String errorMessage = String.format("Failed to download the artifact from : %s due to %s ", url, + final String errorMessage = String.format("Failed to download the artifact from : %s due to %s ", url, result.getDistributionActionResult()); - listenerStatus.sendResponseStatusBackToSDC(sdcListenerDto.getDistributionId(), - DistributionStatusEnum.COMPONENT_DONE_ERROR, errorMessage); + listenerStatus + .sendResponseBackToSdc(distributionId, DistributionStatusEnum.DOWNLOAD_ERROR, errorMessage, + url, NotificationType.DOWNLOAD); LOGGER.error(errorMessage); } else { + listenerStatus.sendResponseBackToSdc(distributionId, DistributionStatusEnum.DOWNLOAD_OK, null, url, + NotificationType.DOWNLOAD); LOGGER.info("Trying to write CSAR artifact to file with URL {} and UUID {}", url, id); processCsarArtifact(result); } diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/dto/SdcListenerDto.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/dto/SdcListenerDto.java index c7c3d4829..a59022c3f 100644 --- a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/dto/SdcListenerDto.java +++ b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/dto/SdcListenerDto.java @@ -34,6 +34,8 @@ public class SdcListenerDto { @Value("${listenerservice.config.grpcPort}") private int grpcPort; + private String artifactUrl; + @Autowired private SdcListenerAuthClientInterceptor sdcListenerAuthClientInterceptor; @@ -67,4 +69,12 @@ public class SdcListenerDto { public ManagedChannel getManagedChannelForGrpc() { return managedChannel; } + + public String getArtifactUrl() { + return artifactUrl; + } + + public void setArtifactUrl(String artifactUrl) { + this.artifactUrl = artifactUrl; + } } diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/service/ListenerServiceImpl.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/service/ListenerServiceImpl.java index d1aac9704..c78505377 100644 --- a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/service/ListenerServiceImpl.java +++ b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/service/ListenerServiceImpl.java @@ -15,6 +15,8 @@ */ package org.onap.ccsdk.cds.sdclistener.service; +import static java.lang.String.format; +import static org.onap.ccsdk.cds.sdclistener.status.SdcListenerStatus.NotificationType.SDC_LISTENER_COMPONENT; import static org.onap.sdc.utils.DistributionStatusEnum.COMPONENT_DONE_ERROR; import static org.onap.sdc.utils.DistributionStatusEnum.COMPONENT_DONE_OK; import com.google.protobuf.ByteString; @@ -80,7 +82,8 @@ public class ListenerServiceImpl implements ListenerService { @Override public void extractBluePrint(String csarArchivePath, String cbaArchivePath) { int validPathCount = 0; - final String distributionId = sdcListenerDto.getDistributionId(); + final String distributionId = getDistributionId(); + final String artifactUrl = getArtifactUrl(); Path cbaStorageDir = getStorageDirectory(cbaArchivePath); try (ZipFile zipFile = new ZipFile(csarArchivePath)) { Enumeration entries = zipFile.entries(); @@ -96,15 +99,17 @@ public class ListenerServiceImpl implements ListenerService { } if (validPathCount == 0) { - final String errorMessage = String - .format("The CBA Archive doesn't exist as per this given regex %s", CBA_ZIP_PATH); - listenerStatus.sendResponseStatusBackToSDC(distributionId, COMPONENT_DONE_ERROR, errorMessage); - LOGGER.error(errorMessage); + LOGGER + .info("CBA archive doesn't exist in the CSAR Package or it doesn't exist as per the given path {}", + CBA_ZIP_PATH); + listenerStatus.sendResponseBackToSdc(distributionId, COMPONENT_DONE_OK, null, + artifactUrl, SDC_LISTENER_COMPONENT); } } catch (Exception e) { - final String errorMessage = String.format("Failed to extract blueprint %s", e.getMessage()); - listenerStatus.sendResponseStatusBackToSDC(distributionId, COMPONENT_DONE_ERROR, errorMessage); + final String errorMessage = format("Failed to extract blueprint %s", e.getMessage()); + listenerStatus.sendResponseBackToSdc(distributionId, COMPONENT_DONE_ERROR, errorMessage, + artifactUrl, SDC_LISTENER_COMPONENT); LOGGER.error(errorMessage); } } @@ -177,7 +182,8 @@ public class ListenerServiceImpl implements ListenerService { } private void prepareRequestForCdsBackend(List files, ManagedChannel managedChannel, String path) { - final String distributionId = sdcListenerDto.getDistributionId(); + final String distributionId = getDistributionId(); + final String artifactUrl = getArtifactUrl(); files.forEach(zipFile -> { try { @@ -187,18 +193,21 @@ public class ListenerServiceImpl implements ListenerService { final Status responseStatus = bluePrintProcesssorHandler.sendRequest(request, managedChannel); if (responseStatus.getCode() != SUCCESS_CODE) { - final String errorMessage = String.format("Failed to store the CBA archive into CDS DB due to %s", + final String errorMessage = format("Failed to store the CBA archive into CDS DB due to %s", responseStatus.getErrorMessage()); - listenerStatus.sendResponseStatusBackToSDC(distributionId, COMPONENT_DONE_ERROR, errorMessage); + listenerStatus.sendResponseBackToSdc(distributionId, COMPONENT_DONE_ERROR, errorMessage, artifactUrl, + SDC_LISTENER_COMPONENT); LOGGER.error(errorMessage); } else { LOGGER.info(responseStatus.getMessage()); - listenerStatus.sendResponseStatusBackToSDC(distributionId, COMPONENT_DONE_OK, null); + listenerStatus.sendResponseBackToSdc(distributionId, COMPONENT_DONE_OK, null, artifactUrl, + SDC_LISTENER_COMPONENT); } } catch (Exception e) { - final String errorMessage = String.format("Failure due to %s", e.getMessage()); - listenerStatus.sendResponseStatusBackToSDC(distributionId, COMPONENT_DONE_ERROR, errorMessage); + final String errorMessage = format("Failure due to %s", e.getMessage()); + listenerStatus.sendResponseBackToSdc(distributionId, COMPONENT_DONE_ERROR, errorMessage, artifactUrl, + SDC_LISTENER_COMPONENT); LOGGER.error(errorMessage); } finally { FileUtil.deleteFile(zipFile, path); @@ -214,4 +223,12 @@ public class ListenerServiceImpl implements ListenerService { .setFileChunk(fileChunk) .build(); } + + private String getDistributionId() { + return sdcListenerDto.getDistributionId(); + } + + private String getArtifactUrl() { + return sdcListenerDto.getArtifactUrl(); + } } diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/ComponentStatusMessage.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/ComponentStatusMessage.java new file mode 100644 index 000000000..7a959692a --- /dev/null +++ b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/ComponentStatusMessage.java @@ -0,0 +1,65 @@ +/* + * Copyright © 2019 Bell Canada + * + * 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. + */ +package org.onap.ccsdk.cds.sdclistener.status; + +import org.onap.sdc.api.consumer.IComponentDoneStatusMessage; +import org.onap.sdc.api.consumer.IDistributionStatusMessage; +import org.onap.sdc.utils.DistributionStatusEnum; + +public class ComponentStatusMessage implements IComponentDoneStatusMessage, IDistributionStatusMessage { + + public String componentName; + + public String consumerID; + + public String distributionID; + + public DistributionStatusEnum status; + + public long timeStamp; + + public String artifactUrl; + + @Override + public String getDistributionID() { + return distributionID; + } + + @Override + public DistributionStatusEnum getStatus() { + return status; + } + + @Override + public String getConsumerID() { + return consumerID; + } + + @Override + public String getComponentName() { + return componentName; + } + + @Override + public String getArtifactURL() { + return artifactUrl; + } + + @Override + public long getTimestamp() { + return timeStamp; + } +} diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/DistributionStatusMessage.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/DistributionStatusMessage.java deleted file mode 100644 index 60463762b..000000000 --- a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/DistributionStatusMessage.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright © 2019 Bell Canada - * - * 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. - */ -package org.onap.ccsdk.cds.sdclistener.status; - -import org.onap.sdc.api.consumer.IFinalDistrStatusMessage; -import org.onap.sdc.utils.DistributionStatusEnum; - -public class DistributionStatusMessage implements IFinalDistrStatusMessage { - - public String componentName; - - public String consumerID; - - public String distributionID; - - public DistributionStatusEnum status; - - @Override - public String getDistributionID() { - return distributionID; - } - - @Override - public long getTimestamp() { - return 0; - } - - @Override - public DistributionStatusEnum getStatus() { - return status; - } - - @Override - public String getConsumerID() { - return consumerID; - } - - @Override - public String getComponentName() { - return componentName; - } -} diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/SdcListenerStatus.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/SdcListenerStatus.java index ff64c0d0c..446fdc068 100644 --- a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/SdcListenerStatus.java +++ b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/status/SdcListenerStatus.java @@ -20,7 +20,8 @@ import java.util.Objects; import org.onap.ccsdk.cds.sdclistener.dto.SdcListenerDto; import org.onap.ccsdk.cds.sdclistener.util.BuilderUtil; import org.onap.sdc.api.IDistributionClient; -import org.onap.sdc.api.consumer.IFinalDistrStatusMessage; +import org.onap.sdc.api.consumer.IComponentDoneStatusMessage; +import org.onap.sdc.api.consumer.IDistributionStatusMessage; import org.onap.sdc.api.results.IDistributionClientResult; import org.onap.sdc.utils.DistributionStatusEnum; import org.slf4j.Logger; @@ -45,32 +46,62 @@ public class SdcListenerStatus { @Autowired private SdcListenerDto sdcListenerDto; + public enum NotificationType { + DOWNLOAD, SDC_LISTENER_COMPONENT; + } + /** - * Send the response back to SDC. - * + * Send the component status back to SDC. * @param distributionID SDC Distribution ID * @param status Distribution status - * @param errorReason Reason of failure + * @param errorReason Reason of failure if present + * @param url Artifact URL + * @param type - NotificationType(Download or Component) */ - public void sendResponseStatusBackToSDC(String distributionID, DistributionStatusEnum status, String errorReason) { - + public void sendResponseBackToSdc(String distributionID, DistributionStatusEnum status, String errorReason, + String url, NotificationType type) { final IDistributionClient distributionClient = sdcListenerDto.getDistributionClient(); - IFinalDistrStatusMessage finalDistribution = new BuilderUtil<>(new DistributionStatusMessage()) - .build(builder -> { - builder.distributionID = distributionID; - builder.status = status; - builder.consumerID = consumerId; - builder.componentName = COMPONENT_NAME; - }).create(); + switch (type) { + case SDC_LISTENER_COMPONENT: + IComponentDoneStatusMessage componentStatusMessage = buildStatusMessage(distributionID, status, url, + COMPONENT_NAME); - if (errorReason == null) { - checkResponseStatusFromSdc(distributionClient.sendFinalDistrStatus(finalDistribution)); - } else { - checkResponseStatusFromSdc(distributionClient.sendFinalDistrStatus(finalDistribution, errorReason)); + if (errorReason == null) { + checkResponseStatusFromSdc(distributionClient.sendComponentDoneStatus(componentStatusMessage)); + } else { + checkResponseStatusFromSdc( + distributionClient.sendComponentDoneStatus(componentStatusMessage, errorReason)); + } + break; + + case DOWNLOAD: + IDistributionStatusMessage downloadStatusMessage = buildStatusMessage(distributionID, status, url, + null); + + if (errorReason == null) { + checkResponseStatusFromSdc(distributionClient.sendDownloadStatus(downloadStatusMessage)); + } else { + checkResponseStatusFromSdc( + distributionClient.sendDownloadStatus(downloadStatusMessage, errorReason)); + } + default: + break; } } + private ComponentStatusMessage buildStatusMessage(String distributionId, DistributionStatusEnum status, String url, + String componentName) { + return new BuilderUtil<>(new ComponentStatusMessage()).build(builder -> { + builder.distributionID = distributionId; + builder.status = status; + builder.consumerID = consumerId; + builder.componentName = componentName; + builder.timeStamp = System.currentTimeMillis(); + builder.artifactUrl = url; + }).create(); + } + private void checkResponseStatusFromSdc(IDistributionClientResult result) { if (!Objects.equals(result.getDistributionActionResult(), SUCCESS)) { LOGGER.error("SDC failed to receive the response from cds-sdc listener due to {}", -- cgit 1.2.3-korg