package com.sequenceiq.cloudbreak.service.stack.flow; import java.util.Collections; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.ecwid.consul.v1.ConsulClient; import com.ecwid.consul.v1.catalog.model.CatalogService; import com.sequenceiq.cloudbreak.service.CloudbreakServiceException; import com.sequenceiq.cloudbreak.service.StackBasedStatusCheckerTask; @Component public class ConsulServiceCheckerTask extends StackBasedStatusCheckerTask<ConsulContext> { private static final Logger LOGGER = LoggerFactory.getLogger(ConsulServiceCheckerTask.class); @Override public boolean checkStatus(ConsulContext consulContext) { String serviceName = consulContext.getTargets().get(0); ConsulClient client = consulContext.getConsulClient(); LOGGER.info("Checking consul service registration of '{}'", serviceName); List<CatalogService> service = ConsulUtils.getService(Collections.singletonList(client), serviceName); if (service.isEmpty()) { LOGGER.info("Consul service '{}' is not registered yet", serviceName); return false; } else { LOGGER.info("Consul service '{}' found on '{}'", serviceName, service.get(0).getNode()); return true; } } @Override public void handleTimeout(ConsulContext t) { throw new CloudbreakServiceException(String.format("Operation timed out. Consul service is not registered %s", t.getTargets())); } @Override public String successMessage(ConsulContext t) { return String.format("Consul service successfully registered '%s'", t.getTargets()); } }