aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngine.java
diff options
context:
space:
mode:
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.java633
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;
+ }
}