X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fmodelloader%2Fnotification%2FEventCallback.java;h=d7bccbac63720abe479284809b866e8a22a728fd;hb=343089923ca1dafb6a530b77718df5e82926b557;hp=1d40291ce90a1daa882037f4a92b861d973b24a9;hpb=059f42e1a2289ecb2cb5835b8b14a0d098c9e1d3;p=aai%2Fmodel-loader.git diff --git a/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java b/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java index 1d40291..d7bccba 100644 --- a/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java +++ b/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java @@ -2,15 +2,14 @@ * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. - * Copyright © 2017 Amdocs - * All rights reserved. + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 European Software Marketing Ltd. * ================================================================================ * 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 + * 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, @@ -18,276 +17,105 @@ * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ package org.onap.aai.modelloader.notification; -import org.openecomp.sdc.api.IDistributionClient; -import org.openecomp.sdc.api.consumer.IDistributionStatusMessage; -import org.openecomp.sdc.api.consumer.INotificationCallback; -import org.openecomp.sdc.api.notification.IArtifactInfo; -import org.openecomp.sdc.api.notification.INotificationData; -import org.openecomp.sdc.api.notification.IResourceInstance; -import org.openecomp.sdc.api.results.IDistributionClientDownloadResult; -import org.openecomp.sdc.api.results.IDistributionClientResult; -import org.openecomp.sdc.utils.ArtifactTypeEnum; -import org.openecomp.sdc.utils.DistributionActionResultEnum; -import org.openecomp.sdc.utils.DistributionStatusEnum; +import java.util.ArrayList; +import java.util.List; + +import org.onap.aai.cl.api.Logger; +import org.onap.aai.cl.eelf.LoggerFactory; +import org.onap.aai.cl.mdc.MdcContext; import org.onap.aai.modelloader.config.ModelLoaderConfig; import org.onap.aai.modelloader.entity.Artifact; -import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifact; -import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifactHandler; -import org.onap.aai.modelloader.entity.model.IModelParser; -import org.onap.aai.modelloader.entity.model.ModelArtifactHandler; -import org.onap.aai.modelloader.entity.model.ModelParserFactory; +import org.onap.aai.modelloader.extraction.ArtifactInfoExtractor; +import org.onap.aai.modelloader.service.ArtifactDeploymentManager; +import org.onap.aai.modelloader.service.BabelServiceClientFactory; import org.onap.aai.modelloader.service.ModelLoaderMsgs; -import org.openecomp.cl.api.Logger; -import org.openecomp.cl.eelf.LoggerFactory; -import org.openecomp.cl.mdc.MdcContext; -import org.openecomp.cl.mdc.MdcOverride; +import org.onap.sdc.api.IDistributionClient; +import org.onap.sdc.api.consumer.INotificationCallback; +import org.onap.sdc.api.notification.IArtifactInfo; +import org.onap.sdc.api.notification.INotificationData; import org.slf4j.MDC; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.List; - public class EventCallback implements INotificationCallback { + private static Logger logger = LoggerFactory.getInstance().getLogger(EventCallback.class.getName()); + private static Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(EventCallback.class.getName()); + + private ArtifactDeploymentManager artifactDeploymentManager; + private ArtifactDownloadManager artifactDownloadManager; + private NotificationPublisher notificationPublisher; + private IDistributionClient client; + private ModelLoaderConfig config; + private BabelServiceClientFactory babelServiceClientFactory; + + public EventCallback(IDistributionClient client, ModelLoaderConfig config, BabelServiceClientFactory babelServiceClientFactory) { + this.client = client; + this.config = config; + this.babelServiceClientFactory = babelServiceClientFactory; + } - private IDistributionClient client; - private ModelLoaderConfig config; - private static Logger logger = LoggerFactory.getInstance() - .getLogger(EventCallback.class.getName()); - private static Logger auditLogger = LoggerFactory.getInstance() - .getAuditLogger(EventCallback.class.getName()); - private static Logger metricsLogger = LoggerFactory.getInstance() - .getMetricsLogger(EventCallback.class.getName()); - - private static SimpleDateFormat dateFormatter = new SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); - - public EventCallback(IDistributionClient client, ModelLoaderConfig config) { - this.client = client; - this.config = config; - } - - @Override - public void activateCallback(INotificationData data) { - // Init MDC - MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", ""); + @Override + public void activateCallback(INotificationData data) { + MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", ""); + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received distribution " + data.getDistributionID()); - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Received distribution " + data.getDistributionID()); + List artifacts = new ArtifactInfoExtractor().extract(data); + List catalogArtifacts = new ArrayList<>(); + List modelArtifacts = new ArrayList<>(); - boolean success = true; - List artifacts = getArtifacts(data); - List modelArtifacts = new ArrayList(); - List catalogArtifacts = new ArrayList(); + boolean success = + getArtifactDownloadManager().downloadArtifacts(data, artifacts, modelArtifacts, catalogArtifacts); - for (IArtifactInfo artifact : artifacts) { - // Grab the current time so we can measure the download time for the - // metrics log - long startTimeInMs = System.currentTimeMillis(); - MdcOverride override = new MdcOverride(); - override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs)); + if (success) { + success = getArtifactDeploymentManager().deploy(data, modelArtifacts, catalogArtifacts); + } - // Download Artifact - IDistributionClientDownloadResult downloadResult = client.download(artifact); + String statusString = success ? "SUCCESS" : "FAILURE"; + auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, + "Processed distribution " + data.getDistributionID() + " (" + statusString + ")"); - // Generate metrics log - metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override, - artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString()); + publishNotifications(data, "TOSCA_CSAR", artifacts, success); - if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult()); - success = false; - break; - } + MDC.clear(); + } - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Downloaded artifact: " + artifact.getArtifactName() + " Payload:\n" + new String(downloadResult.getArtifactPayload())); - - publishDownloadSuccess(data, artifact, downloadResult); - if ((artifact.getArtifactType().compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0) - || (artifact.getArtifactType().compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) { - IModelParser parser = ModelParserFactory.createModelParser(downloadResult.getArtifactPayload(), downloadResult.getArtifactName()); - List parsedArtifacts = parser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName()); - if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) { - modelArtifacts.addAll(parsedArtifacts); + private void publishNotifications(INotificationData data, String filterType, List artifacts, + boolean deploymentSuccess) { + if (deploymentSuccess) { + artifacts.stream().filter(a -> filterType.equalsIgnoreCase(a.getArtifactType())) + .forEach(a -> getNotificationPublisher().publishDeploySuccess(client, data, a)); + getNotificationPublisher().publishComponentSuccess(client, data); } else { - success = false; - publishDeployFailure(data, artifact); - break; + artifacts.stream().filter(a -> filterType.equalsIgnoreCase(a.getArtifactType())) + .forEach(a -> getNotificationPublisher().publishDeployFailure(client, data, a)); + getNotificationPublisher().publishComponentFailure(client, data, "deploy failure"); } - } else if (artifact.getArtifactType() - .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) { - catalogArtifacts - .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload()))); - } } - String statusString = "SUCCESS"; - if (success) { - ModelArtifactHandler modelHandler = new ModelArtifactHandler(config); - boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts, - data.getDistributionID()); - - VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config); - boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts, - data.getDistributionID()); - - for (IArtifactInfo artifact : artifacts) { - if ((artifact.getArtifactType() - .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0) - || (artifact.getArtifactType() - .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) { - if (modelDeploySuccess) { - publishDeploySuccess(data, artifact); - } else { - publishDeployFailure(data, artifact); - statusString = "FAILURE"; - } - } else if (artifact.getArtifactType() - .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) { - if (catalogDeploySuccess) { - publishDeploySuccess(data, artifact); - } else { - publishDeployFailure(data, artifact); - statusString = "FAILURE"; - } + private ArtifactDeploymentManager getArtifactDeploymentManager() { + if (artifactDeploymentManager == null) { + artifactDeploymentManager = new ArtifactDeploymentManager(config); } - } - } else { - statusString = "FAILURE"; - } - - auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Processed distribution " + data.getDistributionID() + " (" + statusString + ")"); - MDC.clear(); - } - private List getArtifacts(INotificationData data) { - List artifacts = new ArrayList(); - List resources = data.getResources(); - - if (data.getServiceArtifacts() != null) { - artifacts.addAll(data.getServiceArtifacts()); + return artifactDeploymentManager; } - if (resources != null) { - for (IResourceInstance resource : resources) { - if (resource.getArtifacts() != null) { - artifacts.addAll(resource.getArtifacts()); + private ArtifactDownloadManager getArtifactDownloadManager() { + if (artifactDownloadManager == null) { + artifactDownloadManager = new ArtifactDownloadManager(client, config, babelServiceClientFactory); } - } - } - return artifacts; - } - - private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact, - String errorMessage) { - // Grab the current time so we can measure the download time for the metrics - // log - long startTimeInMs = System.currentTimeMillis(); - MdcOverride override = new MdcOverride(); - override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs)); - - IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus( - buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR)); - metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure", - artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString()); - - if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Failed to publish download failure status: " - + sendDownloadStatus.getDistributionMessageResult()); - } - - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage); - } - - private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact, - IDistributionClientDownloadResult downloadResult) { - // Grab the current time so we can measure the download time for the metrics - // log - long startTimeInMs = System.currentTimeMillis(); - MdcOverride override = new MdcOverride(); - override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs)); - - IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus( - buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK)); - metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success", - artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString()); - - if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Failed to publish download success status: " - + sendDownloadStatus.getDistributionMessageResult()); - } - - if (logger.isDebugEnabled()) { - StringBuilder sb = new StringBuilder(); - sb.append("Downloaded artifact:\n"); - sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName()); - sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription()); - sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum()); - sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL()); - sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType()); - sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription()); - sb.append("\nArtInfo_Serv_Name: " + data.getServiceName()); - sb.append("\nGet_serviceVersion: " + data.getServiceVersion()); - sb.append("\nGet_Service_UUID: " + data.getServiceUUID()); - sb.append("\nArtInfo_DistributionId: " + data.getDistributionID()); - logger.debug(sb.toString()); - } - } - - private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) { - // Grab the current time so we can measure the download time for the metrics - // log - long startTimeInMs = System.currentTimeMillis(); - MdcOverride override = new MdcOverride(); - override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs)); - - IDistributionClientResult sendStatus = client.sendDeploymentStatus( - buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR)); - metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure", - artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString()); - - if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult()); + return artifactDownloadManager; } - } - private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) { - // Grab the current time so we can measure the download time for the metrics - // log - long startTimeInMs = System.currentTimeMillis(); - MdcOverride override = new MdcOverride(); - override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs)); - IDistributionClientResult sendStatus = client.sendDownloadStatus( - buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK)); - metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success", - artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString()); + private NotificationPublisher getNotificationPublisher() { + if (notificationPublisher == null) { + notificationPublisher = new NotificationPublisher(); + } - if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult()); + return notificationPublisher; } - } - - private IDistributionStatusMessage buildStatusMessage(IDistributionClient client, - INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) { - IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status, - data.getDistributionID(), client.getConfiguration().getConsumerID(), - artifact.getArtifactURL()); - - return statusMessage; - } - }