/* * gw2live - GuildWars 2 Dynamic Map * * Website: http://gw2map.com * * Copyright 2013 zyclonite networx * http://zyclonite.net * Developer: Lukas Prettenthaler */ package net.zyclonite.gw2live.handler; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.lang.management.ManagementFactory; import java.lang.management.MemoryPoolMXBean; import java.util.HashMap; import java.util.Map; import net.zyclonite.gw2live.model.JvmInfo; import net.zyclonite.gw2live.model.MemInfo; import net.zyclonite.gw2live.service.HazelcastCache; import net.zyclonite.gw2live.util.AppConfig; import net.zyclonite.gw2live.util.LocalCache; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; /** * * @author zyclonite */ public class AdminRestHandler implements Handler<HttpServerRequest> { private static final Log LOG = LogFactory.getLog(AdminRestHandler.class); private final ObjectMapper mapper; private final String crossdomainpolicy; private final HazelcastCache hcache; public AdminRestHandler() { mapper = new ObjectMapper(); hcache = HazelcastCache.getInstance(); final AppConfig config = AppConfig.getInstance(); crossdomainpolicy = config.getString("webservice.cross-domain-policy", "*"); } @Override public void handle(final HttpServerRequest req) { req.response().setStatusCode(200); req.response().putHeader("Content-Type", "application/json; charset=utf-8"); req.response().putHeader("Access-Control-Allow-Origin", crossdomainpolicy); final String endpoint = req.params().get("endpoint"); LOG.debug("got request path: " + req.path()); String output; try { switch (endpoint) { case "subscriber": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); output = mapper.writeValueAsString(LocalCache.SUBSCRIBER); break; case "master": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); output = mapper.writeValueAsString(LocalCache.MASTER); break; case "cluster": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); output = mapper.writeValueAsString(hcache.getCluster().getMembers()); break; case "jvm": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); final JvmInfo jvm = new JvmInfo(); jvm.setThreadCount(ManagementFactory.getThreadMXBean().getThreadCount()); jvm.setCommitedHeap(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()); jvm.setUsedHeap(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()); jvm.setCommitedNonHeap(ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage().getCommitted()); jvm.setUsedNonHeap(ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage().getUsed()); final Map<String, MemInfo> memory = new HashMap<>(); for(final MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()){ final MemInfo meminfo = new MemInfo(); meminfo.setUsage(bean.getUsage()); meminfo.setPeakUsage(bean.getPeakUsage()); meminfo.setCollectionUsage(bean.getCollectionUsage()); memory.put(bean.getName(), meminfo); } jvm.setMemInfo(memory); output = mapper.writeValueAsString(jvm); break; case "pvecache": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); output = mapper.writeValueAsString(hcache.getPveCacheMap().getLocalMapStats()); break; case "wvwcache": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); output = mapper.writeValueAsString(hcache.getWvwCacheMap().getLocalMapStats()); break; case "channelcache": req.response().putHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); req.response().putHeader("Pragma", "no-cache"); output = mapper.writeValueAsString(hcache.getChannelMap().getLocalMultiMapStats()); break; default: output = "{\"error\":\"wrong endpoint\"}"; } } catch (JsonProcessingException ex) { output = "{\"error\":\"server error\"}"; LOG.warn("could not translate object to json " + ex.getMessage()); } req.response().end(output); } }