|
@@ -20,13 +20,14 @@ package org.apache.hadoop.yarn.server.resourcemanager.webapp;
|
|
|
|
|
|
import static org.apache.hadoop.yarn.util.StringHelper.join;
|
|
|
import static org.apache.hadoop.yarn.webapp.YarnWebParams.APP_STATE;
|
|
|
-import static org.apache.hadoop.yarn.webapp.view.JQueryUI._PROGRESSBAR;
|
|
|
-import static org.apache.hadoop.yarn.webapp.view.JQueryUI._PROGRESSBAR_VALUE;
|
|
|
+import static org.apache.hadoop.yarn.webapp.view.JQueryUI.C_PROGRESSBAR;
|
|
|
+import static org.apache.hadoop.yarn.webapp.view.JQueryUI.C_PROGRESSBAR_VALUE;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
|
|
|
+import org.apache.commons.lang.StringEscapeUtils;
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
|
|
@@ -36,7 +37,6 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FairSchedulerInfo;
|
|
|
-import org.apache.hadoop.yarn.util.Times;
|
|
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
|
|
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE;
|
|
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TBODY;
|
|
@@ -86,44 +86,52 @@ public class FairSchedulerAppsBlock extends HtmlBlock {
|
|
|
reqAppStates.add(RMAppState.valueOf(stateString));
|
|
|
}
|
|
|
}
|
|
|
+ StringBuilder appsTableData = new StringBuilder("[\n");
|
|
|
for (RMApp app : apps.values()) {
|
|
|
if (reqAppStates != null && !reqAppStates.contains(app.getState())) {
|
|
|
continue;
|
|
|
}
|
|
|
AppInfo appInfo = new AppInfo(app, true);
|
|
|
String percent = String.format("%.1f", appInfo.getProgress());
|
|
|
- String startTime = Times.format(appInfo.getStartTime());
|
|
|
- String finishTime = Times.format(appInfo.getFinishTime());
|
|
|
ApplicationAttemptId attemptId = app.getCurrentAppAttempt().getAppAttemptId();
|
|
|
int fairShare = fsinfo.getAppFairShare(attemptId);
|
|
|
+ //AppID numerical value parsed by parseHadoopID in yarn.dt.plugins.js
|
|
|
+ appsTableData.append("[\"<a href='")
|
|
|
+ .append(url("app", appInfo.getAppId())).append("'>")
|
|
|
+ .append(appInfo.getAppId()).append("</a>\",\"")
|
|
|
+ .append(StringEscapeUtils.escapeJavaScript(StringEscapeUtils.escapeHtml(
|
|
|
+ appInfo.getUser()))).append("\",\"")
|
|
|
+ .append(StringEscapeUtils.escapeJavaScript(StringEscapeUtils.escapeHtml(
|
|
|
+ appInfo.getName()))).append("\",\"")
|
|
|
+ .append(StringEscapeUtils.escapeJavaScript(StringEscapeUtils.escapeHtml(
|
|
|
+ appInfo.getQueue()))).append("\",\"")
|
|
|
+ .append(fairShare).append("\",\"")
|
|
|
+ .append(appInfo.getStartTime()).append("\",\"")
|
|
|
+ .append(appInfo.getFinishTime()).append("\",\"")
|
|
|
+ .append(appInfo.getState()).append("\",\"")
|
|
|
+ .append(appInfo.getFinalStatus()).append("\",\"")
|
|
|
+ // Progress bar
|
|
|
+ .append("<br title='").append(percent)
|
|
|
+ .append("'> <div class='").append(C_PROGRESSBAR).append("' title='")
|
|
|
+ .append(join(percent, '%')).append("'> ").append("<div class='")
|
|
|
+ .append(C_PROGRESSBAR_VALUE).append("' style='")
|
|
|
+ .append(join("width:", percent, '%')).append("'> </div> </div>")
|
|
|
+ .append("\",\"<a href='");
|
|
|
|
|
|
- tbody.
|
|
|
- tr().
|
|
|
- td().
|
|
|
- br().$title(appInfo.getAppIdNum())._(). // for sorting
|
|
|
- a(url("app", appInfo.getAppId()), appInfo.getAppId())._().
|
|
|
- td(appInfo.getUser()).
|
|
|
- td(appInfo.getName()).
|
|
|
- td(appInfo.getQueue()).
|
|
|
- td("" + fairShare).
|
|
|
- td().
|
|
|
- br().$title(String.valueOf(appInfo.getStartTime()))._().
|
|
|
- _(startTime)._().
|
|
|
- td().
|
|
|
- br().$title(String.valueOf(appInfo.getFinishTime()))._().
|
|
|
- _(finishTime)._().
|
|
|
- td(appInfo.getState()).
|
|
|
- td(appInfo.getFinalStatus()).
|
|
|
- td().
|
|
|
- br().$title(percent)._(). // for sorting
|
|
|
- div(_PROGRESSBAR).
|
|
|
- $title(join(percent, '%')). // tooltip
|
|
|
- div(_PROGRESSBAR_VALUE).
|
|
|
- $style(join("width:", percent, '%'))._()._()._().
|
|
|
- td().
|
|
|
- a(!appInfo.isTrackingUrlReady()?
|
|
|
- "#" : appInfo.getTrackingUrlPretty(), appInfo.getTrackingUI())._()._();
|
|
|
+ String trackingURL =
|
|
|
+ !appInfo.isTrackingUrlReady()? "#" : appInfo.getTrackingUrlPretty();
|
|
|
+
|
|
|
+ appsTableData.append(trackingURL).append("'>")
|
|
|
+ .append(appInfo.getTrackingUI()).append("</a>\"],\n");
|
|
|
+
|
|
|
+ }
|
|
|
+ if(appsTableData.charAt(appsTableData.length() - 2) == ',') {
|
|
|
+ appsTableData.delete(appsTableData.length()-2, appsTableData.length()-1);
|
|
|
}
|
|
|
+ appsTableData.append("]");
|
|
|
+ html.script().$type("text/javascript").
|
|
|
+ _("var appsTableData=" + appsTableData)._();
|
|
|
+
|
|
|
tbody._()._();
|
|
|
}
|
|
|
}
|