summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java332
1 files changed, 143 insertions, 189 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java
index ec58cad146..1e9899b09f 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java
@@ -7,9 +7,9 @@
* 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.
@@ -17,20 +17,8 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-
package org.openecomp.sdc.be.components.distribution.engine;
-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.common.api.Constants;
-import org.openecomp.sdc.common.api.HealthCheckInfo;
-import org.openecomp.sdc.common.api.HealthCheckInfo.HealthCheckStatus;
-import org.openecomp.sdc.common.log.wrappers.Logger;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -43,69 +31,155 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+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.common.api.Constants;
+import org.openecomp.sdc.common.api.HealthCheckInfo;
+import org.openecomp.sdc.common.api.HealthCheckInfo.HealthCheckStatus;
+import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.springframework.stereotype.Component;
+
@Component("distribution-engine-cluster-health")
public class DistributionEngineClusterHealth {
+ private static final String UEB_HEALTH_CHECK_STR = "uebHealthCheck";
+ private static final Logger logger = Logger.getLogger(DistributionEngineClusterHealth.class.getName());
protected static String UEB_HEALTH_LOG_CONTEXT = "ueb.healthcheck";
-
//TODO use LoggerMetric instead
private static final Logger healthLogger = Logger.getLogger(UEB_HEALTH_LOG_CONTEXT);
-
- private static final String UEB_HEALTH_CHECK_STR = "uebHealthCheck";
-
boolean lastHealthState = false;
-
Object lockOject = new Object();
-
+ ScheduledExecutorService healthCheckScheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
+ @Override
+ public Thread newThread(Runnable r) {
+ return new Thread(r, "UEB-Health-Check-Task");
+ }
+ });
+ HealthCheckScheduledTask healthCheckScheduledTask = null;
private long reconnectInterval = 5;
-
private long healthCheckReadTimeout = 20;
-
- private static final Logger logger = Logger.getLogger(DistributionEngineClusterHealth.class.getName());
-
private List<String> uebServers = null;
-
private String publicApiKey = null;
+ private HealthCheckInfo healthCheckInfo = HealthCheckInfoResult.UNKNOWN.getHealthCheckInfo();
+ private Map<String, AtomicBoolean> envNamePerStatus = null;
+ private ScheduledFuture<?> scheduledFuture = null;
- public enum HealthCheckInfoResult {
-
- OK(new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.UP, null, ClusterStatusDescription.OK.getDescription())),
- UNAVAILABLE(new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.DOWN, null, ClusterStatusDescription.UNAVAILABLE.getDescription())),
- NOT_CONFIGURED(new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.DOWN, null, ClusterStatusDescription.NOT_CONFIGURED.getDescription())),
- DISABLED(new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.DOWN, null, ClusterStatusDescription.DISABLED.getDescription())),
- UNKNOWN(new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.UNKNOWN, null, ClusterStatusDescription.UNKNOWN.getDescription()));
-
- private HealthCheckInfo healthCheckInfo;
+ @PostConstruct
+ protected void init() {
+ logger.trace("Enter init method of DistributionEngineClusterHealth");
+ Long reconnectIntervalConfig = ConfigurationManager.getConfigurationManager().getConfiguration()
+ .getUebHealthCheckReconnectIntervalInSeconds();
+ if (reconnectIntervalConfig != null) {
+ reconnectInterval = reconnectIntervalConfig.longValue();
+ }
+ Long healthCheckReadTimeoutConfig = ConfigurationManager.getConfigurationManager().getConfiguration().getUebHealthCheckReadTimeout();
+ if (healthCheckReadTimeoutConfig != null) {
+ healthCheckReadTimeout = healthCheckReadTimeoutConfig.longValue();
+ }
+ DistributionEngineConfiguration distributionEngineConfiguration = ConfigurationManager.getConfigurationManager()
+ .getDistributionEngineConfiguration();
+ this.uebServers = distributionEngineConfiguration.getUebServers();
+ this.publicApiKey = distributionEngineConfiguration.getUebPublicKey();
+ this.healthCheckScheduledTask = new HealthCheckScheduledTask(this.uebServers);
+ logger.trace("Exit init method of DistributionEngineClusterHealth");
+ }
- HealthCheckInfoResult(HealthCheckInfo healthCheckInfo) {
- this.healthCheckInfo = healthCheckInfo;
+ @PreDestroy
+ protected void destroy() {
+ if (scheduledFuture != null) {
+ scheduledFuture.cancel(true);
+ scheduledFuture = null;
}
+ if (healthCheckScheduler != null) {
+ healthCheckScheduler.shutdown();
+ }
+ }
- public HealthCheckInfo getHealthCheckInfo() {
- return healthCheckInfo;
+ /**
+ * Start health check task.
+ *
+ * @param envNamePerStatus
+ * @param startTask
+ */
+ public void startHealthCheckTask(Map<String, AtomicBoolean> envNamePerStatus, boolean startTask) {
+ this.envNamePerStatus = envNamePerStatus;
+ if (startTask && this.scheduledFuture == null) {
+ this.scheduledFuture = this.healthCheckScheduler.scheduleAtFixedRate(healthCheckScheduledTask, 0, reconnectInterval, TimeUnit.SECONDS);
}
+ }
+ public void startHealthCheckTask(Map<String, AtomicBoolean> envNamePerStatus) {
+ startHealthCheckTask(envNamePerStatus, true);
}
- private HealthCheckInfo healthCheckInfo = HealthCheckInfoResult.UNKNOWN.getHealthCheckInfo();
+ private void logAlarm(boolean lastHealthState) {
+ if (lastHealthState) {
+ BeEcompErrorManager.getInstance().logBeHealthCheckUebClusterRecovery(UEB_HEALTH_CHECK_STR);
+ } else {
+ BeEcompErrorManager.getInstance().logBeHealthCheckUebClusterError(UEB_HEALTH_CHECK_STR);
+ }
+ }
- private Map<String, AtomicBoolean> envNamePerStatus = null;
+ public HealthCheckInfo getHealthCheckInfo() {
+ return healthCheckInfo;
+ }
- private ScheduledFuture<?> scheduledFuture = null;
+ /**
+ * change the health check to DISABLE
+ */
+ public void setHealthCheckUebIsDisabled() {
+ healthCheckInfo = HealthCheckInfoResult.DISABLED.getHealthCheckInfo();
+ }
- ScheduledExecutorService healthCheckScheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "UEB-Health-Check-Task");
+ /**
+ * change the health check to NOT CONFGIURED
+ */
+ public void setHealthCheckUebConfigurationError() {
+ healthCheckInfo = HealthCheckInfoResult.NOT_CONFIGURED.getHealthCheckInfo();
+ }
+
+ public void setHealthCheckOkAndReportInCaseLastStateIsDown() {
+ if (lastHealthState) {
+ return;
}
- });
+ synchronized (lockOject) {
+ if (!lastHealthState) {
+ logger.debug("Going to update health check state to available");
+ lastHealthState = true;
+ healthCheckInfo = HealthCheckInfoResult.OK.getHealthCheckInfo();
+ logAlarm(lastHealthState);
+ }
+ }
+ }
- HealthCheckScheduledTask healthCheckScheduledTask = null;
+ public enum HealthCheckInfoResult {
+ OK(new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.UP, null,
+ ClusterStatusDescription.OK.getDescription())), UNAVAILABLE(
+ new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.DOWN, null,
+ ClusterStatusDescription.UNAVAILABLE.getDescription())), NOT_CONFIGURED(
+ new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.DOWN, null,
+ ClusterStatusDescription.NOT_CONFIGURED.getDescription())), DISABLED(
+ new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.DOWN, null,
+ ClusterStatusDescription.DISABLED.getDescription())), UNKNOWN(
+ new HealthCheckInfo(Constants.HC_COMPONENT_DISTRIBUTION_ENGINE, HealthCheckStatus.UNKNOWN, null,
+ ClusterStatusDescription.UNKNOWN.getDescription()));
+ private HealthCheckInfo healthCheckInfo;
- public enum ClusterStatusDescription {
+ HealthCheckInfoResult(HealthCheckInfo healthCheckInfo) {
+ this.healthCheckInfo = healthCheckInfo;
+ }
- OK("OK"), UNAVAILABLE("U-EB cluster is not available"), NOT_CONFIGURED("U-EB cluster is not configured"), DISABLED("DE is disabled in configuration"), UNKNOWN("U-EB cluster is currently unknown (try again in few minutes)");
+ public HealthCheckInfo getHealthCheckInfo() {
+ return healthCheckInfo;
+ }
+ }
+ public enum ClusterStatusDescription {
+ OK("OK"), UNAVAILABLE("U-EB cluster is not available"), NOT_CONFIGURED("U-EB cluster is not configured"), DISABLED(
+ "DE is disabled in configuration"), UNKNOWN("U-EB cluster is currently unknown (try again in few minutes)");
private String desc;
ClusterStatusDescription(String desc) {
@@ -115,24 +189,30 @@ public class DistributionEngineClusterHealth {
public String getDescription() {
return desc;
}
-
}
/**
* Health Check Task Scheduler.
- *
- * It schedules a task which send a apiKey get query towards the UEB servers. In case a query to the first UEB server is failed, then a second query is sent to the next UEB server.
- *
+ * <p>
+ * It schedules a task which send a apiKey get query towards the UEB servers. In case a query to the first UEB server is failed, then a second
+ * query is sent to the next UEB server.
*
* @author esofer
- *
*/
public class HealthCheckScheduledTask implements Runnable {
List<UebHealthCheckCall> healthCheckCalls = new ArrayList<>();
+ /**
+ * executor for the query itself
+ */
+ ExecutorService healthCheckExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
+ @Override
+ public Thread newThread(Runnable r) {
+ return new Thread(r, "UEB-Health-Check-Thread");
+ }
+ });
public HealthCheckScheduledTask(List<String> uebServers) {
-
logger.debug("Create health check calls for servers {}", uebServers);
if (uebServers != null) {
for (String server : uebServers) {
@@ -143,17 +223,13 @@ public class DistributionEngineClusterHealth {
@Override
public void run() {
-
healthLogger.trace("Executing UEB Health Check Task - Start");
-
boolean healthStatus = verifyAtLeastOneEnvIsUp();
-
if (healthStatus) {
boolean queryUebStatus = queryUeb();
if (queryUebStatus == lastHealthState) {
return;
}
-
synchronized (lockOject) {
if (queryUebStatus != lastHealthState) {
logger.trace("UEB Health State Changed to {}. Issuing alarm / recovery alarm...", healthStatus);
@@ -169,17 +245,13 @@ public class DistributionEngineClusterHealth {
} else {
healthLogger.trace("Not all UEB Environments are up");
}
-
}
/**
* verify that at least one environment is up.
- *
*/
private boolean verifyAtLeastOneEnvIsUp() {
-
boolean healthStatus = false;
-
if (envNamePerStatus != null) {
Collection<AtomicBoolean> values = envNamePerStatus.values();
if (values != null) {
@@ -191,163 +263,45 @@ public class DistributionEngineClusterHealth {
}
}
}
-
return healthStatus;
}
/**
- * executor for the query itself
- */
- ExecutorService healthCheckExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "UEB-Health-Check-Thread");
- }
- });
-
- /**
* go all UEB servers and send a get apiKeys query. In case a query is succeed, no query is sent to the rest of UEB servers.
*
- *
* @return
*/
private boolean queryUeb() {
-
Boolean result = false;
int retryNumber = 1;
for (UebHealthCheckCall healthCheckCall : healthCheckCalls) {
try {
-
- healthLogger.debug("Before running Health Check retry query number {} towards UEB server {}", retryNumber, healthCheckCall.getServer());
-
+ healthLogger
+ .debug("Before running Health Check retry query number {} towards UEB server {}", retryNumber, healthCheckCall.getServer());
Future<Boolean> future = healthCheckExecutor.submit(healthCheckCall);
result = future.get(healthCheckReadTimeout, TimeUnit.SECONDS);
-
- healthLogger.debug("After running Health Check retry query number {} towards UEB server {}. Result is {}", retryNumber, healthCheckCall.getServer(), result);
-
+ healthLogger.debug("After running Health Check retry query number {} towards UEB server {}. Result is {}", retryNumber,
+ healthCheckCall.getServer(), result);
if (result != null && result.booleanValue()) {
break;
}
-
} catch (Exception e) {
String message = e.getMessage();
if (message == null) {
message = e.getClass().getName();
}
- healthLogger.debug("Error occured during running Health Check retry query towards UEB server {}. Result is {}", healthCheckCall.getServer(), message);
- healthLogger.trace("Error occured during running Health Check retry query towards UEB server {}. Result is {}", healthCheckCall.getServer(), message, e);
+ healthLogger.debug("Error occured during running Health Check retry query towards UEB server {}. Result is {}",
+ healthCheckCall.getServer(), message);
+ healthLogger.trace("Error occured during running Health Check retry query towards UEB server {}. Result is {}",
+ healthCheckCall.getServer(), message, e);
}
retryNumber++;
-
}
-
return result;
-
}
public List<UebHealthCheckCall> getHealthCheckCalls() {
return healthCheckCalls;
}
-
- }
-
- @PostConstruct
- protected void init() {
-
- logger.trace("Enter init method of DistributionEngineClusterHealth");
-
- Long reconnectIntervalConfig = ConfigurationManager.getConfigurationManager().getConfiguration().getUebHealthCheckReconnectIntervalInSeconds();
- if (reconnectIntervalConfig != null) {
- reconnectInterval = reconnectIntervalConfig.longValue();
- }
- Long healthCheckReadTimeoutConfig = ConfigurationManager.getConfigurationManager().getConfiguration().getUebHealthCheckReadTimeout();
- if (healthCheckReadTimeoutConfig != null) {
- healthCheckReadTimeout = healthCheckReadTimeoutConfig.longValue();
- }
-
- DistributionEngineConfiguration distributionEngineConfiguration = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration();
-
- this.uebServers = distributionEngineConfiguration.getUebServers();
- this.publicApiKey = distributionEngineConfiguration.getUebPublicKey();
-
- this.healthCheckScheduledTask = new HealthCheckScheduledTask(this.uebServers);
-
- logger.trace("Exit init method of DistributionEngineClusterHealth");
-
- }
-
- @PreDestroy
- protected void destroy() {
-
- if (scheduledFuture != null) {
- scheduledFuture.cancel(true);
- scheduledFuture = null;
- }
-
- if (healthCheckScheduler != null) {
- healthCheckScheduler.shutdown();
- }
-
- }
-
- /**
- * Start health check task.
- *
- * @param envNamePerStatus
- * @param startTask
- */
- public void startHealthCheckTask(Map<String, AtomicBoolean> envNamePerStatus, boolean startTask) {
- this.envNamePerStatus = envNamePerStatus;
-
- if (startTask && this.scheduledFuture == null) {
- this.scheduledFuture = this.healthCheckScheduler.scheduleAtFixedRate(healthCheckScheduledTask, 0, reconnectInterval, TimeUnit.SECONDS);
- }
- }
-
- public void startHealthCheckTask(Map<String, AtomicBoolean> envNamePerStatus) {
- startHealthCheckTask(envNamePerStatus, true);
- }
-
- private void logAlarm(boolean lastHealthState) {
- if (lastHealthState) {
- BeEcompErrorManager.getInstance().logBeHealthCheckUebClusterRecovery(UEB_HEALTH_CHECK_STR);
- } else {
- BeEcompErrorManager.getInstance().logBeHealthCheckUebClusterError(UEB_HEALTH_CHECK_STR);
- }
- }
-
- public HealthCheckInfo getHealthCheckInfo() {
- return healthCheckInfo;
- }
-
- /**
- * change the health check to DISABLE
- */
- public void setHealthCheckUebIsDisabled() {
- healthCheckInfo = HealthCheckInfoResult.DISABLED.getHealthCheckInfo();
- }
-
- /**
- * change the health check to NOT CONFGIURED
- */
- public void setHealthCheckUebConfigurationError() {
- healthCheckInfo = HealthCheckInfoResult.NOT_CONFIGURED.getHealthCheckInfo();
- }
-
- public void setHealthCheckOkAndReportInCaseLastStateIsDown() {
-
- if (lastHealthState) {
- return;
- }
- synchronized (lockOject) {
- if (!lastHealthState) {
- logger.debug("Going to update health check state to available");
- lastHealthState = true;
- healthCheckInfo = HealthCheckInfoResult.OK.getHealthCheckInfo();
- logAlarm(lastHealthState);
- }
- }
-
}
-
}