diff options
author | Michael Lando <ml636r@att.com> | 2018-03-04 14:53:33 +0200 |
---|---|---|
committer | Michael Lando <ml636r@att.com> | 2018-03-07 13:19:05 +0000 |
commit | a5445100050e49e83f73424198d73cd72d672a4d (patch) | |
tree | cacf4df817df31be23e4e790d1dda857bdae061e /catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java | |
parent | 51157f92c21976cba4914c378aaa3cba49826931 (diff) |
Sync Integ to Master
Change-Id: I71e3acc26fa612127756ac04073a522b9cc6cd74
Issue-ID: SDC-977
Signed-off-by: Gitelman, Tal (tg851x) <tg851x@intl.att.com>
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java | 633 |
1 files changed, 306 insertions, 327 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java index bd3d74e323..7d2d4680b5 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java @@ -20,361 +20,340 @@ package org.openecomp.sdc.be.components.distribution.engine; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.config.ConfigurationManager; import org.openecomp.sdc.be.config.DistributionEngineConfiguration; -import org.openecomp.sdc.be.impl.ComponentsUtils; +import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.model.Service; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; -import org.openecomp.sdc.common.config.EcompErrorName; +import org.openecomp.sdc.be.resources.data.OperationalEnvironmentEntry; import org.openecomp.sdc.common.util.YamlToObjectConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import fj.data.Either; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Component("distributionEngine") public class DistributionEngine implements IDistributionEngine { - public static final Pattern FQDN_PATTERN = Pattern.compile("^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]))*(:[0-9]{2,4})*$", Pattern.CASE_INSENSITIVE); - - public static void main(String[] args) { - - List<String> servers = new ArrayList<>(); - - servers.add("uebsb91kcdc.it.att.com:3904"); - servers.add("uebsb91kcdc.it.att.com:3904"); - servers.add("uebsb91kcdc.it.att.com:3904"); - - YamlToObjectConverter converter = new YamlToObjectConverter(); - DistributionEngineConfiguration distributionEngineConfiguration = converter.convert("src/test/resources/config/catalog-be/distribEngine1/distribution-engine-configuration.yaml", DistributionEngineConfiguration.class); - - DistributionEngineInitTask distributionEngineInitTask = new DistributionEngineInitTask(2l, distributionEngineConfiguration, "PROD", new AtomicBoolean(false), null, null); - distributionEngineInitTask.startTask(); - - } - - @javax.annotation.Resource - private ComponentsUtils componentUtils; - - @javax.annotation.Resource - private DistributionNotificationSender distributionNotificationSender; - - @javax.annotation.Resource - private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder; - - @javax.annotation.Resource - private DistributionEngineClusterHealth distributionEngineClusterHealth; - - private static Logger logger = LoggerFactory.getLogger(DistributionEngine.class.getName()); - - private Map<String, DistributionEngineInitTask> envNamePerInitTask = new HashMap<String, DistributionEngineInitTask>(); - private Map<String, DistributionEnginePollingTask> envNamePerPollingTask = new HashMap<String, DistributionEnginePollingTask>(); - - private Map<String, AtomicBoolean> envNamePerStatus = new HashMap<String, AtomicBoolean>(); - - @Override - public boolean isActive() { - - if (true == envNamePerInitTask.isEmpty()) { - return false; - } - - for (DistributionEngineInitTask task : envNamePerInitTask.values()) { - boolean active = task.isActive(); - if (active == false) { - return false; - } - } - return true; - } - - @PostConstruct - private void init() { - - logger.trace("Enter init method of DistributionEngine"); - - DistributionEngineConfiguration distributionEngineConfiguration = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration(); - - boolean startDistributionEngine = distributionEngineConfiguration.isStartDistributionEngine(); - logger.debug("Distribution engine activation parameter is {}", startDistributionEngine); - if (false == startDistributionEngine) { - logger.info("The disribution engine is disabled"); - - this.distributionEngineClusterHealth.setHealthCheckUebIsDisabled(); - - return; - } - - boolean isValidConfig = validateConfiguration(distributionEngineConfiguration); - - if (false == isValidConfig) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeUebSystemError, DistributionEngineInitTask.INIT_DISTRIBUTION_ENGINE_FLOW, "validate distribution configuration in init phase"); - BeEcompErrorManager.getInstance().logBeUebSystemError(DistributionEngineInitTask.INIT_DISTRIBUTION_ENGINE_FLOW, "validate distribution configuration in init phase"); - - this.distributionEngineClusterHealth.setHealthCheckUebConfigurationError(); - return; - } - - List<String> environments = distributionEngineConfiguration.getEnvironments(); - - for (String envName : environments) { - - DistributionEnginePollingTask distributionEnginePollingTask = new DistributionEnginePollingTask(distributionEngineConfiguration, envName, componentUtils, distributionEngineClusterHealth); - - logger.debug("Init task for environment {}", envName); - - AtomicBoolean status = new AtomicBoolean(false); - envNamePerStatus.put(envName, status); - DistributionEngineInitTask distributionEngineInitTask = new DistributionEngineInitTask(0l, distributionEngineConfiguration, envName, status, componentUtils, distributionEnginePollingTask); - distributionEngineInitTask.startTask(); - envNamePerInitTask.put(envName, distributionEngineInitTask); - envNamePerPollingTask.put(envName, distributionEnginePollingTask); - } - - logger.debug("Init UEB health check"); - distributionEngineClusterHealth.startHealthCheckTask(envNamePerStatus); - - logger.trace("Exit init method of DistributionEngine"); - - } - - @PreDestroy - public void shutdown() { - logger.info("distribution engine shutdown - start"); - if (envNamePerInitTask != null) { - for (DistributionEngineInitTask task : envNamePerInitTask.values()) { - task.destroy(); - } - } - if (envNamePerPollingTask != null) { - for (DistributionEnginePollingTask task : envNamePerPollingTask.values()) { - task.destroy(); - } - } - - } - - /** - * validate mandatory configuration parameters received - * - * @param deConfiguration - * @return - */ - protected boolean validateConfiguration(DistributionEngineConfiguration deConfiguration) { - - String methodName = new Object() { - }.getClass().getEnclosingMethod().getName(); - - boolean result = true; - result = isValidServers(deConfiguration.getUebServers(), methodName, "uebServers") && result; - result = isValidParam(deConfiguration.getEnvironments(), methodName, "environments") && result; - result = isValidParam(deConfiguration.getUebPublicKey(), methodName, "uebPublicKey") && result; - result = isValidParam(deConfiguration.getUebSecretKey(), methodName, "uebSecretKey") && result; - result = isValidParam(deConfiguration.getDistributionNotifTopicName(), methodName, "distributionNotifTopicName") && result; - result = isValidParam(deConfiguration.getDistributionStatusTopicName(), methodName, "distributionStatusTopicName") && result; - result = isValidObject(deConfiguration.getCreateTopic(), methodName, "createTopic") && result; - result = isValidObject(deConfiguration.getDistributionStatusTopic(), methodName, "distributionStatusTopic") && result; - result = isValidObject(deConfiguration.getInitMaxIntervalSec(), methodName, "initMaxIntervalSec") && result; - result = isValidObject(deConfiguration.getInitRetryIntervalSec(), methodName, "initRetryIntervalSec") && result; - result = isValidParam(deConfiguration.getDistributionStatusTopic().getConsumerId(), methodName, "consumerId") && result; - result = isValidParam(deConfiguration.getDistributionStatusTopic().getConsumerGroup(), methodName, "consumerGroup") && result; - result = isValidObject(deConfiguration.getDistributionStatusTopic().getFetchTimeSec(), methodName, "fetchTimeSec") && result; - result = isValidObject(deConfiguration.getDistributionStatusTopic().getPollingIntervalSec(), methodName, "pollingIntervalSec") && result; - - return result; - } - - private boolean isValidServers(List<String> uebServers, String methodName, String paramName) { - - if (uebServers == null || uebServers.size() == 0) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeMissingConfigurationError, methodName, paramName); - BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); - return false; - } - - if (uebServers.size() < 2) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeConfigurationInvalidListSizeError, methodName, paramName, "2"); - BeEcompErrorManager.getInstance().logBeConfigurationInvalidListSizeError(methodName, paramName, 2); - return false; - } - - for (String serverFqdn : uebServers) { - if (false == isValidFqdn(serverFqdn)) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeInvalidConfigurationError, methodName, paramName, serverFqdn); - BeEcompErrorManager.getInstance().logBeInvalidConfigurationError(methodName, paramName, serverFqdn); - return false; - } - } - - return true; - } - - private boolean isValidFqdn(String serverFqdn) { - - try { - Matcher matcher = FQDN_PATTERN.matcher(serverFqdn); - return matcher.matches(); - - } catch (Exception e) { - logger.debug("Failed to match value of address {}", serverFqdn, e); - return false; - } - - } - - private boolean isEmptyParam(String param) { - - if (param == null || true == param.isEmpty()) { - return true; - } - - return false; - } - - private boolean isValidParam(String paramValue, String methodName, String paramName) { - - if (isEmptyParam(paramValue)) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeMissingConfigurationError, methodName, paramName); - BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); - return false; - } - return true; - - } - - private boolean isValidParam(List<String> paramValue, String methodName, String paramName) { - - if (isEmptyList(paramValue)) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeMissingConfigurationError, methodName, paramName); - BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); - return false; - } - return true; - - } - - private boolean isValidObject(Object paramValue, String methodName, String paramName) { - - if (paramValue == null) { - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeMissingConfigurationError, methodName, paramName); - BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); - return false; - } - return true; - - } - - private boolean isEmptyList(List<String> list) { - if (list == null || true == list.isEmpty()) { - return true; - } - return false; - } - - private String getEnvironmentErrorDescription(StorageOperationStatus status) { - - switch (status) { - case DISTR_ENVIRONMENT_NOT_AVAILABLE: - return "environment is unavailable"; - case DISTR_ENVIRONMENT_NOT_FOUND: - return "environment is not configured in our system"; - case DISTR_ENVIRONMENT_SENT_IS_INVALID: - return "environment name is invalid"; - - default: - return "unkhown"; - - } - } - - public StorageOperationStatus isEnvironmentAvailable(String envName) { - - if (envName == null || true == envName.isEmpty()) { - - return StorageOperationStatus.DISTR_ENVIRONMENT_SENT_IS_INVALID; - } - - AtomicBoolean status = envNamePerStatus.get(envName); - if (status == null) { - return StorageOperationStatus.DISTR_ENVIRONMENT_NOT_FOUND; - } - - if (false == status.get()) { - return StorageOperationStatus.DISTR_ENVIRONMENT_NOT_AVAILABLE; - } - return StorageOperationStatus.OK; - } + private static final Logger LOGGER = LoggerFactory.getLogger(DistributionEngine.class); + private static final Pattern FQDN_PATTERN = Pattern.compile("^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]))*(:[0-9]{2,4})*$", Pattern.CASE_INSENSITIVE); - public StorageOperationStatus isEnvironmentAvailable() { + @Autowired + private EnvironmentsEngine environmentsEngine; - String envName = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration().getEnvironments().get(0); + @Resource + private DistributionNotificationSender distributionNotificationSender; - return isEnvironmentAvailable(envName); - } + @Resource + private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder; - @Override - public void disableEnvironment(String envName) { - // TODO disable tasks - AtomicBoolean status = envNamePerStatus.get(envName); - status.set(false); - } + @Resource + private DistributionEngineClusterHealth distributionEngineClusterHealth; - @Override - public StorageOperationStatus notifyService(String distributionId, Service service, INotificationData notificationData, String envName, String userId, String modifierName) { + @Resource + private ServiceDistributionValidation serviceDistributionValidation; - logger.debug("Received notify service request. distributionId = {}, serviceUuid = {} serviceUid = {}, envName = {}, userId = {}, modifierName {}", distributionId, service.getUUID(), service.getUniqueId(), envName, userId, modifierName); + private Map<String, DistributionEngineInitTask> envNamePerInitTask = new HashMap<>(); + private Map<String, DistributionEnginePollingTask> envNamePerPollingTask = new HashMap<>(); + private Map<String, AtomicBoolean> envNamePerStatus = new HashMap<>(); - DistributionEngineConfiguration deConfiguration = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration(); + /** + * The main method for testing only + * @param args + */ + public static void main(String[] args) { - String distributionNotifTopicName = deConfiguration.getDistributionNotifTopicName(); - String topicName = DistributionEngineInitTask.buildTopicName(distributionNotifTopicName, envName); + List<String> servers = new ArrayList<>(); + String server = "uebsb91kcdc.it.att.com:3904"; + servers.add(server); + servers.add(server); + servers.add(server); - StorageOperationStatus sendNotification = distributionNotificationSender.sendNotification(topicName, distributionId, deConfiguration, envName, notificationData, service, userId, modifierName); + YamlToObjectConverter converter = new YamlToObjectConverter(); + DistributionEngineConfiguration distributionEngineConfiguration = converter.convert("src/test/resources/config/catalog-be/distribEngine1/distribution-engine-configuration.yaml", DistributionEngineConfiguration.class); - logger.debug("Finish notifyService. status is {}", sendNotification); + DistributionEngineInitTask distributionEngineInitTask = new DistributionEngineInitTask(2l, distributionEngineConfiguration, "PROD", new AtomicBoolean(false), null, null, null); + distributionEngineInitTask.startTask(); + + } - return sendNotification; - } + @Override + public boolean isActive() { - @Override - public Either<INotificationData, StorageOperationStatus> isReadyForDistribution(Service service, String distributionId, String envName) { - StorageOperationStatus status = isEnvironmentAvailable(envName); - if (status != StorageOperationStatus.OK) { - String envErrorDec = getEnvironmentErrorDescription(status); - BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeDistributionEngineSystemError, DistributionNotificationSender.DISTRIBUTION_NOTIFICATION_SENDING, - "Environment name " + envName + " is not available. Reason : " + envErrorDec); - BeEcompErrorManager.getInstance().logBeDistributionEngineSystemError(DistributionNotificationSender.DISTRIBUTION_NOTIFICATION_SENDING, "Environment name " + envName + " is not available. Reason : " + envErrorDec); - return Either.right(status); - } + if (envNamePerInitTask.isEmpty()) { + return false; + } - Either<Boolean, StorageOperationStatus> isServiceContainsDeploymentArtifactsStatus = serviceDistributionArtifactsBuilder.isServiceContainsDeploymentArtifacts(service); - if (isServiceContainsDeploymentArtifactsStatus.isRight()) { - StorageOperationStatus operationStatus = isServiceContainsDeploymentArtifactsStatus.right().value(); - return Either.right(operationStatus); - } else { - Boolean isDeploymentArtifactExists = isServiceContainsDeploymentArtifactsStatus.left().value(); - if (isDeploymentArtifactExists == null || isDeploymentArtifactExists.booleanValue() == false) { - return Either.right(StorageOperationStatus.DISTR_ARTIFACT_NOT_FOUND); - } - } + for (DistributionEngineInitTask task : envNamePerInitTask.values()) { + boolean active = task.isActive(); + if (!active) { + return false; + } + } + return true; + } - INotificationData value = serviceDistributionArtifactsBuilder.buildResourceInstanceForDistribution(service, distributionId); - value = serviceDistributionArtifactsBuilder.buildServiceForDistribution(value, service); + @PostConstruct + private void init() { + + LOGGER.trace("Enter init method of DistributionEngine"); + + DistributionEngineConfiguration distributionEngineConfiguration = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration(); + + boolean startDistributionEngine = distributionEngineConfiguration.isStartDistributionEngine(); + LOGGER.debug("Distribution engine activation parameter is {}", startDistributionEngine); + if (!startDistributionEngine) { + LOGGER.info("The disribution engine is disabled"); - return Either.left(value); - } + this.distributionEngineClusterHealth.setHealthCheckUebIsDisabled(); + + return; + } + + boolean isValidConfig = validateConfiguration(distributionEngineConfiguration); + + if (!isValidConfig) { + BeEcompErrorManager.getInstance().logBeUebSystemError(DistributionEngineInitTask.INIT_DISTRIBUTION_ENGINE_FLOW, "validate distribution configuration in init phase"); + + this.distributionEngineClusterHealth.setHealthCheckUebConfigurationError(); + return; + } + + List<String> environments = distributionEngineConfiguration.getEnvironments(); + + for (String envName : environments) { + LOGGER.debug("init task for environment {}", envName); + AtomicBoolean status = new AtomicBoolean(false); + envNamePerStatus.put(envName, status); + environmentsEngine.connectUebTopicForDistributionConfTopic(envName, status, envNamePerInitTask, envNamePerPollingTask); + } + + LOGGER.debug("init UEB health check"); + distributionEngineClusterHealth.startHealthCheckTask(envNamePerStatus); + + LOGGER.trace("Exit init method of DistributionEngine"); + + } + + @PreDestroy + public void shutdown() { + LOGGER.info("distribution engine shutdown - start"); + if (envNamePerInitTask != null) { + for (DistributionEngineInitTask task : envNamePerInitTask.values()) { + task.destroy(); + } + } + if (envNamePerPollingTask != null) { + for (DistributionEnginePollingTask task : envNamePerPollingTask.values()) { + task.destroy(); + } + } + + } + + /** + * validate mandatory configuration parameters received + * + * @param deConfiguration + * @return + */ + protected boolean validateConfiguration(DistributionEngineConfiguration deConfiguration) { + + String methodName = "validateConfiguration"; + + boolean result = true; + result = isValidServers(deConfiguration.getUebServers(), methodName, "uebServers") && result; + result = isValidParam(deConfiguration.getEnvironments(), methodName, "environments") && result; + result = isValidParam(deConfiguration.getUebPublicKey(), methodName, "uebPublicKey") && result; + result = isValidParam(deConfiguration.getUebSecretKey(), methodName, "uebSecretKey") && result; + result = isValidParam(deConfiguration.getDistributionNotifTopicName(), methodName, "distributionNotifTopicName") && result; + result = isValidParam(deConfiguration.getDistributionStatusTopicName(), methodName, "distributionStatusTopicName") && result; + result = isValidObject(deConfiguration.getCreateTopic(), methodName, "createTopic") && result; + result = isValidObject(deConfiguration.getDistributionStatusTopic(), methodName, "distributionStatusTopic") && result; + result = isValidObject(deConfiguration.getInitMaxIntervalSec(), methodName, "initMaxIntervalSec") && result; + result = isValidObject(deConfiguration.getInitRetryIntervalSec(), methodName, "initRetryIntervalSec") && result; + result = isValidParam(deConfiguration.getDistributionStatusTopic().getConsumerId(), methodName, "consumerId") && result; + result = isValidParam(deConfiguration.getDistributionStatusTopic().getConsumerGroup(), methodName, "consumerGroup") && result; + result = isValidObject(deConfiguration.getDistributionStatusTopic().getFetchTimeSec(), methodName, "fetchTimeSec") && result; + result = isValidObject(deConfiguration.getDistributionStatusTopic().getPollingIntervalSec(), methodName, "pollingIntervalSec") && result; + + return result; + } + + private boolean isValidServers(List<String> uebServers, String methodName, String paramName) { + + if (uebServers == null || uebServers.isEmpty()) { + BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); + return false; + } + + if (uebServers.size() < 2) { + BeEcompErrorManager.getInstance().logBeConfigurationInvalidListSizeError(methodName, paramName, 2); + return false; + } + + for (String serverFqdn : uebServers) { + if (!isValidFqdn(serverFqdn)) { + BeEcompErrorManager.getInstance().logBeInvalidConfigurationError(methodName, paramName, serverFqdn); + return false; + } + } + + return true; + } + + private boolean isValidFqdn(String serverFqdn) { + + try { + Matcher matcher = FQDN_PATTERN.matcher(serverFqdn); + return matcher.matches(); + + } catch (Exception e) { + LOGGER.debug("Failed to match value of address {}", serverFqdn, e); + return false; + } + } + + private boolean isValidParam(String paramValue, String methodName, String paramName) { + + if (StringUtils.isEmpty(paramValue)) { + BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); + return false; + } + return true; + } + + private boolean isValidParam(List<String> paramValue, String methodName, String paramName) { + + if (CollectionUtils.isEmpty(paramValue)) { + BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); + return false; + } + return true; + } + + private boolean isValidObject(Object paramValue, String methodName, String paramName) { + + if (paramValue == null) { + BeEcompErrorManager.getInstance().logBeMissingConfigurationError(methodName, paramName); + return false; + } + return true; + + } + + private String getEnvironmentErrorDescription(StorageOperationStatus status) { + + switch (status) { + case DISTR_ENVIRONMENT_NOT_AVAILABLE: + return "environment is unavailable"; + case DISTR_ENVIRONMENT_NOT_FOUND: + return "environment is not configured in our system"; + case DISTR_ENVIRONMENT_SENT_IS_INVALID: + return "environment name is invalid"; + default: + return "unkhown"; + } + } + + @Override + public StorageOperationStatus isEnvironmentAvailable(String envName) { + + if (envName == null || envName.isEmpty()) { + + return StorageOperationStatus.DISTR_ENVIRONMENT_SENT_IS_INVALID; + } + + AtomicBoolean status = envNamePerStatus.get(envName); + if (status == null) { + return StorageOperationStatus.DISTR_ENVIRONMENT_NOT_FOUND; + } + + if (!status.get()) { + return StorageOperationStatus.DISTR_ENVIRONMENT_NOT_AVAILABLE; + } + return StorageOperationStatus.OK; + } + + @Override + public StorageOperationStatus isEnvironmentAvailable() { + + String envName = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration().getEnvironments().get(0); + + return isEnvironmentAvailable(envName); + } + + @Override + public void disableEnvironment(String envName) { + AtomicBoolean status = envNamePerStatus.get(envName); + status.set(false); + } + + @Override + public ActionStatus notifyService(String distributionId, Service service, INotificationData notificationData, String envName, String userId, String modifierName) { + return notifyService(distributionId, service, notificationData, envName, envName, userId, modifierName); + } + + @Override + public ActionStatus notifyService(String distributionId, Service service, INotificationData notificationData, String envId, String envName, String userId, String modifierName) { + LOGGER.debug("Received notify service request. distributionId = {}, serviceUuid = {} serviceUid = {}, envName = {}, userId = {}, modifierName {}", distributionId, service.getUUID(), service.getUniqueId(), envName, userId, modifierName); + String topicName = buildTopicName(envName); + ActionStatus notifyServiceStatus = Optional.ofNullable(environmentsEngine.getEnvironmentById(envId)) + .map(EnvironmentMessageBusData::new) + .map(messageBusData -> distributionNotificationSender.sendNotification(topicName, distributionId, messageBusData, notificationData, service, userId, modifierName)) + .orElse(ActionStatus.DISTRIBUTION_ENVIRONMENT_NOT_AVAILABLE); + LOGGER.debug("Finish notifyService. status is {}", notifyServiceStatus); + return notifyServiceStatus; + } + + private String buildTopicName(String envName) { + DistributionEngineConfiguration deConfiguration = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration(); + String distributionNotifTopicName = deConfiguration.getDistributionNotifTopicName(); + return DistributionEngineInitTask.buildTopicName(distributionNotifTopicName, envName); + } + + @Override + public StorageOperationStatus isReadyForDistribution(Service service, String envName) { + StorageOperationStatus status = isEnvironmentAvailable(envName); + if (status != StorageOperationStatus.OK) { + String envErrorDec = getEnvironmentErrorDescription(status); + BeEcompErrorManager.getInstance().logBeDistributionEngineSystemError(DistributionNotificationSender.DISTRIBUTION_NOTIFICATION_SENDING, "Environment name " + envName + " is not available. Reason : " + envErrorDec); + return status; + } + + return verifyServiceHasDeploymentArtifacts(service); + } + + @Override + public StorageOperationStatus verifyServiceHasDeploymentArtifacts(Service service) { + if (!serviceDistributionArtifactsBuilder.verifyServiceContainsDeploymentArtifacts(service)) { + return StorageOperationStatus.DISTR_ARTIFACT_NOT_FOUND; + } + return StorageOperationStatus.OK; + } + + @Override + public OperationalEnvironmentEntry getEnvironmentById(String opEnvId) { + return environmentsEngine.getEnvironmentById(opEnvId); + } + + @Override + public INotificationData buildServiceForDistribution(Service service, String distributionId, String workloadContext) { + INotificationData value = serviceDistributionArtifactsBuilder.buildResourceInstanceForDistribution(service, distributionId, workloadContext); + value = serviceDistributionArtifactsBuilder.buildServiceForDistribution(value, service); + return value; + } } |