All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anotheria.moskito.integration.ehcache.EhcacheStats Maven / Gradle / Ivy

There is a newer version: 4.0.3
Show newest version
package net.anotheria.moskito.integration.ehcache;

import net.anotheria.moskito.core.predefined.Constants;
import net.anotheria.moskito.core.producers.AbstractStats;
import net.anotheria.moskito.core.stats.StatValue;
import net.anotheria.moskito.core.stats.TimeUnit;
import net.anotheria.moskito.core.stats.impl.StatValueFactory;
import net.anotheria.moskito.core.util.MoskitoWebUi;
import net.anotheria.moskito.integration.ehcache.decorators.EhcacheStatsDecorator;
import net.anotheria.moskito.core.decorators.DecoratorRegistryFactory;
import net.anotheria.util.StringUtils;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * Container for Ehcache related stats.
 *
 * @author Vladyslav Bezuhlyi
 *
 * @see net.anotheria.moskito.core.producers.AbstractStats
 * @see net.sf.ehcache.Statistics
 */
public class EhcacheStats extends AbstractStats {

    /**
     * @see net.sf.ehcache.Statistics#getStatisticsAccuracyDescription()
     */
    private StatValue statisticsAccuracy;

    /**
     * The part of accesses that result in cache hits.
     */
    private StatValue hitRatio;

    /**
     * @see net.sf.ehcache.Statistics#getCacheHits()
     */
    private StatValue hits;

    /**
     * @see net.sf.ehcache.Statistics#getInMemoryHits()
     */
    private StatValue inMemoryHits;

    /**
     * @see net.sf.ehcache.Statistics#getOffHeapMisses()
     */
    private StatValue offHeapHits;

    /**
     * @see net.sf.ehcache.Statistics#getOnDiskHits()
     */
    private StatValue onDiskHits;

    /**
     * @see net.sf.ehcache.Statistics#getCacheMisses()
     */
    private StatValue misses;

    /**
     * @see net.sf.ehcache.Statistics#getInMemoryMisses()
     */
    private StatValue inMemoryMisses;

    /**
     * @see net.sf.ehcache.Statistics#getOffHeapMisses()
     */
    private StatValue offHeapMisses;

    /**
     * @see net.sf.ehcache.Statistics#getOnDiskMisses()
     */
    private StatValue onDiskMisses;

    /**
     * @see net.sf.ehcache.Statistics#getObjectCount()
     */
    private StatValue elements;

    /**
     * @see net.sf.ehcache.Statistics#getMemoryStoreObjectCount()
     */
    private StatValue inMemoryElements;

    /**
     * @see net.sf.ehcache.Statistics#getOffHeapStoreObjectCount()
     */
    private StatValue offHeapElements;

    /**
     * @see net.sf.ehcache.Statistics#getDiskStoreObjectCount()
     */
    private StatValue onDiskElements;

    /**
     * @see net.sf.ehcache.Statistics#getAverageGetTime()
     */
    private StatValue averageGetTime;

    /**
     * @see net.sf.ehcache.Statistics#getAverageSearchTime()
     */
    private StatValue averageSearchTime;

    /**
     * @see net.sf.ehcache.Statistics#getSearchesPerSecond()
     */
    private StatValue searchesPerSecond;

    /**
     * @see net.sf.ehcache.Statistics#getEvictionCount()
     */
    private StatValue evictionCount;

    /**
     * @see net.sf.ehcache.Statistics#getWriterQueueSize()
     */
    private StatValue writerQueueLength;

