Subversion Repositories SmartDukaan

Rev

Rev 3297 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.serving.controllers;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Statistics;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;

/**
 * @author vikas
 *
 */
@InterceptorRefs({
    @InterceptorRef("defaultStack")
})
public class CacheAdminController {
        
    private static final long serialVersionUID = -6730428402950686583L;
    
    public static final String NAME_KEY = "name";
    public static final String DISK_STORE_KEY = "disk_store_size";
    public static final String EVICTION_POLICY_KEY = "eviction_policy";
    public static final String MEMORY_STORE_KEY = "memory_store_size";
    public static final String OFF_HEAP_STORE_KEY = "off_heap_store_size";
    public static final String SEARCHES_PER_SEC_KEY = "searches_per_second";
    public static final String STATUS_KEY = "status";
    public static final String AVG_GET_TIME_KEY = "avg_get_time";
    public static final String AVG_SEARCH_TIME_KEY = "avg_search_time";
    public static final String CACHE_HITS_KEY = "cache_hits";
    public static final String CACHE_MISSES_KEY = "cache_misses";
    public static final String CACHE_HIT_RATIO_KEY = "cache_hit_ratio";
    public static final String EVICTION_COUNT_KEY = "eviction_count";
    
    private static Logger log = Logger.getLogger(CacheAdminController.class);
        
    private List<Map<String, String>> cacheStats;
    private String cacheName;

    public String index() {
        CacheManager cacheManager = CacheManager.create();
        String[] cacheNames = cacheManager.getCacheNames();
        cacheStats = new ArrayList<Map<String,String>>();
        for (String cacheName : cacheNames) {
            Map<String, String> cacheStat = new HashMap<String, String>();
            Cache cache = cacheManager.getCache(cacheName);
            cacheStat.put(NAME_KEY, cache.getName());
            cacheStat.put(EVICTION_POLICY_KEY, cache.getMemoryStoreEvictionPolicy().getName());
            cacheStat.put(MEMORY_STORE_KEY, Long.toString(cache.getMemoryStoreSize()));
            cacheStat.put(OFF_HEAP_STORE_KEY, Long.toString(cache.getOffHeapStoreSize()));
            cacheStat.put(DISK_STORE_KEY, Integer.toString(cache.getDiskStoreSize()));
            cacheStat.put(STATUS_KEY, cache.getStatus().toString());
            
            Statistics stat = cache.getStatistics();
            Long hits = stat.getCacheHits();
            Long misses = stat.getCacheMisses();
            Double hitratio = 0d;
            if (hits > 0) {
                hitratio = ((double)hits)/(hits + misses)*100;
            }
            cacheStat.put(AVG_GET_TIME_KEY, Float.toString(stat.getAverageGetTime()));
            cacheStat.put(AVG_SEARCH_TIME_KEY, Float.toString(stat.getAverageSearchTime()));
            cacheStat.put(CACHE_HITS_KEY, Long.toString(hits));
            cacheStat.put(CACHE_MISSES_KEY, Long.toString(misses));
            cacheStat.put(CACHE_HIT_RATIO_KEY, Long.toString(hitratio.longValue()));
            cacheStat.put(EVICTION_COUNT_KEY, Long.toString(stat.getEvictionCount()));
            cacheStat.put(SEARCHES_PER_SEC_KEY, Long.toString(stat.getSearchesPerSecond()));
            cacheStats.add(cacheStat);
            log.info(stat);
        }
        return "index";
    }
    
    public void destroy() {
        CacheManager cacheManager = CacheManager.create();
        for (String name : cacheManager.getCacheNames()) {
            if (name.equals(cacheName)) {
                cacheManager.getCache(name).removeAll();
            }
        }
    }
    public List<Map<String, String>> getCacheStats() {
        return cacheStats;
    }
    
    public void setId(String name) {
        cacheName = name;
    }
}