HDFS-1013. Miscellaneous improvements to HTML markup for web UIs. Contributed by Eugene Koontz.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1342103 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
897314775b
commit
b36a80a731
|
@ -57,6 +57,9 @@ Release 2.0.1-alpha - UNRELEASED
|
||||||
HDFS-3454. Balancer unconditionally logs InterruptedException at
|
HDFS-3454. Balancer unconditionally logs InterruptedException at
|
||||||
INFO level on shutdown if security is enabled. (eli)
|
INFO level on shutdown if security is enabled. (eli)
|
||||||
|
|
||||||
|
HDFS-1013. Miscellaneous improvements to HTML markup for web UIs
|
||||||
|
(Eugene Koontz via todd)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HDFS-2982. Startup performance suffers when there are many edit log
|
HDFS-2982. Startup performance suffers when there are many edit log
|
||||||
|
|
|
@ -438,9 +438,9 @@ public class JspHelper {
|
||||||
|
|
||||||
/** Return a table containing version information. */
|
/** Return a table containing version information. */
|
||||||
public static String getVersionTable() {
|
public static String getVersionTable() {
|
||||||
return "<div id='dfstable'><table>"
|
return "<div class='dfstable'><table>"
|
||||||
+ "\n <tr><td id='col1'>Version:</td><td>" + VersionInfo.getVersion() + ", " + VersionInfo.getRevision()
|
+ "\n <tr><td class='col1'>Version:</td><td>" + VersionInfo.getVersion() + ", " + VersionInfo.getRevision() + "</td></tr>"
|
||||||
+ "\n <tr><td id='col1'>Compiled:</td><td>" + VersionInfo.getDate() + " by " + VersionInfo.getUser() + " from " + VersionInfo.getBranch()
|
+ "\n <tr><td class='col1'>Compiled:</td><td>" + VersionInfo.getDate() + " by " + VersionInfo.getUser() + " from " + VersionInfo.getBranch() + "</td></tr>"
|
||||||
+ "\n</table></div>";
|
+ "\n</table></div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,9 +74,9 @@ class NamenodeJspHelper {
|
||||||
*/
|
*/
|
||||||
static String getSecurityModeText() {
|
static String getSecurityModeText() {
|
||||||
if(UserGroupInformation.isSecurityEnabled()) {
|
if(UserGroupInformation.isSecurityEnabled()) {
|
||||||
return "Security is <em>ON</em> <br>";
|
return "<div class=\"security\">Security is <em>ON</em></div>";
|
||||||
} else {
|
} else {
|
||||||
return "Security is <em>OFF</em> <br>";
|
return "<div class=\"security\">Security is <em>OFF</em></div>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,22 +99,22 @@ class NamenodeJspHelper {
|
||||||
long used = (totalMemory * 100) / commitedMemory;
|
long used = (totalMemory * 100) / commitedMemory;
|
||||||
long usedNonHeap = (totalNonHeap * 100) / commitedNonHeap;
|
long usedNonHeap = (totalNonHeap * 100) / commitedNonHeap;
|
||||||
|
|
||||||
String str = inodes + " files and directories, " + blocks + " blocks = "
|
String str = "<div>" + inodes + " files and directories, " + blocks + " blocks = "
|
||||||
+ (inodes + blocks) + " total";
|
+ (inodes + blocks) + " total";
|
||||||
if (maxobjects != 0) {
|
if (maxobjects != 0) {
|
||||||
long pct = ((inodes + blocks) * 100) / maxobjects;
|
long pct = ((inodes + blocks) * 100) / maxobjects;
|
||||||
str += " / " + maxobjects + " (" + pct + "%)";
|
str += " / " + maxobjects + " (" + pct + "%)";
|
||||||
}
|
}
|
||||||
str += ".<br>";
|
str += ".</div>";
|
||||||
str += "Heap Memory used " + StringUtils.byteDesc(totalMemory) + " is "
|
str += "<div>Heap Memory used " + StringUtils.byteDesc(totalMemory) + " is "
|
||||||
+ " " + used + "% of Commited Heap Memory "
|
+ " " + used + "% of Commited Heap Memory "
|
||||||
+ StringUtils.byteDesc(commitedMemory)
|
+ StringUtils.byteDesc(commitedMemory)
|
||||||
+ ". Max Heap Memory is " + StringUtils.byteDesc(maxMemory) +
|
+ ". Max Heap Memory is " + StringUtils.byteDesc(maxMemory) +
|
||||||
". <br>";
|
". </div>";
|
||||||
str += "Non Heap Memory used " + StringUtils.byteDesc(totalNonHeap) + " is"
|
str += "<div>Non Heap Memory used " + StringUtils.byteDesc(totalNonHeap) + " is"
|
||||||
+ " " + usedNonHeap + "% of " + " Commited Non Heap Memory "
|
+ " " + usedNonHeap + "% of " + " Commited Non Heap Memory "
|
||||||
+ StringUtils.byteDesc(commitedNonHeap) + ". Max Non Heap Memory is "
|
+ StringUtils.byteDesc(commitedNonHeap) + ". Max Non Heap Memory is "
|
||||||
+ StringUtils.byteDesc(maxNonHeap) + ".<br>";
|
+ StringUtils.byteDesc(maxNonHeap) + ".</div>";
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,19 +133,17 @@ class NamenodeJspHelper {
|
||||||
|
|
||||||
/** Return a table containing version information. */
|
/** Return a table containing version information. */
|
||||||
static String getVersionTable(FSNamesystem fsn) {
|
static String getVersionTable(FSNamesystem fsn) {
|
||||||
return "<div id='dfstable'><table>"
|
return "<div class='dfstable'><table>"
|
||||||
+ "\n <tr><td id='col1'>Started:</td><td>" + fsn.getStartTime()
|
+ "\n <tr><td class='col1'>Started:</td><td>" + fsn.getStartTime()
|
||||||
+ "</td></tr>\n" + "\n <tr><td id='col1'>Version:</td><td>"
|
+ "</td></tr>\n" + "\n <tr><td class='col1'>Version:</td><td>"
|
||||||
+ VersionInfo.getVersion() + ", " + VersionInfo.getRevision()
|
+ VersionInfo.getVersion() + ", " + VersionInfo.getRevision()
|
||||||
+ "\n <tr><td id='col1'>Compiled:</td><td>" + VersionInfo.getDate()
|
+ "</td></tr>\n" + "\n <tr><td class='col1'>Compiled:</td><td>" + VersionInfo.getDate()
|
||||||
+ " by " + VersionInfo.getUser() + " from " + VersionInfo.getBranch()
|
+ " by " + VersionInfo.getUser() + " from " + VersionInfo.getBranch()
|
||||||
+ "\n <tr><td id='col1'>Upgrades:</td><td>"
|
+ "</td></tr>\n <tr><td class='col1'>Upgrades:</td><td>"
|
||||||
+ getUpgradeStatusText(fsn)
|
+ getUpgradeStatusText(fsn)
|
||||||
+ "\n <tr><td id='col1'>Cluster ID:</td><td>" + fsn.getClusterId()
|
+ "</td></tr>\n <tr><td class='col1'>Cluster ID:</td><td>" + fsn.getClusterId()
|
||||||
+ "</td></tr>\n"
|
+ "</td></tr>\n <tr><td class='col1'>Block Pool ID:</td><td>" + fsn.getBlockPoolId()
|
||||||
+ "\n <tr><td id='col1'>Block Pool ID:</td><td>" + fsn.getBlockPoolId()
|
+ "</td></tr>\n</table></div>";
|
||||||
+ "</td></tr>\n"
|
|
||||||
+ "\n</table></div>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -157,14 +155,15 @@ class NamenodeJspHelper {
|
||||||
if (missingBlocks > 0) {
|
if (missingBlocks > 0) {
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
// Warning class is typically displayed in RED
|
// Warning class is typically displayed in RED.
|
||||||
result.append("<br/><a class=\"warning\" href=\"/corrupt_files.jsp\" title=\"List corrupt files\">\n");
|
result.append("<div>"); // opening tag of outer <div>.
|
||||||
|
result.append("<a class=\"warning\" href=\"/corrupt_files.jsp\" title=\"List corrupt files\">\n");
|
||||||
result.append("<b>WARNING : There are " + missingBlocks
|
result.append("<b>WARNING : There are " + missingBlocks
|
||||||
+ " missing blocks. Please check the logs or run fsck in order to identify the missing blocks.</b>");
|
+ " missing blocks. Please check the logs or run fsck in order to identify the missing blocks.</b>");
|
||||||
result.append("</a>");
|
result.append("</a>");
|
||||||
|
|
||||||
result.append("<br/><div class=\"small\">See the Hadoop FAQ for common causes and potential solutions.");
|
result.append("<div class=\"small\">See the Hadoop FAQ for common causes and potential solutions.</div>");
|
||||||
result.append("<br/><br/>\n");
|
result.append("</div>\n"); // closing tag of outer <div>.
|
||||||
|
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
@ -205,7 +204,7 @@ class NamenodeJspHelper {
|
||||||
|
|
||||||
// FS Image storage configuration
|
// FS Image storage configuration
|
||||||
out.print("<h3> " + nn.getRole() + " Storage: </h3>");
|
out.print("<h3> " + nn.getRole() + " Storage: </h3>");
|
||||||
out.print("<div id=\"dfstable\"> <table border=1 cellpadding=10 cellspacing=0 title=\"NameNode Storage\">\n"
|
out.print("<div class=\"dfstable\"> <table class=\"storage\" title=\"NameNode Storage\">\n"
|
||||||
+ "<thead><tr><td><b>Storage Directory</b></td><td><b>Type</b></td><td><b>State</b></td></tr></thead>");
|
+ "<thead><tr><td><b>Storage Directory</b></td><td><b>Type</b></td><td><b>State</b></td></tr></thead>");
|
||||||
|
|
||||||
StorageDirectory st = null;
|
StorageDirectory st = null;
|
||||||
|
@ -224,10 +223,10 @@ class NamenodeJspHelper {
|
||||||
String dir = "" + st.getRoot();
|
String dir = "" + st.getRoot();
|
||||||
String type = "" + st.getStorageDirType();
|
String type = "" + st.getStorageDirType();
|
||||||
out.print("<tr><td>" + dir + "</td><td>" + type
|
out.print("<tr><td>" + dir + "</td><td>" + type
|
||||||
+ "</td><td><font color=red>Failed</font></td></tr>");
|
+ "</td><td><span class=\"failed\">Failed</span></td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
out.print("</table></div><br>\n");
|
out.print("</table></div>\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateHealthReport(JspWriter out, NameNode nn,
|
void generateHealthReport(JspWriter out, NameNode nn,
|
||||||
|
@ -320,7 +319,7 @@ class NamenodeJspHelper {
|
||||||
+ "Number of Under-Replicated Blocks" + colTxt() + ":" + colTxt()
|
+ "Number of Under-Replicated Blocks" + colTxt() + ":" + colTxt()
|
||||||
+ fsn.getBlockManager().getUnderReplicatedNotMissingBlocks();
|
+ fsn.getBlockManager().getUnderReplicatedNotMissingBlocks();
|
||||||
}
|
}
|
||||||
out.print("<div id=\"dfstable\"> <table>\n" + rowTxt() + colTxt()
|
out.print("<div class=\"dfstable\"> <table>\n" + rowTxt() + colTxt()
|
||||||
+ "Configured Capacity" + colTxt() + ":" + colTxt()
|
+ "Configured Capacity" + colTxt() + ":" + colTxt()
|
||||||
+ StringUtils.byteDesc(total) + rowTxt() + colTxt() + "DFS Used"
|
+ StringUtils.byteDesc(total) + rowTxt() + colTxt() + "DFS Used"
|
||||||
+ colTxt() + ":" + colTxt() + StringUtils.byteDesc(used) + rowTxt()
|
+ colTxt() + ":" + colTxt() + StringUtils.byteDesc(used) + rowTxt()
|
||||||
|
@ -359,7 +358,7 @@ class NamenodeJspHelper {
|
||||||
+ "</table></div><br>\n");
|
+ "</table></div><br>\n");
|
||||||
|
|
||||||
if (live.isEmpty() && dead.isEmpty()) {
|
if (live.isEmpty() && dead.isEmpty()) {
|
||||||
out.print("There are no datanodes in the cluster");
|
out.print("There are no datanodes in the cluster.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -633,7 +632,7 @@ class NamenodeJspHelper {
|
||||||
if (whatNodes.equals("LIVE")) {
|
if (whatNodes.equals("LIVE")) {
|
||||||
out.print("<a name=\"LiveNodes\" id=\"title\">" + "Live Datanodes : "
|
out.print("<a name=\"LiveNodes\" id=\"title\">" + "Live Datanodes : "
|
||||||
+ live.size() + "</a>"
|
+ live.size() + "</a>"
|
||||||
+ "<br><br>\n<table border=1 cellspacing=0>\n");
|
+ "<br><br>\n<table class=\"nodes\">\n");
|
||||||
|
|
||||||
counterReset();
|
counterReset();
|
||||||
|
|
||||||
|
|
|
@ -39,10 +39,10 @@
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
<head>
|
||||||
<link rel="stylesheet" type="text/css" href="/static/hadoop.css">
|
<link rel="stylesheet" type="text/css" href="/static/hadoop.css">
|
||||||
<title>Hadoop <%=namenodeRole%> <%=namenodeLabel%></title>
|
<title>Hadoop <%=namenodeRole%> <%=namenodeLabel%></title>
|
||||||
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1><%=namenodeRole%> '<%=namenodeLabel%>' (<%=namenodeState%>)</h1>
|
<h1><%=namenodeRole%> '<%=namenodeLabel%>' (<%=namenodeState%>)</h1>
|
||||||
<%= NamenodeJspHelper.getVersionTable(fsn) %>
|
<%= NamenodeJspHelper.getVersionTable(fsn) %>
|
||||||
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color : #ffffff;
|
||||||
|
font-family : sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small {
|
||||||
|
font-size : smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable tr#row1, div.dfstable td.col1 {
|
||||||
|
font-weight : bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dfstable th {
|
||||||
|
text-align:left;
|
||||||
|
vertical-align : top;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dfstable td#col3 {
|
||||||
|
text-align : right;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable caption {
|
||||||
|
text-align : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable a#title {
|
||||||
|
font-size : larger;
|
||||||
|
font-weight : bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable td, th {
|
||||||
|
border-bottom-style : none;
|
||||||
|
padding-bottom : 4px;
|
||||||
|
padding-top : 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable A:link, A:visited {
|
||||||
|
text-decoration : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable th.header, th.headerASC, th.headerDSC {
|
||||||
|
padding-bottom : 8px;
|
||||||
|
padding-top : 8px;
|
||||||
|
}
|
||||||
|
div#dfsnodetable th.header:hover, th.headerASC:hover, th.headerDSC:hover,
|
||||||
|
td.name:hover {
|
||||||
|
text-decoration : underline;
|
||||||
|
cursor : pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable td.blocks, td.size, td.pcused, td.adminstate, td.lastcontact {
|
||||||
|
text-align : right;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable .rowNormal .header {
|
||||||
|
background-color : #ffffff;
|
||||||
|
}
|
||||||
|
div#dfsnodetable .rowAlt, .headerASC, .headerDSC {
|
||||||
|
background-color : lightyellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning {
|
||||||
|
font-weight : bolder;
|
||||||
|
color : red;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dfstable table {
|
||||||
|
white-space : pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.storage, table.nodes {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.storage td {
|
||||||
|
padding:10px;
|
||||||
|
border:1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.nodes td {
|
||||||
|
padding:0px;
|
||||||
|
border:1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#dfsnodetable td, div#dfsnodetable th, div.dfstable td {
|
||||||
|
padding-left : 10px;
|
||||||
|
padding-right : 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.perc_filled {
|
||||||
|
background-color:#AAAAFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.perc_nonfilled {
|
||||||
|
background-color:#FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.taskgraphline {
|
||||||
|
stroke-width:1;stroke-linecap:round;
|
||||||
|
}
|
||||||
|
|
||||||
|
#quicklinks {
|
||||||
|
margin: 0;
|
||||||
|
padding: 2px 4px;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
text-align: right;
|
||||||
|
background-color: #eee;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#quicklinks ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#quicklinks ul {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#quicklinks a {
|
||||||
|
font-size: smaller;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#quicklinks ul a {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.failed {
|
||||||
|
color:red;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.security {
|
||||||
|
width:100%;
|
||||||
|
}
|
Loading…
Reference in New Issue