001package com.nimbusds.common.infinispan;
002
003
004import com.codahale.metrics.health.HealthCheck;
005import com.nimbusds.common.monitor.MonitorRegistries;
006import org.infinispan.manager.EmbeddedCacheManager;
007import org.infinispan.partitionhandling.AvailabilityMode;
008
009
010/**
011 * Infinispan health checks.
012 */
013public class InfinispanHealthChecks {
014        
015        
016        /**
017         * Registers Infinispan health checks
018         * "infinispan.[cache-name].availability" for the specified cache
019         * manager.
020         *
021         * @param cacheManager The cache manager.
022         */
023        public static void register(final EmbeddedCacheManager cacheManager) {
024        
025                cacheManager.getCacheNames().forEach(cacheName -> {
026                        
027                        String healthCheckName = cacheName + ".availability";
028                        
029                        MonitorRegistries.register(healthCheckName, new HealthCheck() {
030                                @Override
031                                protected Result check() {
032                                        
033                                        AvailabilityMode am = cacheManager.getCache(cacheName).getAdvancedCache().getAvailability();
034                                        
035                                        if (AvailabilityMode.DEGRADED_MODE.equals(am)) {
036                                                return Result.unhealthy("degraded");
037                                        }
038                                        
039                                        if (AvailabilityMode.AVAILABLE.equals(am)) {
040                                                return Result.healthy();
041                                        }
042                                        
043                                        return Result.unhealthy("unavailable"); // null
044                                }
045                        });
046                });
047        }
048        
049        
050        /**
051         * Prevents public instantiation.
052         */
053        private InfinispanHealthChecks() {
054        }
055}