    /* value names for values that this stats keeps */
    public static final String STATISTICS_ACCURACY = "statisticsAccuracy";
    public static final String HIT_RATIO = "hitRatio";
    public static final String HITS = "hits";
    public static final String IN_MEMORY_HITS = "inMemoryHits";
    public static final String OFF_HEAP_HITS = "offHeapHits";
    public static final String ON_DISK_HITS = "onDiskHits";
    public static final String MISSES = "misses";
    public static final String IN_MEMORY_MISSES = "inMemoryMisses";
    public static final String OFF_HEAP_MISSES = "offHeapMisses";
    public static final String ON_DISK_MISSES = "onDiskMisses";
    public static final String ELEMENTS = "elements";
    public static final String IN_MEMORY_ELEMENTS = "inMemoryElements";
    public static final String OFF_HEAP_ELEMENTS = "offHeapElements";
    public static final String ON_DISK_ELEMENTS = "onDiskElements";
    public static final String AVERAGE_GET_TIME = "averageGetTime";
    public static final String AVERAGE_SEARCH_TIME = "averageSearchTime";
    public static final String SEARCHES_PER_SECOND = "searchesPerSecond";
    public static final String EVICTION_COUNT = "evictionCount";
    public static final String WRITER_QUEUE_LENGTH = "writerQueueLength";

    /**
     * List of value names for values, collected by this stats.
     */
    private static final List VALUE_NAMES = Collections.unmodifiableList(Arrays.asList(
            STATISTICS_ACCURACY,
            HIT_RATIO,
            HITS,
            IN_MEMORY_HITS,
            OFF_HEAP_HITS,
            ON_DISK_HITS,
            MISSES,
            IN_MEMORY_MISSES,
            OFF_HEAP_MISSES,
            ON_DISK_MISSES,
            ELEMENTS,
            IN_MEMORY_ELEMENTS,
            OFF_HEAP_ELEMENTS,
            ON_DISK_ELEMENTS,
            AVERAGE_GET_TIME,
            AVERAGE_SEARCH_TIME,
            SEARCHES_PER_SECOND,
            EVICTION_COUNT,
            WRITER_QUEUE_LENGTH
    ));


    /**
     * Creates a new stats object of this type with given name.
     *
     * @param name name of the stats object.
     */
    public EhcacheStats(String name) {
        super(name);
        this.statisticsAccuracy = newStringStatValue(STATISTICS_ACCURACY);
        this.hitRatio = newDoubleStatValue(HIT_RATIO);
        this.hits = newLongStatValue(HITS);
        this.inMemoryHits = newLongStatValue(IN_MEMORY_HITS);
        this.offHeapHits = newLongStatValue(OFF_HEAP_HITS);
        this.onDiskHits = newLongStatValue(ON_DISK_HITS);
        this.misses = newLongStatValue(MISSES);
        this.inMemoryMisses = newLongStatValue(IN_MEMORY_MISSES);
        this.offHeapMisses = newLongStatValue(OFF_HEAP_MISSES);
        this.onDiskMisses = newLongStatValue(ON_DISK_MISSES);
        this.elements = newLongStatValue(ELEMENTS);
        this.inMemoryElements = newLongStatValue(IN_MEMORY_ELEMENTS);
        this.offHeapElements = newLongStatValue(OFF_HEAP_ELEMENTS);
        this.onDiskElements = newLongStatValue(ON_DISK_ELEMENTS);
        this.averageGetTime = newDoubleStatValue(AVERAGE_GET_TIME); // in milliseconds
        this.averageSearchTime = newLongStatValue(AVERAGE_SEARCH_TIME); // in milliseconds
        this.searchesPerSecond = newLongStatValue(SEARCHES_PER_SECOND);
        this.evictionCount = newLongStatValue(EVICTION_COUNT);
        this.writerQueueLength = newLongStatValue(WRITER_QUEUE_LENGTH);

    }


    /**
     * Creates new {@link net.anotheria.moskito.core.stats.StatValue} that holds the long value with given name
     * and default intervals.
     *
     * @param valueName name of the stat value.
     *
     * @return {@link net.anotheria.moskito.core.stats.StatValue}.
     */
    private StatValue newLongStatValue(String valueName) {
        StatValue sv = StatValueFactory.createStatValue(0L, valueName, Constants.getDefaultIntervals());
		addStatValues(sv);
		return sv;
    }

