package org.act.tstream.ui.model.data; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import org.apache.log4j.Logger; import backtype.storm.Config; import backtype.storm.generated.SupervisorWorkers; import backtype.storm.generated.TopologyMetricInfo; import backtype.storm.generated.WorkerSummary; import backtype.storm.generated.WorkerMetricData; import backtype.storm.utils.NimbusClient; import org.act.tstream.ui.UIUtils; import org.act.tstream.ui.model.SupervisorSumm; import org.act.tstream.ui.model.WorkerSumm; import org.act.tstream.ui.model.WorkerMetrics; /** * * @author xin.zhou/Longda */ @ManagedBean(name = "supervisorpage") @ViewScoped public class SupervisorPage implements Serializable { private static final long serialVersionUID = -6103468103521877721L; private static final Logger LOG = Logger.getLogger(SupervisorPage.class); private String clusterName = null; private String host = "localhost"; private String ip = null; private List<SupervisorSumm> ssumm = null; private List<WorkerSumm> wsumm = null; private List<String> topologyList = null; private List<TopologyMetricInfo> topologyMetricsList = null; private List<WorkerMetrics> workermetrics = null; public SupervisorPage() throws Exception { FacesContext ctx = FacesContext.getCurrentInstance(); if (ctx.getExternalContext().getRequestParameterMap().get("clusterName") != null) { clusterName = (String) ctx.getExternalContext().getRequestParameterMap() .get("clusterName"); } if (ctx.getExternalContext().getRequestParameterMap().get("host") != null) { host = (String) ctx.getExternalContext().getRequestParameterMap() .get("host"); } init(host); } @SuppressWarnings("rawtypes") public void init(String host) throws Exception { NimbusClient client = null; try { Map conf = UIUtils.readUiConfig(); client = UIUtils.getNimbusClient(conf, clusterName); SupervisorWorkers supervisorWorkers = client.getClient() .getSupervisorWorkers(host); ssumm = new ArrayList<SupervisorSumm>(); SupervisorSumm supervSumm = new SupervisorSumm(supervisorWorkers.get_supervisor()); ssumm.add(supervSumm); ip = supervSumm.getIp(); generateWorkerSum(supervisorWorkers.get_workers()); getTopoList(); getTopoMetrList(client); getWorkerMetrData(); } catch (Exception e) { LOG.error("Failed to get cluster information:", e); throw e; } finally { if (client != null) { client.close(); } } } private void generateWorkerSum(List<WorkerSummary> workerSummaries) { wsumm = new ArrayList<WorkerSumm>(); for (WorkerSummary workerSummary : workerSummaries) { wsumm.add(new WorkerSumm(workerSummary)); } } public List<SupervisorSumm> getSsumm() { return ssumm; } public void setSsumm(List<SupervisorSumm> ssumm) { this.ssumm = ssumm; } public List<WorkerSumm> getWsumm() { return wsumm; } public void setWsumm(List<WorkerSumm> wsumm) { this.wsumm = wsumm; } public void setworkermetrics(List<WorkerMetrics> wrkMetrList) { this.workermetrics = wrkMetrList; } public List<WorkerMetrics> getworkermetrics(){ return this.workermetrics; } public void getTopoList() { if (topologyList == null) { topologyList = new ArrayList<String>(); } if (wsumm == null) return; for(WorkerSumm workerSumm : wsumm) { String topologyId = workerSumm.getTopology(); if (!(topologyList.contains(topologyId))) { topologyList.add(topologyId); } } } public void getTopoMetrList(NimbusClient client) throws Exception { if (topologyList == null) return; if (topologyMetricsList == null) { topologyMetricsList = new ArrayList<TopologyMetricInfo>(); } for (String topologyId : topologyList) { try { TopologyMetricInfo topoMetrInfo = client.getClient().getTopologyMetric(topologyId); topologyMetricsList.add(topoMetrInfo); } catch (Exception e) { LOG.error("Failed to get topology metrics information:", e); throw e; } } } public void getWorkerMetrData() { if (topologyMetricsList == null) return; if (workermetrics == null) { workermetrics = new ArrayList<WorkerMetrics>(); } for (TopologyMetricInfo topoMetr : topologyMetricsList) { List<WorkerMetricData> wrkMetrLstFromTopo = topoMetr.get_worker_metric_list(); if (wrkMetrLstFromTopo == null) return; for (WorkerMetricData wrkMetrData : wrkMetrLstFromTopo) { if (wrkMetrData.get_hostname().equals(host) || wrkMetrData.get_hostname().equals(ip)) { WorkerMetrics workerMetrics = new WorkerMetrics(); workerMetrics.updateWorkerMetricData(wrkMetrData); workermetrics.add(workerMetrics); } } } } public static void main(String[] args) { try { SupervisorPage m = new SupervisorPage(); // m.init("free-56-151.shucang.alipay.net"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }