package org.infinispan.health.impl;
import org.infinispan.AdvancedCache;
import org.infinispan.Cache;
import org.infinispan.distribution.DistributionManager;
import org.infinispan.health.CacheHealth;
import org.infinispan.health.HealthStatus;
import org.infinispan.partitionhandling.AvailabilityMode;
public class CacheHealthImpl implements CacheHealth {
private final AdvancedCache<?, ?> cache;
public CacheHealthImpl(Cache<?, ?> cache) {
this.cache = cache.getAdvancedCache();
}
@Override
public String getCacheName() {
return cache.getName();
}
@Override
public HealthStatus getStatus() {
if (!isComponentHealthy() || cache.getAvailability() == AvailabilityMode.DEGRADED_MODE) {
return HealthStatus.UNHEALTHY;
}
DistributionManager distributionManager = cache.getDistributionManager();
if (distributionManager != null && distributionManager.isRehashInProgress()) {
return HealthStatus.REBALANCING;
}
return HealthStatus.HEALTHY;
}
private boolean isComponentHealthy() {
switch (cache.getStatus()) {
case INSTANTIATED:
case RUNNING:
return true;
default:
return false;
}
}
}