package fi.otavanopisto.muikku.plugins.schooldatapyramus.rest.cache;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
@Singleton
public class EntityCacheStatistics {
@PostConstruct
public void init() {
statistics = new HashMap<>();
}
public void addHit(String type, String path) {
getStatistics(type).addHit(path);
}
public void addMiss(String type, String path) {
getStatistics(type).addMiss(path);
}
public void addSkip(String type, String path) {
getStatistics(type).addSkip(path);
}
public List<String> getCacheTypes() {
List<String> result = new ArrayList<>(statistics.keySet());
Collections.sort(result);
return result;
}
public Statistics getStatistics(String type) {
Statistics statistics = this.statistics.get(type);
if (statistics == null) {
statistics = new Statistics();
this.statistics.put(type, statistics);
}
return statistics;
}
private Map<String, Statistics> statistics;
public static class Statistics {
public Statistics() {
pathStatistics = new HashMap<>();
}
public void addSkip(String path) {
getPathStatistics(path).incSkip();
}
public void addHit(String path) {
getPathStatistics(path).incHit();
}
public void addMiss(String path) {
getPathStatistics(path).incMiss();
}
public int getHits(String path) {
return getPathStatistics(path).getHits();
}
public int getMisses(String path) {
return getPathStatistics(path).getMisses();
}
public int getSkips(String path) {
return getPathStatistics(path).getSkips();
}
public List<String> getPaths() {
List<String> result = new ArrayList<>(pathStatistics.keySet());
Collections.sort(result);
return result;
}
private PathStatistics getPathStatistics(String path) {
PathStatistics result = pathStatistics.get(path);
if (result == null) {
result = new PathStatistics();
pathStatistics.put(path, result);
}
return result;
}
private Map<String, PathStatistics> pathStatistics;
}
public static class PathStatistics {
public int getHits() {
return hits;
}
public void incHit() {
hits++;
}
public int getMisses() {
return misses;
}
public void incMiss() {
misses++;
}
public int getSkips() {
return skips;
}
public void incSkip() {
skips++;
}
private int hits;
private int misses;
private int skips;
}
}