package at.asitplus.eidas.specific.connector.health; import org.apache.ignite.Ignite; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import eu.eidas.auth.cache.IgniteInstanceInitializerSpecificCommunication; import lombok.Setter; import lombok.extern.slf4j.Slf4j; /** * HealthCheck that validate Nodes in Apache-Ignite Cluster. * * @author tlenz * */ @Slf4j public class IgniteClusterHealthIndicator implements HealthIndicator { @Setter protected IgniteInstanceInitializerSpecificCommunication igniteInstanceInitializerSpecificCommunication; @Override public Health health() { final Ignite instance = igniteInstanceInitializerSpecificCommunication.getInstance(); // check if Apache Ignite cluster is active if (!instance.cluster().active()) { return Health.outOfService().build(); } final Health.Builder healthBuilder; // Status UP requires more than 1 node because MS-Connector and eIDAS-Node operations as // micro-services if (instance.cluster().nodes().size() > 1) { healthBuilder = Health.up(); } else { // Something looks wrong if only a single node was found because MS-Connector and eIDAS-Node // operations as micro-services healthBuilder = Health.outOfService(); } healthBuilder.withDetail("#Nodes", instance.cluster().nodes().size()); log.trace("Ignite state. #Nodes: {}", instance.cluster().nodes().size()); return healthBuilder.build(); } }