Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.jstorm.ui.model.pages; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import backtype.storm.generated.MetricInfo; import backtype.storm.generated.SupervisorSummary; import backtype.storm.generated.SupervisorWorkers; import backtype.storm.generated.TaskComponent; import backtype.storm.generated.WorkerSummary; import backtype.storm.utils.NimbusClient; import backtype.storm.utils.Utils; import com.alibaba.jstorm.client.ConfigExtension; import com.alibaba.jstorm.common.metric.window.StatBuckets; import com.alibaba.jstorm.ui.NimbusClientManager; import com.alibaba.jstorm.ui.UIDef; import com.alibaba.jstorm.ui.UIUtils; import com.alibaba.jstorm.ui.model.ColumnData; import com.alibaba.jstorm.ui.model.LinkData; import com.alibaba.jstorm.ui.model.PageGenerator; import com.alibaba.jstorm.ui.model.TableData; import com.alibaba.jstorm.utils.NetWorkUtils; public class SupervisorPage implements PageGenerator { private static final Logger LOG = LoggerFactory.getLogger(SupervisorPage.class); public TableData getSupervisorTable(SupervisorSummary supervisorSummary, Map<String, String> paramMap, Map<String, Object> nimbusConf) { TableData table = new TableData(); List<String> headers = table.getHeaders(); List<Map<String, ColumnData>> lines = table.getLines(); table.setName(UIDef.SUPERVISOR.toUpperCase()); headers.add(UIDef.HOST.toUpperCase()); headers.add(UIDef.IP); headers.add(UIDef.HEADER_UPTIME); headers.add(UIDef.HEADER_TOTAL_PORT); headers.add(UIDef.HEADER_USED_PORT); headers.add(UIDef.HEADER_CONF); headers.add(UIDef.HEADER_LOGS); Map<String, ColumnData> line = new HashMap<String, ColumnData>(); lines.add(line); ColumnData hostColumn = new ColumnData(); hostColumn.addText(NetWorkUtils.ip2Host(supervisorSummary.get_host())); line.put(UIDef.HOST.toUpperCase(), hostColumn); ColumnData ipColumn = new ColumnData(); ipColumn.addText(NetWorkUtils.host2Ip(supervisorSummary.get_host())); line.put(UIDef.IP, ipColumn); ColumnData uptimeColumn = new ColumnData(); int uptime = supervisorSummary.get_uptime_secs(); uptimeColumn.addText(StatBuckets.prettyUptimeStr(uptime)); line.put(UIDef.HEADER_UPTIME, uptimeColumn); ColumnData totalPortColumn = new ColumnData(); totalPortColumn.addText(String.valueOf(supervisorSummary.get_num_workers())); line.put(UIDef.HEADER_TOTAL_PORT, totalPortColumn); ColumnData usedPortColumn = new ColumnData(); usedPortColumn.addText(String.valueOf(supervisorSummary.get_num_used_workers())); line.put(UIDef.HEADER_USED_PORT, usedPortColumn); ColumnData confColumn = new ColumnData(); LinkData confLink = new LinkData(); confColumn.addLinkData(confLink); line.put(UIDef.HEADER_CONF, confColumn); confLink.setUrl(UIDef.LINK_TABLE_PAGE); confLink.setText(UIDef.HEADER_CONF.toLowerCase()); confLink.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER)); confLink.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_CONF); confLink.addParam(UIDef.CONF_TYPE, UIDef.CONF_TYPE_SUPERVISOR); confLink.addParam(UIDef.HOST, NetWorkUtils.host2Ip(supervisorSummary.get_host())); confLink.addParam(UIDef.PORT, String.valueOf(ConfigExtension.getSupervisorDeamonHttpserverPort(nimbusConf))); ColumnData logColumn = new ColumnData(); LinkData logLink = new LinkData(); logColumn.addLinkData(logLink); line.put(UIDef.HEADER_LOGS, logColumn); logLink.setUrl(UIDef.LINK_TABLE_PAGE); logLink.setText(UIDef.HEADER_LOGS.toLowerCase()); logLink.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_LISTLOG); logLink.addParam(UIDef.HOST, NetWorkUtils.host2Ip(supervisorSummary.get_host())); logLink.addParam(UIDef.PORT, String.valueOf(ConfigExtension.getSupervisorDeamonHttpserverPort(nimbusConf))); logLink.addParam(UIDef.DIR, "."); return table; } public TableData getWokerTable(SupervisorWorkers supervisorWorkers, Map<String, String> paramMap, Map<String, Object> nimbusConf) { TableData table = new TableData(); List<String> headers = table.getHeaders(); List<Map<String, ColumnData>> lines = table.getLines(); table.setName(StringUtils.capitalize(UIDef.WOKER)); headers.add(StringUtils.capitalize(UIDef.PORT)); headers.add(UIDef.HEADER_UPTIME); headers.add(StringUtils.capitalize(UIDef.TOPOLOGY)); headers.add(UIDef.HEADER_TASK_LIST); headers.add(UIDef.HEADER_LOG); headers.add(StringUtils.capitalize(UIDef.JSTACK)); List<WorkerSummary> workerSummaries = supervisorWorkers.get_workers(); if (workerSummaries == null) { LOG.error("Failed to get workers of " + paramMap.get(UIDef.HOST)); return table; } int logServerPort = ConfigExtension.getSupervisorDeamonHttpserverPort(nimbusConf); for (WorkerSummary workerSummary : workerSummaries) { Map<String, ColumnData> line = new HashMap<String, ColumnData>(); lines.add(line); ColumnData portColumn = new ColumnData(); portColumn.addText(String.valueOf(workerSummary.get_port())); line.put(StringUtils.capitalize(UIDef.PORT), portColumn); ColumnData uptimeColumn = new ColumnData(); int uptime = workerSummary.get_uptime(); uptimeColumn.addText(StatBuckets.prettyUptimeStr(uptime)); line.put(UIDef.HEADER_UPTIME, uptimeColumn); ColumnData topologyColumn = new ColumnData(); topologyColumn.addText(workerSummary.get_topology()); line.put(StringUtils.capitalize(UIDef.TOPOLOGY), topologyColumn); ColumnData taskIdColumn = new ColumnData(); line.put(UIDef.HEADER_TASK_LIST, taskIdColumn); for (TaskComponent taskComponent : workerSummary.get_tasks()) { LinkData linkData = new LinkData(); taskIdColumn.addLinkData(linkData); linkData.setUrl(UIDef.LINK_WINDOW_TABLE); linkData.setText(taskComponent.get_component() + "-" + taskComponent.get_taskId()); linkData.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER)); linkData.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_COMPONENT); linkData.addParam(UIDef.TOPOLOGY, workerSummary.get_topology()); linkData.addParam(UIDef.COMPONENT, taskComponent.get_component()); } ColumnData logColumn = new ColumnData(); LinkData logLink = new LinkData(); logColumn.addLinkData(logLink); line.put(UIDef.HEADER_LOG, logColumn); logLink.setUrl(UIDef.LINK_LOG); logLink.setText(UIDef.HEADER_LOG.toLowerCase()); logLink.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER)); logLink.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_LOG); logLink.addParam(UIDef.HOST, NetWorkUtils.host2Ip(supervisorWorkers.get_supervisor().get_host())); logLink.addParam(UIDef.TOPOLOGY, workerSummary.get_topology()); logLink.addParam(UIDef.PORT, String.valueOf(workerSummary.get_port())); logLink.addParam(UIDef.LOG_SERVER_PORT, String.valueOf(logServerPort)); ColumnData jstackColumn = new ColumnData(); LinkData jstackLink = new LinkData(); jstackColumn.addLinkData(jstackLink); line.put(StringUtils.capitalize(UIDef.JSTACK), jstackColumn); jstackLink.setUrl(UIDef.LINK_TABLE_PAGE); jstackLink.setText(UIDef.JSTACK); jstackLink.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER)); jstackLink.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_JSTACK); jstackLink.addParam(UIDef.HOST, supervisorWorkers.get_supervisor().get_host()); jstackLink.addParam(UIDef.TOPOLOGY, workerSummary.get_topology()); jstackLink.addParam(UIDef.PORT, String.valueOf(workerSummary.get_port())); jstackLink.addParam(UIDef.LOG_SERVER_PORT, String.valueOf(logServerPort)); } return table; } public List<TableData> getMetricsTable(SupervisorWorkers supervisorWorkers, Map<String, String> paramMap, Map<String, Object> nimbusConf) { Map<String, MetricInfo> metrics = supervisorWorkers.get_workerMetric(); if (metrics == null) { LOG.error("No metrics of " + supervisorWorkers.get_supervisor().get_host()); return null; } return UIUtils.getWorkerMetricsTable(metrics, StatBuckets.ALL_TIME_WINDOW, paramMap); } @Override public Output generate(Map<String, String> paramMap) { // TODO Auto-generated method stub List<TableData> tables = new ArrayList<TableData>(); NimbusClient client = null; try { client = NimbusClientManager.getNimbusClient(paramMap); String jsonConf = client.getClient().getNimbusConf(); Map<String, Object> nimbusConf = (Map<String, Object>) Utils.from_json(jsonConf); String host = paramMap.get(UIDef.HOST); if (StringUtils.isBlank(host)) { throw new IllegalArgumentException("Invalid parameter of host "); } SupervisorWorkers supervisorWorkers = client.getClient().getSupervisorWorkers(host); TableData supervisorTable = getSupervisorTable(supervisorWorkers.get_supervisor(), paramMap, nimbusConf); tables.add(supervisorTable); TableData workerTable = getWokerTable(supervisorWorkers, paramMap, nimbusConf); tables.add(workerTable); List<TableData> metricsTables = getMetricsTable(supervisorWorkers, paramMap, nimbusConf); if (metricsTables != null) { tables.addAll(metricsTables); } Output ret = new Output(); ret.tables = tables; ret.rawData = ""; return ret; } catch (Exception e) { // TODO Auto-generated catch block NimbusClientManager.removeClient(paramMap); LOG.error(e.getMessage(), e); return UIUtils.getErrorInfo(e); } } }