package com.sequenceiq.cloudbreak.service.stack.flow;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.sequenceiq.ambari.client.AmbariClient;
import com.sequenceiq.cloudbreak.service.ClusterBasedStatusCheckerTask;
import com.sequenceiq.cloudbreak.service.cluster.AmbariOperationFailedException;
@Component
public class AmbariStartupListenerTask extends ClusterBasedStatusCheckerTask<AmbariStartupPollerObject> {
private static final Logger LOGGER = LoggerFactory.getLogger(AmbariStartupListenerTask.class);
@Override
public boolean checkStatus(AmbariStartupPollerObject aSPO) {
boolean ambariRunning = false;
LOGGER.info("Polling Ambari server's status [Ambari server address: '{}'].", aSPO.getAmbariAddress());
for (AmbariClient ambariClient : aSPO.getAmbariClients()) {
try {
String ambariHealth = ambariClient.healthCheck();
LOGGER.info("Ambari health check returned: {} [Ambari server address: '{}']", ambariHealth, aSPO.getAmbariAddress());
if ("RUNNING".equals(ambariHealth)) {
ambariRunning = true;
break;
}
} catch (Exception e) {
LOGGER.info("Ambari health check failed: {}", e.getMessage());
}
}
return ambariRunning;
}
@Override
public void handleTimeout(AmbariStartupPollerObject ambariStartupPollerObject) {
throw new AmbariOperationFailedException("Operation timed out. Failed to check ambari startup.");
}
@Override
public String successMessage(AmbariStartupPollerObject aSPO) {
return "Ambari startup finished with success result.";
}
}