Allow handling of legact model artifacts
[aai/model-loader.git] / src / main / java / org / openecomp / modelloader / notification / EventCallback.java
index 8634741..059964e 100644 (file)
-/**\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
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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.IModelParser;
+import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
+import org.openecomp.modelloader.entity.model.ModelParserFactory;
+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>();
+
+    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.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<Artifact> parsedArtifacts = parser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());
+        if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) {
+          modelArtifacts.addAll(parsedArtifacts);
+        } else {
+          success = false;
+          publishDeployFailure(data, artifact);
+          break;
+        }
+      } 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";
+          }
+        }
+      }
+    } else {
+      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());
+
+    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;
+  }
+
+}