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}