/**
*
*/
package com.dianping.pigeon.console.servlet.json;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dianping.pigeon.console.servlet.ServicePage;
import com.dianping.pigeon.console.servlet.ServicePage.ClientInfo;
import com.dianping.pigeon.console.servlet.ServiceServlet;
import com.dianping.pigeon.registry.RegistryManager;
import com.dianping.pigeon.remoting.invoker.Client;
import com.dianping.pigeon.remoting.invoker.ClientManager;
import com.dianping.pigeon.remoting.provider.ProviderBootStrap;
import com.dianping.pigeon.remoting.provider.Server;
import com.dianping.pigeon.remoting.provider.config.ServerConfig;
public class DependencyJsonServlet extends ServiceServlet {
private static final long serialVersionUID = -3000545547453006628L;
private static ClientManager clientManager = ClientManager.getInstance();
public DependencyJsonServlet(ServerConfig serverConfig, int port) {
super(serverConfig, port);
}
@Override
public String getView() {
return "DependencyJson.ftl";
}
public String getContentType() {
return "application/json; charset=UTF-8";
}
protected boolean initServicePage(HttpServletRequest request, HttpServletResponse response) throws IOException {
List<String> invokers = new ArrayList<String>();
Collection<Server> servers = ProviderBootStrap.getServersMap().values();
for (Server server : servers) {
List<String> serverInvokers = server.getInvokerMetaInfo();
if (serverInvokers != null) {
invokers.addAll(serverInvokers);
}
}
ServicePage page = new ServicePage();
page.setInvokers(invokers);
page.setEnvironment(configManager.getEnv());
Map<String, List<ClientInfo>> clientResults = new HashMap<String, List<ClientInfo>>();
Map<String, List<Client>> clientsMap = clientManager.getClusterListener().getServiceClients();
if (clientsMap != null) {
for (String key : clientsMap.keySet()) {
List<Client> clients = clientsMap.get(key);
List<ClientInfo> clientInfoList = new ArrayList<ClientInfo>();
for (Client client : clients) {
clientInfoList.add(new ClientInfo(client, RegistryManager.getInstance().getServiceWeight(
client.getAddress())));
}
clientResults.put(key, clientInfoList);
}
}
page.setClients(clientResults);
page.setServiceAddresses(RegistryManager.getInstance().getAllReferencedServiceAddresses());
this.model = page;
return true;
}
}