diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java index a53ad98..976a41e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java @@ -34,6 +34,7 @@ import org.apache.hadoop.yarn.webapp.ResponseInfo; import org.apache.hadoop.yarn.webapp.SubView; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet; +import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.A; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.LI; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.UL; @@ -49,8 +50,10 @@ static final float Q_STATS_POS = Q_MAX_WIDTH + 0.05f; static final String Q_END = "left:101%"; static final String Q_GIVEN = "left:0%;background:none;border:1px dashed rgba(0,0,0,0.25)"; + static final String Q_ACTUAL = "left:0%;background:none;border:1px dashed rgba(255,0,0,0.8)"; static final String Q_OVER = "background:rgba(255, 140, 0, 0.8)"; static final String Q_UNDER = "background:rgba(50, 205, 50, 0.8)"; + static final String Q_MAX_LESS_ACTUAL = "background: rgba(255, 255, 0, 0.3)"; @RequestScoped static class CSQInfo { @@ -120,7 +123,9 @@ protected void render(Block html) { _("Configured Max Capacity:", percent(lqinfo.getMaxCapacity() / 100)). _("Configured Minimum User Limit Percent:", Integer.toString(lqinfo.getUserLimit()) + "%"). _("Configured User Limit Factor:", String.format("%.1f", lqinfo.getUserLimitFactor())). - _r("Active users: ", activeUserList.toString()); + _("Active users: ", activeUserList.toString()). + _("Actual Absolute Capacity:", percent(lqinfo.getAbsActualCapacity() / 100)). + _r("Labels Can Access:", StringUtils.join(",", lqinfo.getLabels().getLabels())); html._(InfoBlock.class); @@ -147,18 +152,31 @@ public void render(Block html) { float absCap = info.getAbsoluteCapacity() / 100; float absMaxCap = info.getAbsoluteMaxCapacity() / 100; float absUsedCap = info.getAbsoluteUsedCapacity() / 100; - LI> li = ul. - li(). - a(_Q).$style(width(absMaxCap * Q_MAX_WIDTH)). - $title(join("Absolute Capacity:", percent(absCap))). - span().$style(join(Q_GIVEN, ";font-size:1px;", width(absCap/absMaxCap))). - _('.')._(). - span().$style(join(width(absUsedCap/absMaxCap), - ";font-size:1px;left:0%;", absUsedCap > absCap ? Q_OVER : Q_UNDER)). - _('.')._(). - span(".q", info.getQueuePath().substring(5))._(). - span().$class("qstats").$style(left(Q_STATS_POS)). - _(join(percent(used), " used"))._(); + float absActualCap = info.getAbsActualCapacity() / 100; + + A>> a = ul. + li().a(_Q).$style(width(absMaxCap * Q_MAX_WIDTH)). + $title(join("Absolute Capacity:", percent(absCap))); + + if (absActualCap < absCap) { + a = a.span().$style(join(width(1), + ";font-size:1px;left:0%;", Q_MAX_LESS_ACTUAL)). + _('.')._(); + } + + LI> li = a. + span().$style(join(absActualCap < absCap ? Q_ACTUAL :Q_GIVEN, + ";font-size:1px;", + (absActualCap < absCap ? + width(absActualCap / absMaxCap) : + width(absCap / absMaxCap)))). + _('.')._(). + span().$style(join(width(absUsedCap/absMaxCap), + ";font-size:1px;left:0%;", absUsedCap > absCap ? Q_OVER : Q_UNDER)). + _('.')._(). + span(".q", info.getQueuePath().substring(5))._(). + span().$class("qstats").$style(left(Q_STATS_POS)). + _(join(percent(used), " used"))._(); csqinfo.qinfo = info; if (info.getQueues() == null) { @@ -209,12 +227,16 @@ public void render(Block html) { span().$style("font-weight: bold")._("Legend:")._(). span().$class("qlegend ui-corner-all").$style(Q_GIVEN). _("Capacity")._(). + span().$class("qlegend ui-corner-all").$style(Q_ACTUAL). + _("Actual Capacity (< Capacity)")._(). span().$class("qlegend ui-corner-all").$style(Q_UNDER). _("Used")._(). span().$class("qlegend ui-corner-all").$style(Q_OVER). _("Used (over capacity)")._(). span().$class("qlegend ui-corner-all ui-state-default"). _("Max Capacity")._(). + span().$class("qlegend ui-corner-all").$style(Q_MAX_LESS_ACTUAL). + _("Max Capacity (< Capacity)")._(). _(). li(). a(_Q).$style(width(Q_MAX_WIDTH)). diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java index f10e255..b4447ed 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java @@ -66,6 +66,7 @@ protected void render(Block html) { TBODY> tbody = html.table("#nodes"). thead(). tr(). + th(".label", "Labels"). th(".rack", "Rack"). th(".state", "Node State"). th(".nodeaddress", "Node Address"). @@ -113,6 +114,7 @@ protected void render(Block html) { int usedMemory = (int)info.getUsedMemory(); int availableMemory = (int)info.getAvailableMemory(); TR>> row = tbody.tr(). + td(StringUtils.join(",", info.getLabels())). td(info.getRack()). td(info.getState()). td(info.getNodeId());