YARN-3301. Fixed the format issue of the new RM attempt web page. Contributed by Xuan Gong

(cherry picked from commit 0d3188fd25)
This commit is contained in:
Jian He 2015-05-06 13:45:00 -07:00
parent f79b1f0190
commit f8488b5aeb
3 changed files with 68 additions and 38 deletions

View File

@ -323,6 +323,9 @@ Release 2.7.1 - UNRELEASED
YARN-3544. Got back AM logs link on the RM web UI for a completed app. YARN-3544. Got back AM logs link on the RM web UI for a completed app.
(Xuan Gong via zjshen) (Xuan Gong via zjshen)
YARN-3301. Fixed the format issue of the new RM attempt web page.
(Xuan Gong via jianhe)
Release 2.7.0 - 2015-04-20 Release 2.7.0 - 2015-04-20
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -149,6 +149,8 @@ public class AppAttemptBlock extends HtmlBlock {
createAttemptHeadRoomTable(html); createAttemptHeadRoomTable(html);
html._(InfoBlock.class); html._(InfoBlock.class);
createTablesForAttemptMetrics(html);
// Container Table // Container Table
TBODY<TABLE<Hamlet>> tbody = TBODY<TABLE<Hamlet>> tbody =
html.table("#containers").thead().tr().th(".id", "Container ID") html.table("#containers").thead().tr().th(".id", "Container ID")
@ -236,4 +238,8 @@ public class AppAttemptBlock extends HtmlBlock {
protected void createAttemptHeadRoomTable(Block html) { protected void createAttemptHeadRoomTable(Block html) {
} }
protected void createTablesForAttemptMetrics(Block html) {
}
} }

View File

@ -46,10 +46,10 @@ import org.apache.hadoop.yarn.util.resource.Resources;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TBODY;
import org.apache.hadoop.yarn.webapp.util.WebAppUtils; import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
import org.apache.hadoop.yarn.webapp.view.InfoBlock; import org.apache.hadoop.yarn.webapp.view.InfoBlock;
import com.google.inject.Inject; import com.google.inject.Inject;
import java.util.List;
import java.util.Collection; import java.util.Collection;
import java.util.Set; import java.util.Set;
@ -66,52 +66,67 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
this.conf = conf; this.conf = conf;
} }
@Override
protected void render(Block html) {
super.render(html);
createContainerLocalityTable(html);
createResourceRequestsTable(html);
}
private void createResourceRequestsTable(Block html) { private void createResourceRequestsTable(Block html) {
AppInfo app = AppInfo app =
new AppInfo(rm, rm.getRMContext().getRMApps() new AppInfo(rm, rm.getRMContext().getRMApps()
.get(this.appAttemptId.getApplicationId()), true, .get(this.appAttemptId.getApplicationId()), true,
WebAppUtils.getHttpSchemePrefix(conf)); WebAppUtils.getHttpSchemePrefix(conf));
TBODY<TABLE<Hamlet>> tbody =
html.table("#ResourceRequests").thead().tr()
.th(".priority", "Priority")
.th(".resourceName", "ResourceName")
.th(".totalResource", "Capability")
.th(".numContainers", "NumContainers")
.th(".relaxLocality", "RelaxLocality")
.th(".nodeLabelExpression", "NodeLabelExpression")._()._().tbody();
List<ResourceRequest> resourceRequests = app.getResourceRequests();
if (resourceRequests == null || resourceRequests.isEmpty()) {
return;
}
DIV<Hamlet> div = html.div(_INFO_WRAP);
TABLE<DIV<Hamlet>> table =
div.h3("Total Outstanding Resource Requests: "
+ getTotalResource(resourceRequests)).table(
"#ResourceRequests");
table.tr().
th(_TH, "Priority").
th(_TH, "ResourceName").
th(_TH, "Capability").
th(_TH, "NumContainers").
th(_TH, "RelaxLocality").
th(_TH, "NodeLabelExpression").
_();
boolean odd = false;
for (ResourceRequest request : resourceRequests) {
if (request.getNumContainers() == 0) {
continue;
}
table.tr((odd = !odd) ? _ODD : _EVEN)
.td(String.valueOf(request.getPriority()))
.td(request.getResourceName())
.td(String.valueOf(request.getCapability()))
.td(String.valueOf(request.getNumContainers()))
.td(String.valueOf(request.getRelaxLocality()))
.td(request.getNodeLabelExpression() == null ? "N/A" : request
.getNodeLabelExpression())._();
}
table._();
div._();
}
private Resource getTotalResource(List<ResourceRequest> requests) {
Resource totalResource = Resource.newInstance(0, 0); Resource totalResource = Resource.newInstance(0, 0);
if (app.getResourceRequests() != null) { if (requests == null) {
for (ResourceRequest request : app.getResourceRequests()) { return totalResource;
if (request.getNumContainers() == 0) { }
continue; for (ResourceRequest request : requests) {
} if (request.getNumContainers() == 0) {
continue;
tbody.tr() }
.td(String.valueOf(request.getPriority())) if (request.getResourceName().equals(ResourceRequest.ANY)) {
.td(request.getResourceName()) Resources.addTo(
.td(String.valueOf(request.getCapability())) totalResource,
.td(String.valueOf(request.getNumContainers())) Resources.multiply(request.getCapability(),
.td(String.valueOf(request.getRelaxLocality())) request.getNumContainers()));
.td(request.getNodeLabelExpression() == null ? "N/A" : request
.getNodeLabelExpression())._();
if (request.getResourceName().equals(ResourceRequest.ANY)) {
Resources.addTo(totalResource,
Resources.multiply(request.getCapability(),
request.getNumContainers()));
}
} }
} }
html.div().$class("totalResourceRequests") return totalResource;
.h3("Total Outstanding Resource Requests: " + totalResource)._();
tbody._()._();
} }
private void createContainerLocalityTable(Block html) { private void createContainerLocalityTable(Block html) {
@ -248,4 +263,10 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
} }
return null; return null;
} }
@Override
protected void createTablesForAttemptMetrics(Block html) {
createContainerLocalityTable(html);
createResourceRequestsTable(html);
}
} }