public static String[] getCacheStatistics(final SessionFactory sessionFactory, final String cacheRegion) {
if (isNull(sessionFactory))
throw new NullPointerException("Parameter sessionFactory is null");
if (isNull(cacheRegion))
throw new NullPointerException("Parameter cacheRegion is null");
if (cacheRegion.isEmpty())
throw new IllegalArgumentException("Parameter cacheRegion is a empty String");
final Statistics sfstats = sessionFactory.getStatistics();
if (!ArrayUtils.contains(sfstats.getSecondLevelCacheRegionNames(), cacheRegion))
throw new IllegalArgumentException("Cache Region" + cacheRegion + " is not managed by given SessionFactory");
final SecondLevelCacheStatistics stats = sfstats.getSecondLevelCacheStatistics(cacheRegion);
final NaturalIdCacheStatistics idstats = sfstats.getNaturalIdCacheStatistics(cacheRegion);
return new String[] { "+ 2nd Level Cache Statistics: " + cacheRegion, "+", "+ # Puts: " + stats.getPutCount(), "+ # Hits: " + stats.getHitCount(), "+ # Misses: " + stats.getMissCount(), "+ Hit Ratio: " + ((double) stats.getHitCount()) / (stats.getHitCount() + stats.getMissCount()), "+ Size in Memory: " + stats.getSizeInMemory(), "+ Elements in Memory: " + stats.getElementCountInMemory(), "+ Elements on Disk: " + stats.getElementCountOnDisk(), "+", "+ ID # Puts: " + idstats.getPutCount(), "+ ID # Hits: " + idstats.getHitCount(), "+ ID # Misses: " + idstats.getMissCount(), "+ ID Hit Ratio: " + ((double) idstats.getHitCount()) / (idstats.getHitCount() + idstats.getMissCount()), "+ ID Size in Memory: " + idstats.getSizeInMemory(), "+ ID Elements in Memory: " + idstats.getElementCountInMemory(), "+ ID Execution Count: " + idstats.getExecutionCount(), "+ ID Avg Execution Time: " + idstats.getExecutionAvgTime() + "ms", "+ ID Max Execution Time: " + idstats.getExecutionMaxTime() + "ms", "+ ID Min Execution Time: " + idstats.getExecutionMinTime() + "ms", "+", "+" };
}