import javax.annotation.PreDestroy;
import lombok.AllArgsConstructor;
import lombok.Getter;
+import lombok.Setter;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.config.ConfigurationManager;
import org.openecomp.sdc.be.config.DistributionEngineConfiguration;
protected static final String UEB_HEALTH_LOG_CONTEXT = "ueb.healthcheck";
//TODO use LoggerMetric instead
private static final Logger healthLogger = Logger.getLogger(UEB_HEALTH_LOG_CONTEXT);
+ @Setter
+ private boolean isKafkaActive = Boolean.parseBoolean(System.getenv().getOrDefault("USE_KAFKA", "true"));
boolean lastHealthState = false;
Object lockOject = new Object();
ScheduledExecutorService healthCheckScheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
healthLogger.trace("Executing UEB Health Check Task - Start");
boolean healthStatus = verifyAtLeastOneEnvIsUp();
if (healthStatus) {
- boolean queryUebStatus = queryUeb();
- if (queryUebStatus == lastHealthState) {
+ boolean queryStatus;
+ if (isKafkaActive) {
+ // When MSB (Kafka) is active, we skip legacy UEB health checks.
+ // The environment status (set by DistributionEngineInitTask and
+ // DistributionEnginePollingTask) is sufficient to determine health.
+ queryStatus = true;
+ healthLogger.trace("MSB (MSB/Kafka) is active, skipping UEB health check query");
+ } else {
+ queryStatus = queryUeb();
+ }
+ if (queryStatus == lastHealthState) {
return;
}
synchronized (lockOject) {
- if (queryUebStatus != lastHealthState) {
+ if (queryStatus != lastHealthState) {
logger.trace("UEB Health State Changed to {}. Issuing alarm / recovery alarm...", healthStatus);
- lastHealthState = queryUebStatus;
+ lastHealthState = queryStatus;
logAlarm(lastHealthState);
- if (queryUebStatus) {
+ if (queryStatus) {
healthCheckInfo = HealthCheckInfoResult.OK.getHealthCheckInfo();
} else {
healthCheckInfo = HealthCheckInfoResult.UNAVAILABLE.getHealthCheckInfo();
Deencapsulation.invoke(healthCheckScheduledTask, "run");
}
+ @Test
+ void testHealthCheckScheduledTaskRunWithKafkaActive() throws Exception {
+ DistributionEngineClusterHealth testSubject;
+ Map<String, AtomicBoolean> envNamePerStatus = new HashMap<>();
+ envNamePerStatus.put("mock", new AtomicBoolean(true));
+ // When Kafka is active, the health check should skip UEB queries
+ // and report healthy based on the environment status alone
+ testSubject = createTestSubject();
+ testSubject.setKafkaActive(true);
+ testSubject.startHealthCheckTask(envNamePerStatus, false);
+ HealthCheckScheduledTask healthCheckScheduledTask = testSubject.new HealthCheckScheduledTask(new LinkedList<>());
+ // No UEB health check calls configured - should still report healthy
+ Deencapsulation.invoke(healthCheckScheduledTask, "run");
+ }
+
+ @Test
+ void testHealthCheckScheduledTaskRunWithKafkaActiveEnvDown() throws Exception {
+ DistributionEngineClusterHealth testSubject;
+ Map<String, AtomicBoolean> envNamePerStatus = new HashMap<>();
+ envNamePerStatus.put("mock", new AtomicBoolean(false));
+ // When Kafka is active but env is down, health check should not report UP
+ testSubject = createTestSubject();
+ testSubject.setKafkaActive(true);
+ testSubject.startHealthCheckTask(envNamePerStatus, false);
+ HealthCheckScheduledTask healthCheckScheduledTask = testSubject.new HealthCheckScheduledTask(new LinkedList<>());
+ Deencapsulation.invoke(healthCheckScheduledTask, "run");
+ }
+
@Test
void testLogAlarm() throws Exception {
DistributionEngineClusterHealth testSubject;