Implement support for v10 model entities.
[aai/model-loader.git] / src / main / java / org / openecomp / modelloader / notification / EventCallback.java
index 3b32315..8634741 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.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 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.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact;
-import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler;
-import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
-import org.openecomp.modelloader.entity.model.ModelArtifactParser;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.slf4j.MDC;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-public class EventCallback implements INotificationCallback {
-
-  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", "");
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Received distribution " + data.getDistributionID());
-
-    boolean success = true;
-    List<IArtifactInfo> artifacts = getArtifacts(data);
-    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
-    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();
-    ModelArtifactParser modelArtParser = new ModelArtifactParser();
-
-    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));
-
-      // Download Artifact
-      IDistributionClientDownloadResult downloadResult = client.download(artifact);
-
-      // Generate metrics log
-      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,
-          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());
-
-      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());
-        success = false;
-        break;
-      }
-
-      logger.debug("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)) {
-        modelArtifacts.addAll(modelArtParser.parse(downloadResult.getArtifactPayload(),
-            downloadResult.getArtifactName()));
-      } 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";
-          }
-        }
-      }
-    }
-
-    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");
-    MDC.clear();
-  }
-
-  private List<IArtifactInfo> getArtifacts(INotificationData data) {
-    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();
-    List<IResourceInstance> resources = data.getResources();
-
-    if (data.getServiceArtifacts() != null) {
-      artifacts.addAll(data.getServiceArtifacts());
-    }
-
-    if (resources != null) {
-      for (IResourceInstance resource : resources) {
-        if (resource.getArtifacts() != null) {
-          artifacts.addAll(resource.getArtifacts());
-        }
-      }
-    }
-
-    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());
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Downloaded artifact: " + artifact.getArtifactName());
-
-    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());
-    }
-  }
-
-  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());
-
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());
-    }
-  }
-
-  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;
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright © 2017 AT&T Intellectual Property.\r
+ * Copyright © 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.notification;\r
+\r
+import org.openecomp.sdc.api.IDistributionClient;\r
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;\r
+import org.openecomp.sdc.api.consumer.INotificationCallback;\r
+import org.openecomp.sdc.api.notification.IArtifactInfo;\r
+import org.openecomp.sdc.api.notification.INotificationData;\r
+import org.openecomp.sdc.api.notification.IResourceInstance;\r
+import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;\r
+import org.openecomp.sdc.api.results.IDistributionClientResult;\r
+import org.openecomp.sdc.utils.ArtifactTypeEnum;\r
+import org.openecomp.sdc.utils.DistributionActionResultEnum;\r
+import org.openecomp.sdc.utils.DistributionStatusEnum;\r
+\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.cl.mdc.MdcContext;\r
+import org.openecomp.cl.mdc.MdcOverride;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact;\r
+import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler;\r
+import org.openecomp.modelloader.entity.model.ModelArtifactHandler;\r
+import org.openecomp.modelloader.entity.model.ModelArtifactParser;\r
+import org.openecomp.modelloader.service.ModelLoaderMsgs;\r
+import org.slf4j.MDC;\r
+\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+public class EventCallback implements INotificationCallback {\r
+\r
+  private IDistributionClient client;\r
+  private ModelLoaderConfig config;\r
+  private static Logger logger = LoggerFactory.getInstance()\r
+      .getLogger(EventCallback.class.getName());\r
+  private static Logger auditLogger = LoggerFactory.getInstance()\r
+      .getAuditLogger(EventCallback.class.getName());\r
+  private static Logger metricsLogger = LoggerFactory.getInstance()\r
+      .getMetricsLogger(EventCallback.class.getName());\r
+\r
+  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(\r
+      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");\r
+\r
+  public EventCallback(IDistributionClient client, ModelLoaderConfig config) {\r
+    this.client = client;\r
+    this.config = config;\r
+  }\r
+\r
+  @Override\r
+  public void activateCallback(INotificationData data) {\r
+    // Init MDC\r
+    MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");\r
+\r
+    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+        "Received distribution " + data.getDistributionID());\r
+\r
+    boolean success = true;\r
+    List<IArtifactInfo> artifacts = getArtifacts(data);\r
+    List<Artifact> modelArtifacts = new ArrayList<Artifact>();\r
+    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();\r
+    ModelArtifactParser modelArtParser = new ModelArtifactParser();\r
+\r
+    for (IArtifactInfo artifact : artifacts) {\r
+      // Grab the current time so we can measure the download time for the\r
+      // metrics log\r
+      long startTimeInMs = System.currentTimeMillis();\r
+      MdcOverride override = new MdcOverride();\r
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+      // Download Artifact\r
+      IDistributionClientDownloadResult downloadResult = client.download(artifact);\r
+\r
+      // Generate metrics log\r
+      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,\r
+          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());\r
+\r
+      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());\r
+        success = false;\r
+        break;\r
+      }\r
+\r
+      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+               "Downloaded artifact: " + artifact.getArtifactName() + "  Payload:\n" + new String(downloadResult.getArtifactPayload()));\r
+      \r
+      publishDownloadSuccess(data, artifact, downloadResult);\r
+\r
+      if ((artifact.getArtifactType()\r
+          .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)\r
+          || (artifact.getArtifactType()\r
+              .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {\r
+        List<Artifact> parsedArtifacts = modelArtParser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());\r
+        if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) {\r
+          modelArtifacts.addAll(parsedArtifacts);\r
+        } else {\r
+          success = false;\r
+          publishDeployFailure(data, artifact);\r
+          break;\r
+        }\r
+      } else if (artifact.getArtifactType()\r
+          .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {\r
+        catalogArtifacts\r
+            .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload())));\r
+      }\r
+    }\r
+\r
+    String statusString = "SUCCESS";\r
+    if (success) {\r
+      ModelArtifactHandler modelHandler = new ModelArtifactHandler(config);\r
+      boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts,\r
+          data.getDistributionID());\r
+\r
+      VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config);\r
+      boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts,\r
+          data.getDistributionID());\r
+\r
+      for (IArtifactInfo artifact : artifacts) {\r
+        if ((artifact.getArtifactType()\r
+            .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)\r
+            || (artifact.getArtifactType()\r
+                .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {\r
+          if (modelDeploySuccess) {\r
+            publishDeploySuccess(data, artifact);\r
+          } else {\r
+            publishDeployFailure(data, artifact);\r
+            statusString = "FAILURE";\r
+          }\r
+        } else if (artifact.getArtifactType()\r
+            .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {\r
+          if (catalogDeploySuccess) {\r
+            publishDeploySuccess(data, artifact);\r
+          } else {\r
+            publishDeployFailure(data, artifact);\r
+            statusString = "FAILURE";\r
+          }\r
+        }\r
+      }\r
+    } else {\r
+      statusString = "FAILURE";\r
+    }\r
+\r
+    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");\r
+    MDC.clear();\r
+  }\r
+\r
+  private List<IArtifactInfo> getArtifacts(INotificationData data) {\r
+    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();\r
+    List<IResourceInstance> resources = data.getResources();\r
+\r
+    if (data.getServiceArtifacts() != null) {\r
+      artifacts.addAll(data.getServiceArtifacts());\r
+    }\r
+\r
+    if (resources != null) {\r
+      for (IResourceInstance resource : resources) {\r
+        if (resource.getArtifacts() != null) {\r
+          artifacts.addAll(resource.getArtifacts());\r
+        }\r
+      }\r
+    }\r
+\r
+    return artifacts;\r
+  }\r
+\r
+  private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact,\r
+      String errorMessage) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure",\r
+        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish download failure status: "\r
+              + sendDownloadStatus.getDistributionMessageResult());\r
+    }\r
+\r
+    logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+        "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage);\r
+  }\r
+\r
+  private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact,\r
+      IDistributionClientDownloadResult downloadResult) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success",\r
+        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish download success status: "\r
+              + sendDownloadStatus.getDistributionMessageResult());\r
+    }\r
+\r
+    if (logger.isDebugEnabled()) {\r
+      StringBuilder sb = new StringBuilder();\r
+      sb.append("Downloaded artifact:\n");\r
+      sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName());\r
+      sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription());\r
+      sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum());\r
+      sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL());\r
+      sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType());\r
+      sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription());\r
+      sb.append("\nArtInfo_Serv_Name: " + data.getServiceName());\r
+      sb.append("\nGet_serviceVersion: " + data.getServiceVersion());\r
+      sb.append("\nGet_Service_UUID: " + data.getServiceUUID());\r
+      sb.append("\nArtInfo_DistributionId: " + data.getDistributionID());\r
+      logger.debug(sb.toString());\r
+    }\r
+  }\r
+\r
+  private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendStatus = client.sendDeploymentStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure",\r
+        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult());\r
+    }\r
+  }\r
+\r
+  private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendStatus = client.sendDownloadStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success",\r
+        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());\r
+    }\r
+  }\r
+\r
+  private IDistributionStatusMessage buildStatusMessage(IDistributionClient client,\r
+      INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) {\r
+    IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status,\r
+        data.getDistributionID(), client.getConfiguration().getConsumerID(),\r
+        artifact.getArtifactURL());\r
+\r
+    return statusMessage;\r
+  }\r
+\r
+}\r