package fi.otavanopisto.muikku.plugins.schooldatapyramus;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import fi.otavanopisto.muikku.plugin.PluginRESTService;
import fi.otavanopisto.muikku.plugins.schooldatapyramus.rest.cache.EntityCacheStatistics;
import fi.otavanopisto.muikku.plugins.schooldatapyramus.rest.cache.EntityCacheStatistics.Statistics;
import fi.otavanopisto.security.rest.RESTPermit;
import fi.otavanopisto.security.rest.RESTPermit.Handling;
@Path("/system/pyramus")
@Produces("application/json")
public class PyramusSystemRESTService extends PluginRESTService {
private static final long serialVersionUID = -6277887422925061715L;
@Inject
private EntityCacheStatistics entityCacheStatistics;
@GET
@Path("/cache/statistics")
@RESTPermit(handling = Handling.UNSECURED)
public Response ping() {
Map<String, Map<String, CachePathStatistics>> result = new HashMap<>();
for (String cacheType : entityCacheStatistics.getCacheTypes()) {
Statistics statistics = entityCacheStatistics.getStatistics(cacheType);
Map<String, CachePathStatistics> pathStatistics = new HashMap<>();
for (String path : statistics.getPaths()) {
pathStatistics.put(path, new CachePathStatistics(
statistics.getHits(path),
statistics.getMisses(path),
statistics.getSkips(path)));
}
result.put(cacheType, pathStatistics);
}
return Response.ok(result).build();
}
public static class CachePathStatistics {
public CachePathStatistics(int hits, int misses, int skips) {
super();
this.hits = hits;
this.misses = misses;
this.skips = skips;
}
public int getHits() {
return hits;
}
public void setHits(int hits) {
this.hits = hits;
}
public int getMisses() {
return misses;
}
public void setMisses(int misses) {
this.misses = misses;
}
public int getSkips() {
return skips;
}
public void setSkips(int skips) {
this.skips = skips;
}
private int hits;
private int misses;
private int skips;
}
}