package io.cattle.iaas.healthcheck.process; import static io.cattle.platform.core.model.tables.InstanceTable.*; import io.cattle.iaas.healthcheck.service.HealthcheckService; import io.cattle.iaas.healthcheck.service.HealthcheckService.HealthcheckInstanceType; import io.cattle.platform.core.addon.InstanceHealthCheck; import io.cattle.platform.core.constants.HealthcheckConstants; import io.cattle.platform.core.constants.InstanceConstants; import io.cattle.platform.core.model.Instance; import io.cattle.platform.engine.handler.HandlerResult; import io.cattle.platform.engine.handler.ProcessPostListener; import io.cattle.platform.engine.process.ProcessInstance; import io.cattle.platform.engine.process.ProcessState; import io.cattle.platform.json.JsonMapper; import io.cattle.platform.object.ObjectManager; import io.cattle.platform.object.util.DataAccessor; import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic; import io.cattle.platform.util.type.Priority; import java.util.Date; import javax.inject.Inject; import javax.inject.Named; @Named public class InstanceHealthcheckRegister extends AbstractObjectProcessLogic implements ProcessPostListener, Priority { @Inject JsonMapper jsonMapper; @Inject HealthcheckService healtcheckService; @Inject ObjectManager objectManager; @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Instance instance = (Instance) state.getResource(); InstanceHealthCheck healthCheck = DataAccessor.field(instance, InstanceConstants.FIELD_HEALTH_CHECK, jsonMapper, InstanceHealthCheck.class); // set healthcheck if (healthCheck != null) { if (instance.getHealthState() == null) { objectManager.setFields(instance, INSTANCE.HEALTH_STATE, HealthcheckConstants.HEALTH_STATE_INITIALIZING, INSTANCE.HEALTH_UPDATED, new Date()); } else if (instance.getHealthState().equalsIgnoreCase(HealthcheckConstants.HEALTH_STATE_HEALTHY)) { healtcheckService.updateInstanceHealthState(instance, HealthcheckConstants.HEALTH_STATE_REINITIALIZING); } healtcheckService.registerForHealtcheck(HealthcheckInstanceType.INSTANCE, instance.getId()); } return null; } @Override public String[] getProcessNames() { return new String[] { "instance.start" }; } @Override public int getPriority() { return Priority.PRE; } }