    /**
     * Creates new {@link net.anotheria.moskito.core.stats.StatValue} that holds the double value with given name
     * and default intervals.
     *
     * @param valueName name of the stat value.
     *
     * @return {@link net.anotheria.moskito.core.stats.StatValue}.
     */
    private StatValue newDoubleStatValue(String valueName) {
		StatValue sv = StatValueFactory.createStatValue(0.0d, valueName, Constants.getDefaultIntervals());
		addStatValues(sv);
		return sv;

    }

    /**
     * Creates new {@link net.anotheria.moskito.core.stats.StatValue} that holds the string value with given name
     * and default intervals.
     *
     * @param valueName name of the stat value.
     *
     * @return {@link net.anotheria.moskito.core.stats.StatValue}.
     */
    private StatValue newStringStatValue(String valueName) {
		StatValue sv = StatValueFactory.createStatValue("", valueName, Constants.getDefaultIntervals());
		addStatValues(sv);
        return sv;
    }

    public StatValue getStatisticsAccuracy() {
        return statisticsAccuracy;
    }

    public StatValue getHitRatio() {
        return hitRatio;
    }

    public StatValue getHits() {
        return hits;
    }

    public StatValue getInMemoryHits() {
        return inMemoryHits;
    }

    public StatValue getOffHeapHits() {
        return offHeapHits;
    }

    public StatValue getOnDiskHits() {
        return onDiskHits;
    }

    public StatValue getMisses() {
        return misses;
    }

    public StatValue getInMemoryMisses() {
        return inMemoryMisses;
    }

    public StatValue getOffHeapMisses() {
        return offHeapMisses;
    }

    public StatValue getOnDiskMisses() {
        return onDiskMisses;
    }

    public StatValue getElements() {
        return elements;
    }

    public StatValue getInMemoryElements() {
        return inMemoryElements;
    }

    public StatValue getOffHeapElements() {
        return offHeapElements;
    }

    public StatValue getOnDiskElements() {
        return onDiskElements;
    }

    public StatValue getAverageGetTime() {
        return averageGetTime;
    }

    public StatValue getAverageSearchTime() {
        return averageSearchTime;
    }

    public StatValue getSearchesPerSecond() {
        return searchesPerSecond;
    }

    public StatValue getEvictionCount() {
        return evictionCount;
    }

    public StatValue getWriterQueueLength() {
        return writerQueueLength;
    }

    @Override
    public List getAvailableValueNames () {
        return VALUE_NAMES;
    }

