/** * */ package com.dianping.pigeon.console.servlet.json; import java.io.IOException; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.dianping.pigeon.console.domain.Statistics; import com.dianping.pigeon.console.listener.StatusListener; import com.dianping.pigeon.console.servlet.ServiceServlet; import com.dianping.pigeon.console.status.StatusInfo; import com.dianping.pigeon.remoting.ServiceFactory; import com.dianping.pigeon.remoting.invoker.config.InvokerConfig; import com.dianping.pigeon.remoting.invoker.process.statistics.InvokerCapacityBucket; import com.dianping.pigeon.remoting.invoker.process.statistics.InvokerStatisticsHolder; import com.dianping.pigeon.remoting.invoker.route.balance.LoadBalanceManager; import com.dianping.pigeon.remoting.invoker.route.statistics.CapacityBucket; import com.dianping.pigeon.remoting.invoker.route.statistics.ServiceStatisticsHolder; import com.dianping.pigeon.remoting.provider.ProviderBootStrap; import com.dianping.pigeon.remoting.provider.Server; import com.dianping.pigeon.remoting.provider.config.ServerConfig; import com.dianping.pigeon.remoting.provider.process.RequestProcessor; import com.dianping.pigeon.remoting.provider.process.statistics.ProviderCapacityBucket; import com.dianping.pigeon.remoting.provider.process.statistics.ProviderStatisticsHolder; public class StatisticsJsonServlet extends ServiceServlet { private static final long serialVersionUID = -3000545547453006628L; public StatisticsJsonServlet(ServerConfig serverConfig, int port) { super(serverConfig, port); } @Override public String getView() { return "StatisticsJson.ftl"; } public String getContentType() { return "application/json; charset=UTF-8"; } protected boolean initServicePage(HttpServletRequest request, HttpServletResponse response) throws IOException { Statistics stat = new Statistics(); Map<String, CapacityBucket> buckets = ServiceStatisticsHolder.getCapacityBuckets(); for (String addr : buckets.keySet()) { int requests = buckets.get(addr).getLastSecondRequest(); stat.getRequestsInLastSecondOfInvoker().put(addr, requests); } Map<String, InvokerCapacityBucket> invokerCapacityMap = InvokerStatisticsHolder.getCapacityBuckets(); for (String app : invokerCapacityMap.keySet()) { InvokerCapacityBucket appCapacity = invokerCapacityMap.get(app); if (appCapacity != null) { stat.getAppRequestsOfInvoker().put(app, appCapacity.toString()); } } Map<String, ProviderCapacityBucket> providerCapacityMap = ProviderStatisticsHolder.getCapacityBuckets(); for (String app : providerCapacityMap.keySet()) { ProviderCapacityBucket appCapacity = providerCapacityMap.get(app); if (appCapacity != null) { stat.getAppRequestsOfProvider().put(app, appCapacity.toString()); } } Map<String, Server> servers = ProviderBootStrap.getServersMap(); Map<String, String> serverProcessorStatistics = stat.getServerProcessorStatistics(); for (Server server : servers.values()) { RequestProcessor processor = server.getRequestProcessor(); if (processor != null) { serverProcessorStatistics.put(server.toString(), processor.getProcessorStatistics()); } } stat.setWeightFactors(LoadBalanceManager.getWeightFactors()); for (InvokerConfig<?> invokerConfig : ServiceFactory.getAllServiceInvokers().keySet()) { stat.getInvokerConfigs().add(invokerConfig); } List<StatusInfo> infoList = StatusListener.getStatusInfoList(); for (StatusInfo info : infoList) { stat.getOthers().put(info.getSource(), "" + info.getStatusInfo()); } this.model = stat; return true; } }