/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.jmx; import com.google.common.cache.Cache; import com.google.common.cache.CacheStats; import org.apereo.portal.character.stream.events.CharacterDataEventImpl; /** * Base bean to expose a {@link CacheStats} object * */ public abstract class GuavaCacheStatsBean { private volatile Cache<?, ?> cache = null; private volatile CacheStats cacheStats = null; private volatile long size; private volatile long nextLoad; private volatile long loadIterval = 100; protected abstract Cache<?, ?> getCache(); private CacheStats getCachedCacheStats() { if (cache == null || nextLoad <= System.currentTimeMillis()) { cache = getCache(); cacheStats = cache.stats(); size = cache.size(); nextLoad = System.currentTimeMillis() + loadIterval; } return cacheStats; } public final long getLoadIterval() { return loadIterval; } /** * Number of milliseconds between calls to {@link CharacterDataEventImpl#getEventCacheStats()} */ public final void setLoadIterval(long loadIterval) { this.loadIterval = loadIterval; } public void cleanUp() { getCachedCacheStats(); cache.cleanUp(); } public final long getSize() { getCachedCacheStats(); return size; } public final long getRequestCount() { return getCachedCacheStats().requestCount(); } public final long getHitCount() { return getCachedCacheStats().hitCount(); } public final double getHitRate() { return getCachedCacheStats().hitRate(); } public final long getMissCount() { return getCachedCacheStats().missCount(); } public final double getMissRate() { return getCachedCacheStats().missRate(); } public final long getLoadCount() { return getCachedCacheStats().loadCount(); } public final long getLoadSuccessCount() { return getCachedCacheStats().loadSuccessCount(); } public final long getLoadExceptionCount() { return getCachedCacheStats().loadExceptionCount(); } public final double getLoadExceptionRate() { return getCachedCacheStats().loadExceptionRate(); } public final long getTotalLoadTime() { return getCachedCacheStats().totalLoadTime(); } public final double getAverageLoadPenalty() { return getCachedCacheStats().averageLoadPenalty(); } public final long getEvictionCount() { return getCachedCacheStats().evictionCount(); } @Override public String toString() { return getCachedCacheStats().toString(); } }