    @Override
    public String getValueByNameAsString(String valueName, String intervalName, TimeUnit timeUnit) {
        if (StringUtils.isEmpty(valueName)) {
            throw new AssertionError("Value name can not be null or empty");
        }
        if (valueName.equals(AVERAGE_GET_TIME)) {
            return "" + timeUnit.transformMillis(getAverageGetTime().getValueAsDouble(intervalName));
        }
        if (valueName.equals(AVERAGE_SEARCH_TIME)) {
            return "" + timeUnit.transformMillis(getAverageSearchTime().getValueAsLong(intervalName));
        }
        if (valueName.equals(STATISTICS_ACCURACY)) {
            return getStatisticsAccuracy().getValueAsString(intervalName);
        }
        if (valueName.equals(HIT_RATIO)) {
            return getHitRatio().getValueAsString(intervalName);
        }
        if (valueName.equals(HITS)) {
            return getHits().getValueAsString(intervalName);
        }
        if (valueName.equals(IN_MEMORY_HITS)) {
            return getInMemoryHits().getValueAsString(intervalName);
        }
        if (valueName.equals(OFF_HEAP_HITS)) {
            return getOffHeapHits().getValueAsString(intervalName);
        }
        if (valueName.equals(ON_DISK_HITS)) {
            return getOnDiskHits().getValueAsString(intervalName);
        }
        if (valueName.equals(MISSES)) {
            return getMisses().getValueAsString(intervalName);
        }
        if (valueName.equals(IN_MEMORY_MISSES)) {
            return getInMemoryMisses().getValueAsString(intervalName);
        }
        if (valueName.equals(OFF_HEAP_MISSES)) {
            return getOffHeapMisses().getValueAsString(intervalName);
        }
        if (valueName.equals(ON_DISK_MISSES)) {
            return getOnDiskMisses().getValueAsString(intervalName);
        }
        if (valueName.equals(ELEMENTS)) {
            return getElements().getValueAsString(intervalName);
        }
        if (valueName.equals(IN_MEMORY_ELEMENTS)) {
            return getInMemoryElements().getValueAsString(intervalName);
        }
        if (valueName.equals(OFF_HEAP_ELEMENTS)) {
            return getOffHeapElements().getValueAsString(intervalName);
        }
        if (valueName.equals(ON_DISK_ELEMENTS)) {
            return getOnDiskElements().getValueAsString(intervalName);
        }
        if (valueName.equals(SEARCHES_PER_SECOND)) {
            return getSearchesPerSecond().getValueAsString(intervalName);
        }
        if (valueName.equals(EVICTION_COUNT)) {
            return getEvictionCount().getValueAsString(intervalName);
        }
        if (valueName.equals(WRITER_QUEUE_LENGTH)) {
            return getWriterQueueLength().getValueAsString(intervalName);
        }

        return super.getValueByNameAsString(valueName, intervalName, timeUnit);
    }

    @Override
    public String toStatsString(String aIntervalName, TimeUnit unit) {
        return "EhcacheStats{" +
                " statisticsAccuracy=" + statisticsAccuracy.getValueAsString(aIntervalName) +
                ",  hitRatio=" + hitRatio.getValueAsString(aIntervalName) +
                ",  hits=" + hits.getValueAsString(aIntervalName) +
                ",  inMemoryHits=" + inMemoryHits.getValueAsString(aIntervalName) +
                ",  offHeapHits=" + offHeapHits.getValueAsString(aIntervalName) +
                ",  onDiskHits=" + onDiskHits.getValueAsString(aIntervalName) +
                ",  misses=" + misses.getValueAsString(aIntervalName) +
                ",  inMemoryMisses=" + inMemoryMisses.getValueAsString(aIntervalName) +
                ",  offHeapMisses=" + offHeapMisses.getValueAsString(aIntervalName) +
                ",  onDiskMisses=" + onDiskMisses.getValueAsString(aIntervalName) +
                ",  elements=" + elements.getValueAsString(aIntervalName) +
                ",  inMemoryElements=" + inMemoryElements.getValueAsString(aIntervalName) +
                ",  offHeapElements=" + offHeapElements.getValueAsString(aIntervalName) +
                ",  onDiskElements=" + onDiskElements.getValueAsString(aIntervalName) +
                ",  averageGetTime=" + unit.transformMillis(averageGetTime.getValueAsDouble(aIntervalName)) +
                ",  averageSearchTime=" + unit.transformMillis(averageSearchTime.getValueAsLong(aIntervalName)) +
                ",  searchesPerSecond=" + searchesPerSecond.getValueAsString(aIntervalName) +
                ",  evictionCount=" + evictionCount.getValueAsString(aIntervalName) +
                ",  writerQueueLength=" + writerQueueLength.getValueAsString(aIntervalName) +
                '}';
    }

    /* if you have MoSKito WebUI this block will register stats decorator when the class is loaded at the first time */
    static {
        if(MoskitoWebUi.isPresent()) {
            new StatsDecoratorRegistrator().register();
        }
    }

    /* will be initialized only if MoSKito WebUI is embedded into application */
    private static final class StatsDecoratorRegistrator {
        public void register() {
            DecoratorRegistryFactory.getDecoratorRegistry().addDecorator(EhcacheStats.class, new EhcacheStatsDecorator());
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy