package io.cattle.iaas.healthcheck.process; import io.cattle.iaas.healthcheck.service.HealthcheckHostLookup; import io.cattle.iaas.healthcheck.service.HealthcheckService; import io.cattle.platform.core.constants.AgentConstants; import io.cattle.platform.core.constants.HostConstants; import io.cattle.platform.core.dao.GenericMapDao; import io.cattle.platform.core.model.HealthcheckInstanceHostMap; import io.cattle.platform.core.model.Host; import io.cattle.platform.engine.handler.HandlerResult; import io.cattle.platform.engine.handler.ProcessPreListener; import io.cattle.platform.engine.process.ProcessInstance; import io.cattle.platform.engine.process.ProcessState; import io.cattle.platform.object.process.StandardProcess; import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic; import io.cattle.platform.servicediscovery.api.dao.ServiceDao; import io.cattle.platform.util.type.Priority; import java.util.List; import javax.inject.Inject; import javax.inject.Named; @Named public class HealthCheckReconcileTrigger extends AbstractObjectProcessLogic implements ProcessPreListener, Priority { @Inject GenericMapDao mapDao; @Inject HealthcheckService healthcheckService; @Inject ServiceDao serviceDao; @Inject List<HealthcheckHostLookup> hostLookups; @Override public String[] getProcessNames() { return new String[] { HostConstants.PROCESS_REMOVE, AgentConstants.PROCESS_RECONNECT }; } @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Host host = null; for (HealthcheckHostLookup lookup : hostLookups) { host = lookup.getHost(state.getResource()); if (host != null) { break; } } if (host == null) { return null; } removeHealthCheckHostMaps(host); return null; } protected void removeHealthCheckHostMaps(Host host) { List<? extends HealthcheckInstanceHostMap> healthHostMaps = mapDao.findNonRemoved( HealthcheckInstanceHostMap.class, Host.class, host.getId()); for (HealthcheckInstanceHostMap healthHostMap : healthHostMaps) { objectProcessManager.scheduleStandardProcess(StandardProcess.REMOVE, healthHostMap, null); } } @Override public int getPriority() { return Priority.DEFAULT; } }