blob: de78bfe7ce8cb8326b6dd6def1ab902a106687c1 [file] [log] [blame]
/**
* 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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import backtype.storm.generated.ClusterSummary;
import backtype.storm.generated.NimbusStat;
import backtype.storm.generated.NimbusSummary;
import backtype.storm.generated.SupervisorSummary;
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.PageIndex;
import com.alibaba.jstorm.ui.model.TableData;
import com.alibaba.jstorm.utils.JStormUtils;
import com.alibaba.jstorm.utils.NetWorkUtils;
public class ClusterPage implements PageGenerator {
private static final Logger LOG = LoggerFactory
.getLogger(ClusterPage.class);
public static final String TABLE_NAME_MASTER = "Nimbus Master";
public static final String TABLE_NAME_SLAVES = "Nimbus Slaves";
public TableData getNimbusMaster(NimbusSummary nimbusSummary,
Map<String, Object> nimbusConf, Map<String, String> paramMap) {
TableData nimbusMaster = new TableData();
nimbusMaster.setName(TABLE_NAME_MASTER);
List<String> headers = nimbusMaster.getHeaders();
List<Map<String, ColumnData>> lines = nimbusMaster.getLines();
headers.add(UIDef.HOST.toUpperCase());
headers.add(UIDef.HEADER_UPTIME);
headers.add(UIDef.HEADER_SUPERVISOR);
headers.add(UIDef.HEADER_TOTAL_PORT);
headers.add(UIDef.HEADER_USED_PORT);
headers.add(UIDef.HEADER_FREE_PORT);
headers.add(UIDef.HEADER_VERSION);
headers.add(UIDef.HEADER_CONF);
headers.add(UIDef.HEADER_LOGS);
Map<String, ColumnData> line = new HashMap<String, ColumnData>();
lines.add(line);
ColumnData nimbusMasterColumn = new ColumnData();
String ipPort = nimbusSummary.get_nimbus_master().get_host();
String hostPort = UIUtils.getHostIp(ipPort);
nimbusMasterColumn.addText(hostPort);
line.put(UIDef.HOST.toUpperCase(), nimbusMasterColumn);
ColumnData uptimeColumn = new ColumnData();
String uptime = nimbusSummary.get_nimbus_master().get_uptime_secs();
if (uptime == null) {
uptimeColumn.addText(StatBuckets.prettyUptimeStr(0));
} else {
uptimeColumn.addText(StatBuckets.prettyUptimeStr(Integer
.valueOf(uptime)));
}
line.put(UIDef.HEADER_UPTIME, uptimeColumn);
ColumnData supervisorColumn = new ColumnData();
supervisorColumn.addText(String.valueOf(nimbusSummary
.get_supervisor_num()));
line.put(UIDef.HEADER_SUPERVISOR, supervisorColumn);
ColumnData totalPortColumn = new ColumnData();
totalPortColumn.addText(String.valueOf(nimbusSummary
.get_total_port_num()));
line.put(UIDef.HEADER_TOTAL_PORT, totalPortColumn);
ColumnData usedPortColumn = new ColumnData();
usedPortColumn
.addText(String.valueOf(nimbusSummary.get_used_port_num()));
line.put(UIDef.HEADER_USED_PORT, usedPortColumn);
ColumnData freePortColumn = new ColumnData();
freePortColumn
.addText(String.valueOf(nimbusSummary.get_free_port_num()));
line.put(UIDef.HEADER_FREE_PORT, freePortColumn);
ColumnData versionColumn = new ColumnData();
versionColumn.addText(nimbusSummary.get_version());
line.put(UIDef.HEADER_VERSION, versionColumn);
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_NIMBUS);
ColumnData logsColumn = new ColumnData();
LinkData logsLink = new LinkData();
logsColumn.addLinkData(logsLink);
line.put(UIDef.HEADER_LOGS, logsColumn);
logsLink.setUrl(UIDef.LINK_TABLE_PAGE);
logsLink.setText(UIDef.HEADER_LOGS.toLowerCase());
logsLink.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER));
logsLink.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_LISTLOG);
logsLink.addParam(UIDef.HOST, UIUtils.getHost(ipPort));
logsLink.addParam(UIDef.PORT, String.valueOf(ConfigExtension
.getNimbusDeamonHttpserverPort(nimbusConf)));
logsLink.addParam(UIDef.DIR, ".");
return nimbusMaster;
}
public TableData getNimbusSlaves(NimbusSummary nimbusSummary,
Map<String, Object> nimbusConf, Map<String, String> paramMap) {
List<NimbusStat> slaves = nimbusSummary.get_nimbus_slaves();
if (slaves == null || slaves.size() == 0) {
return null;
}
TableData slavesTable = new TableData();
List<String> headers = slavesTable.getHeaders();
List<Map<String, ColumnData>> lines = slavesTable.getLines();
slavesTable.setName(TABLE_NAME_SLAVES);
headers.add(UIDef.HOST.toUpperCase());
headers.add(UIDef.HEADER_UPTIME);
headers.add(UIDef.HEADER_LOGS);
for (NimbusStat slave : slaves) {
Map<String, ColumnData> line = new HashMap<String, ColumnData>();
lines.add(line);
ColumnData hostColumn = new ColumnData();
String ipPort = slave.get_host();
String hostPort = UIUtils.getHostIp(ipPort);
hostColumn.addText(hostPort);
line.put(UIDef.HOST.toUpperCase(), hostColumn);
ColumnData uptimeColumn = new ColumnData();
String uptime = slave.get_uptime_secs();
if (uptime == null) {
uptimeColumn.addText(StatBuckets.prettyUptimeStr(0));
} else {
uptimeColumn.addText(StatBuckets.prettyUptimeStr(Integer
.valueOf(uptime)));
}
line.put(UIDef.HEADER_UPTIME, uptimeColumn);
ColumnData logsColumn = new ColumnData();
LinkData logsLink = new LinkData();
logsColumn.addLinkData(logsLink);
line.put(UIDef.HEADER_LOGS, logsColumn);
logsLink.setUrl(UIDef.LINK_TABLE_PAGE);
logsLink.setText(UIDef.HEADER_LOGS.toLowerCase());
logsLink.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER));
logsLink.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_LISTLOG);
logsLink.addParam(UIDef.HOST, UIUtils.getHost(ipPort));
logsLink.addParam(UIDef.PORT, String.valueOf(ConfigExtension
.getNimbusDeamonHttpserverPort(nimbusConf)));
logsLink.addParam(UIDef.DIR, ".");
}
return slavesTable;
}
public List<TableData> getNimbus(NimbusSummary nimbusSummary,
Map<String, Object> nimbusConf, Map<String, String> paramMap) {
List<TableData> ret = new ArrayList<TableData>();
TableData nimbusMaster =
getNimbusMaster(nimbusSummary, nimbusConf, paramMap);
ret.add(nimbusMaster);
TableData slavesTable =
getNimbusSlaves(nimbusSummary, nimbusConf, paramMap);
if (slavesTable != null) {
ret.add(slavesTable);
}
return ret;
}
public TableData getSupervisorTable(
List<SupervisorSummary> supervisorSummaries,
Map<String, String> paramMap) {
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.HEADER_UPTIME);
headers.add(UIDef.HEADER_TOTAL_PORT);
headers.add(UIDef.HEADER_USED_PORT);
if (supervisorSummaries == null) {
return table;
}
long pos = JStormUtils.parseLong(paramMap.get(UIDef.POS), 0);
for ( long index = pos;
index < supervisorSummaries.size() && index < pos + UIUtils.ONE_TABLE_PAGE_SIZE;
index++ ) {
SupervisorSummary supervisorSummary = supervisorSummaries.get((int)index);
Map<String, ColumnData> line = new HashMap<String, ColumnData>();
lines.add(line);
ColumnData hostColumn = new ColumnData();
LinkData linkData = new LinkData();
hostColumn.addLinkData(linkData);
line.put(UIDef.HOST.toUpperCase(), hostColumn);
linkData.setUrl(UIDef.LINK_TABLE_PAGE);
String ip = supervisorSummary.get_host();
linkData.setText(NetWorkUtils.ip2Host(ip));
linkData.addParam(UIDef.CLUSTER, paramMap.get(UIDef.CLUSTER));
linkData.addParam(UIDef.PAGE_TYPE, UIDef.PAGE_TYPE_SUPERVISOR);
linkData.addParam(UIDef.HOST, ip);
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);
}
return table;
}
@Override
public Output generate(Map<String, String> paramMap) {
// TODO Auto-generated method stub
List<TableData> tables = null;
NimbusClient client = null;
try {
client = NimbusClientManager.getNimbusClient(paramMap);
ClusterSummary clusterSummary = client.getClient().getClusterInfo();
String jsonConf = client.getClient().getNimbusConf();
Map<String, Object> nimbusConf =
(Map<String, Object>) Utils.from_json(jsonConf);
NimbusSummary nimbusSummary = clusterSummary.get_nimbus();
tables = getNimbus(nimbusSummary, nimbusConf, paramMap);
TableData topologyTable =
UIUtils.getTopologyTable(clusterSummary.get_topologies(),
paramMap);
tables.add(topologyTable);
tables.add(getSupervisorTable(clusterSummary.get_supervisors(),
paramMap));
Output ret = new Output();
ret.tables = tables;
ret.rawData = "";
if (clusterSummary.get_supervisors().size() > UIUtils.ONE_TABLE_PAGE_SIZE) {
ret.pages = PageIndex.generatePageIndex(
clusterSummary.get_supervisors().size(),
UIUtils.ONE_TABLE_PAGE_SIZE,
UIDef.LINK_TABLE_PAGE, paramMap);
}
return ret;
} catch (Exception e) {
// TODO Auto-generated catch block
NimbusClientManager.removeClient(paramMap);
LOG.error(e.getMessage(), e);
return UIUtils.getErrorInfo(e);
}
}
}