diff options
Diffstat (limited to 'sdc-distribution-client/src/main/java/org/openecomp/sdc/impl')
7 files changed, 483 insertions, 93 deletions
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java index dff8a3b..851a198 100644 --- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java @@ -22,12 +22,15 @@ package org.openecomp.sdc.impl; import java.util.List; +import fj.data.Either; import org.openecomp.sdc.api.consumer.IConfiguration; +import org.openecomp.sdc.api.results.IDistributionClientResult; +import org.openecomp.sdc.utils.DistributionActionResultEnum; import org.openecomp.sdc.utils.DistributionClientConstants; -public class Configuration implements IConfiguration{ +public class Configuration implements IConfiguration { - + private List<String> msgBusAddressList; private String asdcAddress; private String user; private String password; @@ -39,12 +42,14 @@ public class Configuration implements IConfiguration{ private String comsumerID; private String keyStorePath; private String keyStorePassword; - private boolean activateServerTLSAuth; + private boolean activateServerTLSAuth; private boolean filterInEmptyResources; private Boolean useHttpsWithDmaap; + private boolean consumeProduceStatusTopic; public Configuration(IConfiguration other) { this.asdcAddress = other.getAsdcAddress(); + this.msgBusAddressList = other.getMsgBusAddress(); this.comsumerID = other.getConsumerID(); this.consumerGroup = other.getConsumerGroup(); this.environmentName = other.getEnvironmentName(); @@ -58,6 +63,7 @@ public class Configuration implements IConfiguration{ this.activateServerTLSAuth = other.activateServerTLSAuth(); this.filterInEmptyResources = other.isFilterInEmptyResources(); this.useHttpsWithDmaap = other.isUseHttpsWithDmaap(); + this.consumeProduceStatusTopic = other.isConsumeProduceStatusTopic(); } @Override @@ -66,6 +72,11 @@ public class Configuration implements IConfiguration{ } @Override + public List<String> getMsgBusAddress() { + return msgBusAddressList; + } + + @Override public String getUser() { return user; } @@ -104,11 +115,11 @@ public class Configuration implements IConfiguration{ public String getConsumerID() { return comsumerID; } - + @Override public String getKeyStorePath() { return keyStorePath; - } + } @Override public String getKeyStorePassword() { @@ -154,7 +165,7 @@ public class Configuration implements IConfiguration{ public void setEnvironmentName(String environmentName) { this.environmentName = environmentName; } - + public void setKeyStorePath(String keyStorePath) { this.keyStorePath = keyStorePath; } @@ -163,7 +174,6 @@ public class Configuration implements IConfiguration{ this.keyStorePassword = keyStorePassword; } - public void setactivateServerTLSAuth(boolean activateServerTLSAuth) { this.activateServerTLSAuth = activateServerTLSAuth; } @@ -172,7 +182,7 @@ public class Configuration implements IConfiguration{ public boolean activateServerTLSAuth() { return this.activateServerTLSAuth; } - + @Override public boolean isFilterInEmptyResources() { return this.filterInEmptyResources; @@ -182,19 +192,37 @@ public class Configuration implements IConfiguration{ public Boolean isUseHttpsWithDmaap() { return this.useHttpsWithDmaap; } - - public void setUseHttpsWithDmaap(boolean useHttpsWithDmaap){ + + public void setUseHttpsWithDmaap(boolean useHttpsWithDmaap) { this.useHttpsWithDmaap = useHttpsWithDmaap; } @Override + public boolean isConsumeProduceStatusTopic() { + return this.consumeProduceStatusTopic; + } + + @Override public String toString() { - return "Configuration [asdcAddress=" + asdcAddress + ", user=" + user + ", password=" + password - + ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout - + ", relevantArtifactTypes=" + relevantArtifactTypes + ", consumerGroup=" + consumerGroup - + ", environmentName=" + environmentName + ", comsumerID=" + comsumerID + ", keyStorePath=" - + keyStorePath + ", keyStorePassword=" + keyStorePassword + ", activateServerTLSAuth=" - + activateServerTLSAuth + ", filterInEmptyResources=" + filterInEmptyResources + ", useHttpsWithDmaap=" - + useHttpsWithDmaap + "]"; + //@formatter:off + return "Configuration ["+ + "asdcAddress=" + asdcAddress + + ", user=" + user + + ", password=" + password + + ", pollingInterval=" + pollingInterval + + ", pollingTimeout=" + pollingTimeout + + ", relevantArtifactTypes=" + relevantArtifactTypes + + ", consumerGroup=" + consumerGroup + + ", environmentName=" + environmentName + + ", comsumerID=" + comsumerID + + ", keyStorePath=" + keyStorePath + + ", keyStorePassword=" + keyStorePassword + + ", activateServerTLSAuth=" + activateServerTLSAuth + + ", filterInEmptyResources=" + filterInEmptyResources + + ", useHttpsWithDmaap=" + useHttpsWithDmaap + + ", consumeProduceStatusTopic=" + consumeProduceStatusTopic + + "]"; + //@formatter:on } + } diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java index 1543256..a8778e5 100644 --- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java @@ -20,6 +20,8 @@ package org.openecomp.sdc.impl; +import static java.util.Objects.isNull; + import java.io.IOException; import java.lang.reflect.Type; import java.net.MalformedURLException; @@ -27,6 +29,7 @@ import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.UUID; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -35,17 +38,16 @@ import java.util.regex.Matcher; import org.openecomp.sdc.api.IDistributionClient; import org.openecomp.sdc.api.IDistributionStatusMessageJsonBuilder; -import org.openecomp.sdc.api.consumer.IConfiguration; -import org.openecomp.sdc.api.consumer.IDistributionStatusMessage; -import org.openecomp.sdc.api.consumer.INotificationCallback; +import org.openecomp.sdc.api.consumer.*; import org.openecomp.sdc.api.notification.IArtifactInfo; import org.openecomp.sdc.api.notification.IVfModuleMetadata; import org.openecomp.sdc.api.results.IDistributionClientDownloadResult; import org.openecomp.sdc.api.results.IDistributionClientResult; -import org.openecomp.sdc.http.AsdcConnectorClient; +import org.openecomp.sdc.http.SdcConnectorClient; import org.openecomp.sdc.http.TopicRegistrationResponse; import org.openecomp.sdc.utils.DistributionActionResultEnum; import org.openecomp.sdc.utils.DistributionClientConstants; +import org.openecomp.sdc.utils.GeneralUtils; import org.openecomp.sdc.utils.Wrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,13 +73,14 @@ public class DistributionClientImpl implements IDistributionClient { private static Logger log = LoggerFactory.getLogger(DistributionClientImpl.class.getName()); - protected AsdcConnectorClient asdcConnector = new AsdcConnectorClient(); + protected SdcConnectorClient asdcConnector = new SdcConnectorClient(); private ScheduledExecutorService executorPool = null; protected CambriaIdentityManager cambriaIdentityManager = null; private List<String> brokerServers; protected ApiCredential credential; protected Configuration configuration; private INotificationCallback callback; + private IStatusCallback statusCallback; private String notificationTopic; private String statusTopic; private boolean isConsumerGroupGenerated = false; @@ -139,7 +142,8 @@ public class DistributionClientImpl implements IDistributionClient { public synchronized IDistributionClientResult start() { log.info("start DistributionClient"); - CambriaConsumer cambriaConsumer = null; + IDistributionClientResult startResult; + CambriaConsumer cambriaNotificationConsumer = null; Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>(); validateRunReady(errorWrapper); if (errorWrapper.isEmpty()) { @@ -147,30 +151,49 @@ public class DistributionClientImpl implements IDistributionClient { } if (errorWrapper.isEmpty()) { try { - cambriaConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(notificationTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers) + cambriaNotificationConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(notificationTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers) .withSocketTimeout(configuration.getPollingTimeout() * 1000).build(); + } catch (MalformedURLException | GeneralSecurityException e) { handleCambriaInitFailure(errorWrapper, e); } } - + if (errorWrapper.isEmpty()) { + + List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes(); + // Remove nulls from list - workaround for how configuration is built + while (relevantArtifactTypes.remove(null)); + + NotificationConsumer consumer = new NotificationConsumer(cambriaNotificationConsumer, callback, relevantArtifactTypes, this); + executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE); + executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS); + + handleStatusConsumer(errorWrapper, executorPool); + } if (!errorWrapper.isEmpty()) { - return errorWrapper.getInnerElement(); + startResult = errorWrapper.getInnerElement(); + } + else{ + startResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client started successfuly"); + isStarted = true; } - - List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes(); - // Remove nulls from list - workaround for how configuration is built - while (relevantArtifactTypes.remove(null)); - - NotificationConsumer consumer = new NotificationConsumer(cambriaConsumer, callback, relevantArtifactTypes, this); - executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE); - executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS); - - DistributionClientResultImpl startResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client started successfuly"); - isStarted = true; return startResult; } + private void handleStatusConsumer(Wrapper<IDistributionClientResult> errorWrapper, ScheduledExecutorService executorPool) { + if( configuration.isConsumeProduceStatusTopic()){ + CambriaConsumer cambriaStatusConsumer = null; + try { + cambriaStatusConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(statusTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers) + .withSocketTimeout(configuration.getPollingTimeout() * 1000).build(); + StatusConsumer statusConsumer = new StatusConsumer(cambriaStatusConsumer, statusCallback); + executorPool.scheduleAtFixedRate(statusConsumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS); + } catch (MalformedURLException | GeneralSecurityException e) { + handleCambriaInitFailure(errorWrapper, e); + } + } + } + @Override /* see javadoc */ public synchronized IDistributionClientResult stop() { @@ -219,7 +242,24 @@ public class DistributionClientImpl implements IDistributionClient { } return asdcConnector.dowloadArtifact(artifactInfo); } + @Override + public synchronized IDistributionClientResult init(IConfiguration conf, INotificationCallback notificationCallback, + IStatusCallback statusCallback) { + IDistributionClientResult initResult; + if( !conf.isConsumeProduceStatusTopic() ){ + initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG, "configuration is invalid: isConsumeProduceStatusTopic() should be set to 'true'" ); + } + else if( isNull(statusCallback) ){ + initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG, "configuration is invalid: statusCallback is not defined" ); + } + else{ + this.statusCallback = statusCallback; + initResult = init(conf, notificationCallback); + } + return initResult; + } + @Override /* * see javadoc @@ -236,7 +276,7 @@ public class DistributionClientImpl implements IDistributionClient { if (errorWrapper.isEmpty()) { validateAndInitConfiguration(errorWrapper, conf); } - // 1. get servers list from ASDC + // 1. get ueb server list from configuration if (errorWrapper.isEmpty()) { initUebServerList(errorWrapper); } @@ -295,6 +335,7 @@ public class DistributionClientImpl implements IDistributionClient { } private void validateArtifactTypesWithAsdcServer(IConfiguration conf, Wrapper<IDistributionClientResult> errorWrapper) { + asdcConnector.init(configuration); Either<List<String>, IDistributionClientResult> eitherValidArtifactTypesList = asdcConnector.getValidArtifactTypesList(); if (eitherValidArtifactTypesList.isRight()) { DistributionActionResultEnum errorType = eitherValidArtifactTypesList.right().value().getDistributionActionResult(); @@ -319,15 +360,16 @@ public class DistributionClientImpl implements IDistributionClient { } private void initUebServerList(Wrapper<IDistributionClientResult> errorWrapper) { - log.debug("get cluster server list from ASDC"); - asdcConnector.init(configuration); + log.debug("get ueb cluster server list from component(configuration file)"); - Either<List<String>, IDistributionClientResult> serverListResponse = asdcConnector.getServerList(); + Either<List<String>, IDistributionClientResult> serverListResponse = getUEBServerList(); if (serverListResponse.isRight()) { errorWrapper.setInnerElement(serverListResponse.right().value()); } else { + brokerServers = serverListResponse.left().value(); } + } private void validateNotInitilized(Wrapper<IDistributionClientResult> errorWrapper) { @@ -457,32 +499,25 @@ public class DistributionClientImpl implements IDistributionClient { result = DistributionActionResultEnum.CONF_MISSING_USERNAME; } else if (conf.getPassword() == null || conf.getPassword().isEmpty()) { result = DistributionActionResultEnum.CONF_MISSING_PASSWORD; + } else if (conf.getMsgBusAddress() == null || conf.getMsgBusAddress().isEmpty()) { + result = DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS; } else if (conf.getAsdcAddress() == null || conf.getAsdcAddress().isEmpty()) { result = DistributionActionResultEnum.CONF_MISSING_ASDC_FQDN; } else if (!isValidFqdn(conf.getAsdcAddress())) { result = DistributionActionResultEnum.CONF_INVALID_ASDC_FQDN; + } else if (!isValidFqdns(conf.getMsgBusAddress())){ + result = DistributionActionResultEnum.CONF_INVALID_MSG_BUS_ADDRESS; } else if (conf.getEnvironmentName() == null || conf.getEnvironmentName().isEmpty()) { result = DistributionActionResultEnum.CONF_MISSING_ENVIRONMENT_NAME; } else if (conf.getRelevantArtifactTypes() == null || conf.getRelevantArtifactTypes().isEmpty()) { result = DistributionActionResultEnum.CONF_MISSING_ARTIFACT_TYPES; } + else if( conf.isConsumeProduceStatusTopic() && Objects.isNull(statusCallback) ){ + result = DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG; + } // DistributionActionResultEnum.SUCCESS else { - this.configuration = new Configuration(conf); - if (!isPollingIntervalValid(conf.getPollingInterval())) { - configuration.setPollingInterval(DistributionClientConstants.MIN_POLLING_INTERVAL_SEC); - } - if (!isPollingTimeoutValid(conf.getPollingTimeout())) { - configuration.setPollingTimeout(DistributionClientConstants.POLLING_TIMEOUT_SEC); - } - if (conf.getConsumerGroup() == null) { - generateConsumerGroup(); - } - - //Default use HTTPS with DMAAP - if (conf.isUseHttpsWithDmaap() == null){ - configuration.setUseHttpsWithDmaap(true); - } + handleValidConf(conf); } if (result != DistributionActionResultEnum.SUCCESS) { @@ -495,6 +530,24 @@ public class DistributionClientImpl implements IDistributionClient { return result; } + private void handleValidConf(IConfiguration conf) { + this.configuration = new Configuration(conf); + if (!isPollingIntervalValid(conf.getPollingInterval())) { + configuration.setPollingInterval(DistributionClientConstants.MIN_POLLING_INTERVAL_SEC); + } + if (!isPollingTimeoutValid(conf.getPollingTimeout())) { + configuration.setPollingTimeout(DistributionClientConstants.POLLING_TIMEOUT_SEC); + } + if (conf.getConsumerGroup() == null) { + generateConsumerGroup(); + } + + //Default use HTTPS with DMAAP + if (conf.isUseHttpsWithDmaap() == null){ + configuration.setUseHttpsWithDmaap(true); + } + } + private void generateConsumerGroup() { String generatedConsumerGroup = UUID.randomUUID().toString(); configuration.setConsumerGroup(generatedConsumerGroup); @@ -509,6 +562,19 @@ public class DistributionClientImpl implements IDistributionClient { } return false; } + protected boolean isValidFqdns(List<String> fqdns) { + if (fqdns != null && !fqdns.isEmpty()) { + for (String fqdn : fqdns) { + if (isValidFqdn(fqdn)) { + continue; + } else { + return false; + } + } + return true; + } + return false; + } private void shutdownExecutor() { if (executorPool == null) @@ -633,6 +699,31 @@ public class DistributionClientImpl implements IDistributionClient { } @Override + public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage) { + log.info("DistributionClient - sendComponentDone status"); + Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>(); + validateRunReady(errorWrapper); + if (!errorWrapper.isEmpty()) { + return errorWrapper.getInnerElement(); + } + return sendStatus(DistributionStatusMessageJsonBuilderFactory.getSimpleBuilder(statusMessage)); + + } + + @Override + public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage, + String errorReason) { + log.info("DistributionClient - sendComponentDone status with errorReason"); + Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>(); + validateRunReady(errorWrapper); + if (!errorWrapper.isEmpty()) { + return errorWrapper.getInnerElement(); + } + return sendStatus(DistributionStatusMessageJsonBuilderFactory.getErrorReasonBuilder(statusMessage, errorReason)); + } + + + @Override public List<IVfModuleMetadata> decodeVfModuleArtifact(byte[] artifactPayload) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); String vfModuleJsonString = new String(artifactPayload, StandardCharsets.UTF_8); @@ -641,4 +732,47 @@ public class DistributionClientImpl implements IDistributionClient { List<IVfModuleMetadata> vfModules = gson.fromJson(vfModuleJsonString, type); return vfModules; } + + + public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage) { + log.info("DistributionClient - sendFinalDistributionStatus status"); + Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>(); + validateRunReady(errorWrapper); + if (!errorWrapper.isEmpty()) { + return errorWrapper.getInnerElement(); + } + return sendStatus(DistributionStatusMessageJsonBuilderFactory.getSimpleBuilder(statusMessage)); + + } + + + @Override + public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage, + String errorReason) { + log.info("DistributionClient - sendFinalDistributionStatus status with errorReason"); + Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>(); + validateRunReady(errorWrapper); + if (!errorWrapper.isEmpty()) { + return errorWrapper.getInnerElement(); + } + return sendStatus(DistributionStatusMessageJsonBuilderFactory.getErrorReasonBuilder(statusMessage, errorReason)); + + + } + + public Either<List<String>,IDistributionClientResult> getUEBServerList() { + List<String> msgBusAddresses = configuration.getMsgBusAddress(); + if(msgBusAddresses.isEmpty()){ + return Either.right(new DistributionClientResultImpl(DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS, "Message bus address was not found in the config file")); + } + else{ + return GeneralUtils.convertToValidHostName(msgBusAddresses); + } + } + + + + + + } diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java index d570142..d9ed654 100644 --- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java @@ -20,78 +20,80 @@ package org.openecomp.sdc.impl; +import org.openecomp.sdc.api.consumer.IComponentDoneStatusMessage; import org.openecomp.sdc.api.consumer.IDistributionStatusMessage; +import org.openecomp.sdc.api.consumer.IFinalDistrStatusMessage; import org.openecomp.sdc.utils.DistributionStatusEnum; class DistributionStatusMessageImpl implements IDistributionStatusMessage { - - + String distributionID; String consumerID; long timestamp; String artifactURL; DistributionStatusEnum status; String errorReason; - - - public DistributionStatusMessageImpl(IDistributionStatusMessage message){ + private String componentName; + + public DistributionStatusMessageImpl(IDistributionStatusMessage message) { super(); distributionID = message.getDistributionID(); consumerID = message.getConsumerID(); timestamp = message.getTimestamp(); artifactURL = message.getArtifactURL(); status = message.getStatus(); - + + } + + public DistributionStatusMessageImpl(IComponentDoneStatusMessage message) { + super(); + distributionID = message.getDistributionID(); + consumerID = message.getConsumerID(); + timestamp = message.getTimestamp(); + artifactURL = message.getArtifactURL(); + status = message.getStatus(); + componentName = message.getComponentName(); + } + + public DistributionStatusMessageImpl(IFinalDistrStatusMessage message) { + super(); + distributionID = message.getDistributionID(); + consumerID = message.getConsumerID(); + timestamp = message.getTimestamp(); + + artifactURL = ""; + status = message.getStatus(); + componentName = message.getComponentName(); } @Override public String getDistributionID() { - + return distributionID; } @Override public String getConsumerID() { - + return consumerID; } @Override public long getTimestamp() { - + return timestamp; } @Override public String getArtifactURL() { - + return artifactURL; } @Override public DistributionStatusEnum getStatus() { - - return status; - } - - public void setDistributionID(String distributionID) { - this.distributionID = distributionID; - } - - public void setConsumerID(String consumerID) { - this.consumerID = consumerID; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public void setArtifactURL(String artifactURL) { - this.artifactURL = artifactURL; - } - public void setStatus(DistributionStatusEnum status) { - this.status = status; + return status; } public String getErrorReason() { @@ -102,4 +104,10 @@ class DistributionStatusMessageImpl implements IDistributionStatusMessage { this.errorReason = errorReason; } + public String getComponentName() { + return componentName; + } + + + } diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java index 9d97805..e2f9f89 100644 --- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java @@ -21,7 +21,9 @@ package org.openecomp.sdc.impl; import org.openecomp.sdc.api.IDistributionStatusMessageJsonBuilder; +import org.openecomp.sdc.api.consumer.IComponentDoneStatusMessage; import org.openecomp.sdc.api.consumer.IDistributionStatusMessage; +import org.openecomp.sdc.api.consumer.IFinalDistrStatusMessage; import org.openecomp.sdc.utils.DistributionStatusEnum; import com.google.gson.Gson; @@ -35,6 +37,18 @@ public class DistributionStatusMessageJsonBuilderFactory { return prepareBuilderFromImpl(message); } + + public static IDistributionStatusMessageJsonBuilder getSimpleBuilder(IComponentDoneStatusMessage statusMessage){ + DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage); + + return prepareBuilderFromImpl(message); + } + + public static IDistributionStatusMessageJsonBuilder getSimpleBuilder(IFinalDistrStatusMessage statusMessage){ + DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage); + + return prepareBuilderFromImpl(message); + } public static IDistributionStatusMessageJsonBuilder getErrorReasonBuilder(IDistributionStatusMessage statusMessage, String errorReason){ DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage); @@ -42,6 +56,20 @@ public class DistributionStatusMessageJsonBuilderFactory { return prepareBuilderFromImpl(message); } + + public static IDistributionStatusMessageJsonBuilder getErrorReasonBuilder(IComponentDoneStatusMessage statusMessage, + String errorReason) { + DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage); + message.setErrorReason(errorReason); + return prepareBuilderFromImpl(message); + } + + public static IDistributionStatusMessageJsonBuilder getErrorReasonBuilder(IFinalDistrStatusMessage statusMessage, + String errorReason) { + DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage); + message.setErrorReason(errorReason); + return prepareBuilderFromImpl(message); + } static IDistributionStatusMessageJsonBuilder prepareBuilderForNotificationStatus(final String consumerId, final long currentTimeMillis, final String distributionId, final ArtifactInfoImpl artifactInfo, boolean isNotified){ @@ -112,6 +140,9 @@ public class DistributionStatusMessageJsonBuilderFactory { private enum DistributionStatusNotificationEnum { NOTIFIED, NOT_NOTIFIED } + + + } diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java new file mode 100644 index 0000000..34d85ec --- /dev/null +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java @@ -0,0 +1,66 @@ +/*- + * ============LICENSE_START======================================================= + * sdc-distribution-client + * ================================================================================ + * 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.sdc.impl; + +import org.openecomp.sdc.api.consumer.IStatusCallback; +import org.openecomp.sdc.api.notification.IStatusData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.att.nsa.cambria.client.CambriaConsumer; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +class StatusConsumer implements Runnable { + + private static Logger log = LoggerFactory.getLogger(StatusConsumer.class.getName()); + + private CambriaConsumer cambriaConsumer; + private IStatusCallback clientCallback; + + public StatusConsumer(CambriaConsumer cambriaConsumer, IStatusCallback clientCallback) { + this.cambriaConsumer = cambriaConsumer; + this.clientCallback = clientCallback; + } + + @Override + public void run() { + + try { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + for (String statusMsg : cambriaConsumer.fetch()) { + log.debug("received message from topic"); + log.debug("recieved notification from broker: {}", statusMsg); + IStatusData statusData = gson.fromJson(statusMsg, StatusDataImpl.class); + clientCallback.activateCallback(statusData); + + + } + + } catch (Exception e) { + log.error("Error exception occured when fetching with Cambria Client:{}", e.getMessage()); + log.debug("Error exception occured when fetching with Cambria Client:{}", e.getMessage(), e); + } + } + + + +} diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java new file mode 100644 index 0000000..119a7f3 --- /dev/null +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java @@ -0,0 +1,95 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * 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.sdc.impl; + +import org.openecomp.sdc.api.notification.IStatusData; +import org.openecomp.sdc.utils.DistributionStatusEnum; + +public class StatusDataImpl implements IStatusData{ + + String distributionID; + String consumerID; + long timestamp; + String artifactURL; + DistributionStatusEnum status; + String componentName; + String errorReason; + + @Override + public String getDistributionID() { + return distributionID; + } + + public void setDistributionID(String distributionId) { + this.distributionID = distributionId; + } + @Override + public String getConsumerID() { + return consumerID; + } + + public void setConsumerID(String consumerId) { + this.consumerID = consumerId; + } + @Override + public Long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + @Override + public String getArtifactURL() { + return artifactURL; + } + + public void setArtifactURL(String artifactURL) { + this.artifactURL = artifactURL; + } + @Override + public DistributionStatusEnum getStatus() { + return status; + } + + public void setStatus(DistributionStatusEnum status) { + this.status = status; + } + + + @Override + public String toString() { + return "StatusDataImpl [distributionId=" + distributionID + ", consumerId=" + consumerID + ", timestamp=" + timestamp + ", artifactURL=" + artifactURL + ", status=" + status +", errorReason=" + errorReason+ "]"; + } + @Override + public String getComponentName() { + return componentName; + } + + @Override + public String getErrorReason() { + return errorReason; + } + + + + +} diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java index b8044cd..1730290 100644 --- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java +++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java @@ -23,18 +23,14 @@ package org.openecomp.sdc.impl.mock; import java.util.List; import org.openecomp.sdc.api.IDistributionClient; -import org.openecomp.sdc.api.consumer.IConfiguration; -import org.openecomp.sdc.api.consumer.IDistributionStatusMessage; -import org.openecomp.sdc.api.consumer.INotificationCallback; +import org.openecomp.sdc.api.consumer.*; import org.openecomp.sdc.api.notification.IArtifactInfo; import org.openecomp.sdc.api.notification.IVfModuleMetadata; import org.openecomp.sdc.api.results.IDistributionClientDownloadResult; import org.openecomp.sdc.api.results.IDistributionClientResult; /** Mock Implementation */ public class DistributionClientStubImpl implements IDistributionClient{ - public DistributionClientStubImpl(){ - - } + public IDistributionClientResult updateConfiguration(IConfiguration newConf) { return new DistributionClientResultStubImpl(); @@ -67,6 +63,12 @@ public class DistributionClientStubImpl implements IDistributionClient{ } @Override + public IDistributionClientResult init(IConfiguration conf, INotificationCallback notificationCallback, + IStatusCallback statusCallback) { + return new DistributionClientResultStubImpl(); + } + + @Override public IConfiguration getConfiguration() { // TODO Auto-generated method stub return null; @@ -87,10 +89,36 @@ public class DistributionClientStubImpl implements IDistributionClient{ } @Override + public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage) { + return null; + } + + @Override + public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage) { + return null; + } + + @Override public List<IVfModuleMetadata> decodeVfModuleArtifact(byte[] artifactPayload) { // TODO Auto-generated method stub return null; } + + @Override + public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage, + String errorReason) { + // TODO Auto-generated method stub + return null; + } + + @Override + public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage, String errorReason) { + // TODO Auto-generated method stub + return null; + } + + + |