protected override void GenerateApplicationTable(HtmlBlock.Block html, UserGroupInformation callerUGI, ICollection <ApplicationAttemptReport> attempts) { // Application Attempt Table Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#attempts").Thead().Tr().Th(".id", "Attempt ID").Th(".started", "Started" ).Th(".node", "Node").Th(".logs", "Logs").Th(".blacklistednodes", "Blacklisted Nodes" ).().().Tbody(); RMApp rmApp = this.rm.GetRMContext().GetRMApps()[this.appID]; if (rmApp == null) { return; } StringBuilder attemptsTableData = new StringBuilder("[\n"); foreach (ApplicationAttemptReport appAttemptReport in attempts) { RMAppAttempt rmAppAttempt = rmApp.GetRMAppAttempt(appAttemptReport.GetApplicationAttemptId ()); if (rmAppAttempt == null) { continue; } AppAttemptInfo attemptInfo = new AppAttemptInfo(this.rm, rmAppAttempt, rmApp.GetUser (), WebAppUtils.GetHttpSchemePrefix(conf)); string blacklistedNodesCount = "N/A"; ICollection <string> nodes = RMAppAttemptBlock.GetBlacklistedNodes(rm, rmAppAttempt .GetAppAttemptId()); if (nodes != null) { blacklistedNodesCount = nodes.Count.ToString(); } string nodeLink = attemptInfo.GetNodeHttpAddress(); if (nodeLink != null) { nodeLink = WebAppUtils.GetHttpSchemePrefix(conf) + nodeLink; } string logsLink = attemptInfo.GetLogsLink(); attemptsTableData.Append("[\"<a href='").Append(Url("appattempt", rmAppAttempt.GetAppAttemptId ().ToString())).Append("'>").Append(rmAppAttempt.GetAppAttemptId().ToString()).Append ("</a>\",\"").Append(attemptInfo.GetStartTime()).Append("\",\"<a ").Append(nodeLink == null ? "#" : "href='" + nodeLink).Append("'>").Append(nodeLink == null ? "N/A" : StringEscapeUtils.EscapeJavaScript(StringEscapeUtils.EscapeHtml(nodeLink))).Append ("</a>\",\"<a ").Append(logsLink == null ? "#" : "href='" + logsLink).Append("'>" ).Append(logsLink == null ? "N/A" : "Logs").Append("</a>\",").Append("\"").Append (blacklistedNodesCount).Append("\"],\n"); } if (attemptsTableData[attemptsTableData.Length - 2] == ',') { attemptsTableData.Delete(attemptsTableData.Length - 2, attemptsTableData.Length - 1); } attemptsTableData.Append("]"); html.Script().$type("text/javascript").("var attemptsTableData=" + attemptsTableData ).(); tbody.().(); }
protected internal virtual void RenderData(HtmlBlock.Block html) { Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#apps").Thead().Tr().Th(".id", "ID").Th(".user", "User").Th(".name", "Name" ).Th(".type", "Application Type").Th(".queue", "Queue").Th(".starttime", "StartTime" ).Th(".finishtime", "FinishTime").Th(".state", "State").Th(".finalstatus", "FinalStatus" ).Th(".progress", "Progress").Th(".ui", "Tracking UI").().().Tbody(); StringBuilder appsTableData = new StringBuilder("[\n"); foreach (ApplicationReport appReport in appReports) { // TODO: remove the following condition. It is still here because // the history side implementation of ApplicationBaseProtocol // hasn't filtering capability (YARN-1819). if (!reqAppStates.IsEmpty() && !reqAppStates.Contains(appReport.GetYarnApplicationState ())) { continue; } AppInfo app = new AppInfo(appReport); string percent = string.Format("%.1f", app.GetProgress()); appsTableData.Append("[\"<a href='").Append(Url("app", app.GetAppId())).Append("'>" ).Append(app.GetAppId()).Append("</a>\",\"").Append(StringEscapeUtils.EscapeJavaScript (StringEscapeUtils.EscapeHtml(app.GetUser()))).Append("\",\"").Append(StringEscapeUtils .EscapeJavaScript(StringEscapeUtils.EscapeHtml(app.GetName()))).Append("\",\""). Append(StringEscapeUtils.EscapeJavaScript(StringEscapeUtils.EscapeHtml(app.GetType ()))).Append("\",\"").Append(StringEscapeUtils.EscapeJavaScript(StringEscapeUtils .EscapeHtml(app.GetQueue()))).Append("\",\"").Append(app.GetStartedTime()).Append ("\",\"").Append(app.GetFinishedTime()).Append("\",\"").Append(app.GetAppState() == null ? Unavailable : app.GetAppState()).Append("\",\"").Append(app.GetFinalAppStatus ()).Append("\",\"").Append("<br title='").Append(percent).Append("'> <div class='" ).Append(JQueryUI.CProgressbar).Append("' title='").Append(StringHelper.Join(percent , '%')).Append("'> ").Append("<div class='").Append(JQueryUI.CProgressbarValue). Append("' style='").Append(StringHelper.Join("width:", percent, '%')).Append("'> </div> </div>" ).Append("\",\"<a "); // Progress bar string trackingURL = app.GetTrackingUrl() == null || app.GetTrackingUrl().Equals( Unavailable) ? null : app.GetTrackingUrl(); string trackingUI = app.GetTrackingUrl() == null || app.GetTrackingUrl().Equals(Unavailable ) ? "Unassigned" : app.GetAppState() == YarnApplicationState.Finished || app.GetAppState () == YarnApplicationState.Failed || app.GetAppState() == YarnApplicationState.Killed ? "History" : "ApplicationMaster"; appsTableData.Append(trackingURL == null ? "#" : "href='" + trackingURL).Append("'>" ).Append(trackingUI).Append("</a>\"],\n"); } if (appsTableData[appsTableData.Length - 2] == ',') { appsTableData.Delete(appsTableData.Length - 2, appsTableData.Length - 1); } appsTableData.Append("]"); html.Script().$type("text/javascript").("var appsTableData=" + appsTableData).(); tbody.().(); }
/* * (non-Javadoc) * @see org.apache.hadoop.yarn.webapp.view.HtmlBlock#render(org.apache.hadoop.yarn.webapp.view.HtmlBlock.Block) */ protected override void Render(HtmlBlock.Block html) { Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .H2("Retired Jobs").Table("#jobs").Thead().Tr().Th("Submit Time").Th("Start Time" ).Th("Finish Time").Th(".id", "Job ID").Th(".name", "Name").Th("User").Th("Queue" ).Th(".state", "State").Th("Maps Total").Th("Maps Completed").Th("Reduces Total" ).Th("Reduces Completed").().().Tbody(); Log.Info("Getting list of all Jobs."); // Write all the data into a JavaScript array of arrays for JQuery // DataTables to display StringBuilder jobsTableData = new StringBuilder("[\n"); foreach (Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job j in appContext.GetAllJobs(). Values) { JobInfo job = new JobInfo(j); jobsTableData.Append("[\"").Append(dateFormat.Format(Sharpen.Extensions.CreateDate (job.GetSubmitTime()))).Append("\",\"").Append(dateFormat.Format(Sharpen.Extensions.CreateDate (job.GetStartTime()))).Append("\",\"").Append(dateFormat.Format(Sharpen.Extensions.CreateDate (job.GetFinishTime()))).Append("\",\"").Append("<a href='").Append(Url("job", job .GetId())).Append("'>").Append(job.GetId()).Append("</a>\",\"").Append(StringEscapeUtils .EscapeJavaScript(StringEscapeUtils.EscapeHtml(job.GetName()))).Append("\",\""). Append(StringEscapeUtils.EscapeJavaScript(StringEscapeUtils.EscapeHtml(job.GetUserName ()))).Append("\",\"").Append(StringEscapeUtils.EscapeJavaScript(StringEscapeUtils .EscapeHtml(job.GetQueueName()))).Append("\",\"").Append(job.GetState()).Append( "\",\"").Append(job.GetMapsTotal().ToString()).Append("\",\"").Append(job.GetMapsCompleted ().ToString()).Append("\",\"").Append(job.GetReducesTotal().ToString()).Append("\",\"" ).Append(job.GetReducesCompleted().ToString()).Append("\"],\n"); } //Remove the last comma and close off the array of arrays if (jobsTableData[jobsTableData.Length - 2] == ',') { jobsTableData.Delete(jobsTableData.Length - 2, jobsTableData.Length - 1); } jobsTableData.Append("]"); html.Script().$type("text/javascript").("var jobsTableData=" + jobsTableData).(); tbody.().Tfoot().Tr().Th().Input("search_init").$type(HamletSpec.InputType.text). $name("submit_time").$value("Submit Time").().().Th().Input("search_init").$type (HamletSpec.InputType.text).$name("start_time").$value("Start Time").().().Th(). Input("search_init").$type(HamletSpec.InputType.text).$name("finish_time").$value ("Finish Time").().().Th().Input("search_init").$type(HamletSpec.InputType.text) .$name("start_time").$value("Job ID").().().Th().Input("search_init").$type(HamletSpec.InputType .text).$name("start_time").$value("Name").().().Th().Input("search_init").$type( HamletSpec.InputType.text).$name("start_time").$value("User").().().Th().Input("search_init" ).$type(HamletSpec.InputType.text).$name("start_time").$value("Queue").().().Th( ).Input("search_init").$type(HamletSpec.InputType.text).$name("start_time").$value ("State").().().Th().Input("search_init").$type(HamletSpec.InputType.text).$name ("start_time").$value("Maps Total").().().Th().Input("search_init").$type(HamletSpec.InputType .text).$name("start_time").$value("Maps Completed").().().Th().Input("search_init" ).$type(HamletSpec.InputType.text).$name("start_time").$value("Reduces Total").( ).().Th().Input("search_init").$type(HamletSpec.InputType.text).$name("start_time" ).$value("Reduces Completed").().().().().(); }
private void ReopenQueue(HtmlBlock.Block html) { html.Script().$type("text/javascript").("function reopenQueryNodes() {", " var currentParam = window.location.href.split('?');" , " var tmpCurrentParam = currentParam;", " var queryQueuesString = '';", " if (tmpCurrentParam.length > 1) {" , " // openQueues=q1#q2¶m1=value1¶m2=value2", " tmpCurrentParam = tmpCurrentParam[1];" , " if (tmpCurrentParam.indexOf('openQueues=') != -1 ) {", " tmpCurrentParam = tmpCurrentParam.split('openQueues=')[1].split('&')[0];" , " queryQueuesString = tmpCurrentParam;", " }", " }", " if (queryQueuesString != '') {" , " queueArray = queryQueuesString.split('#');", " $('#cs .q').each(function() {" , " var name = $(this).html();", " if (name != 'root' && $.inArray(name, queueArray) != -1) {" , " $(this).closest('li').removeClass('jstree-closed').addClass('jstree-open'); " , " }", " });", " }", " $('#cs').bind( {", " 'open_node.jstree' :function(e, data) { storeExpandedQueue(e, data); }," , " 'close_node.jstree':function(e, data) { storeExpandedQueue(e, data); }" , " });", "}").(); }
protected override void Render(HtmlBlock.Block html) { if (!IsValidRequest()) { html.H2($(Title)); return; } Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#attempts").Thead().Tr().Th(".id", "Attempt").Th(".progress", "Progress" ).Th(".state", "State").Th(".status", "Status").Th(".node", "Node").Th(".logs", "Logs").Th(".tsh", "Started").Th(".tsh", "Finished").Th(".tsh", "Elapsed").Th(".note" , "Note").().().Tbody(); // Write all the data into a JavaScript array of arrays for JQuery // DataTables to display StringBuilder attemptsTableData = new StringBuilder("[\n"); foreach (TaskAttempt attempt in GetTaskAttempts()) { TaskAttemptInfo ta = new TaskAttemptInfo(attempt, true); string progress = StringHelper.Percent(ta.GetProgress() / 100); string nodeHttpAddr = ta.GetNode(); string diag = ta.GetNote() == null ? string.Empty : ta.GetNote(); attemptsTableData.Append("[\"").Append(ta.GetId()).Append("\",\"").Append(progress ).Append("\",\"").Append(ta.GetState().ToString()).Append("\",\"").Append(StringEscapeUtils .EscapeJavaScript(StringEscapeUtils.EscapeHtml(ta.GetStatus()))).Append("\",\"") .Append(nodeHttpAddr == null ? "N/A" : "<a class='nodelink' href='" + MRWebAppUtil .GetYARNWebappScheme() + nodeHttpAddr + "'>" + nodeHttpAddr + "</a>").Append("\",\"" ).Append(ta.GetAssignedContainerId() == null ? "N/A" : "<a class='logslink' href='" + Url(MRWebAppUtil.GetYARNWebappScheme(), nodeHttpAddr, "node", "containerlogs" , ta.GetAssignedContainerIdStr(), app.GetJob().GetUserName()) + "'>logs</a>").Append ("\",\"").Append(ta.GetStartTime()).Append("\",\"").Append(ta.GetFinishTime()).Append ("\",\"").Append(ta.GetElapsedTime()).Append("\",\"").Append(StringEscapeUtils.EscapeJavaScript (StringEscapeUtils.EscapeHtml(diag))).Append("\"],\n"); } //Remove the last comma and close off the array of arrays if (attemptsTableData[attemptsTableData.Length - 2] == ',') { attemptsTableData.Delete(attemptsTableData.Length - 2, attemptsTableData.Length - 1); } attemptsTableData.Append("]"); html.Script().$type("text/javascript").("var attemptsTableData=" + attemptsTableData ).(); tbody.().(); }
private void StoreExpandedQueue(HtmlBlock.Block html) { html.Script().$type("text/javascript").("function storeExpandedQueue(e, data) {", " var OPEN_QUEUES = 'openQueues';", " var ACTION_OPEN = 'open';", " var ACTION_CLOSED = 'closed';" , " var $li = $(data.args[0]);", " var action = ACTION_CLOSED; //closed or open" , " var queueName = ''", " if ($li.hasClass('jstree-open')) {", " action=ACTION_OPEN;" , " }", " queueName = $li.find('.q').html();", " // http://localhost:8088/cluster/scheduler?openQueues=q1#q2¶m1=value1¶m2=value2 " , " // ==> [http://localhost:8088/cluster/scheduler , openQueues=q1#q2¶m1=value1¶m2=value2]" , " var currentParam = window.location.href.split('?');", " var tmpCurrentParam = currentParam;" , " var queryString = '';", " if (tmpCurrentParam.length > 1) {", " // openQueues=q1#q2¶m1=value1¶m2=value2" , " tmpCurrentParam = tmpCurrentParam[1];", " currentParam = tmpCurrentParam;" , " tmpCurrentParam = tmpCurrentParam.split('&');", " var len = tmpCurrentParam.length;" , " var paramExist = false;", " if (len > 1) { // Currently no query param are present but in future if any are added for that handling it now" , " queryString = '';", " for (var i = 0 ; i < len ; i++) { // searching for param openQueues" , " if (tmpCurrentParam[i].substr(0,11) == OPEN_QUEUES + '=') {", " if (action == ACTION_OPEN) {" , " tmpCurrentParam[i] = addQueueName(tmpCurrentParam[i],queueName);" , " }", " else if (action == ACTION_CLOSED) {", " tmpCurrentParam[i] = removeQueueName(tmpCurrentParam[i] , queueName);" , " }", " paramExist = true;", " }", " if (i > 0) {" , " queryString += '&';", " }", " queryString += tmpCurrentParam[i];" , " }", " // If in existing query string OPEN_QUEUES param is not present" , " if (action == ACTION_OPEN && !paramExist) {", " queryString = currentParam + '&' + OPEN_QUEUES + '=' + queueName;" , " }", " } ", " // Only one param is present in current query string" , " else {", " tmpCurrentParam=tmpCurrentParam[0];", " // checking if the only param present in query string is OPEN_QUEUES or not and making queryString accordingly" , " if (tmpCurrentParam.substr(0,11) == OPEN_QUEUES + '=') {", " if (action == ACTION_OPEN) {" , " queryString = addQueueName(tmpCurrentParam,queueName);", " }" , " else if (action == ACTION_CLOSED) {", " queryString = removeQueueName(tmpCurrentParam , queueName);" , " }", " }", " else {", " if (action == ACTION_OPEN) {" , " queryString = tmpCurrentParam + '&' + OPEN_QUEUES + '=' + queueName;" , " }", " }", " }", " } else {", " if (action == ACTION_OPEN) {" , " tmpCurrentParam = '';", " currentParam = tmpCurrentParam;", " queryString = OPEN_QUEUES+'='+queueName;" , " }", " }", " if (queryString != '') {", " queryString = '?' + queryString;" , " }", " var url = window.location.protocol + '//' + window.location.host + window.location.pathname + queryString;" , " window.history.pushState( { path : url }, '', url);", "};", string.Empty, "function removeQueueName(queryString, queueName) {" , " var index = queryString.indexOf(queueName);", " // Finding if queue is present in query param then only remove it" , " if (index != -1) {", " // removing openQueues=", " var tmp = queryString.substr(11, queryString.length);" , " tmp = tmp.split('#');", " var len = tmp.length;", " var newQueryString = '';" , " for (var i = 0 ; i < len ; i++) {", " if (tmp[i] != queueName) {", " if (newQueryString != '') {" , " newQueryString += '#';", " }", " newQueryString += tmp[i];" , " }", " }", " queryString = newQueryString;", " if (newQueryString != '') {" , " queryString = 'openQueues=' + newQueryString;", " }", " }", " return queryString;" , "}", string.Empty, "function addQueueName(queryString, queueName) {", " queueArray = queryString.split('#');" , " if ($.inArray(queueArray, queueName) == -1) {", " queryString = queryString + '#' + queueName;" , " }", " return queryString;", "}").(); }
protected override void Render(HtmlBlock.Block html) { if (!IsValidRequest()) { html.H2($(Title)); return; } TaskType type = null; string symbol = $(AMParams.TaskType); if (!symbol.IsEmpty()) { type = MRApps.TaskType(symbol); } else { type = app.GetTask().GetType(); } Hamlet.TR <Hamlet.THEAD <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > > headRow = html.Table("#attempts").Thead().Tr(); headRow.Th(".id", "Attempt").Th(".state", "State").Th(".status", "Status").Th(".node" , "Node").Th(".logs", "Logs").Th(".tsh", "Start Time"); if (type == TaskType.Reduce) { headRow.Th("Shuffle Finish Time"); headRow.Th("Merge Finish Time"); } headRow.Th("Finish Time"); //Attempt if (type == TaskType.Reduce) { headRow.Th("Elapsed Time Shuffle"); //Attempt headRow.Th("Elapsed Time Merge"); //Attempt headRow.Th("Elapsed Time Reduce"); } //Attempt headRow.Th("Elapsed Time").Th(".note", "Note"); Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = headRow .().().Tbody(); // Write all the data into a JavaScript array of arrays for JQuery // DataTables to display StringBuilder attemptsTableData = new StringBuilder("[\n"); foreach (TaskAttempt attempt in GetTaskAttempts()) { TaskAttemptInfo ta = new TaskAttemptInfo(attempt, false); string taid = ta.GetId(); string nodeHttpAddr = ta.GetNode(); string containerIdString = ta.GetAssignedContainerIdStr(); string nodeIdString = attempt.GetAssignedContainerMgrAddress(); string nodeRackName = ta.GetRack(); long attemptStartTime = ta.GetStartTime(); long shuffleFinishTime = -1; long sortFinishTime = -1; long attemptFinishTime = ta.GetFinishTime(); long elapsedShuffleTime = -1; long elapsedSortTime = -1; long elapsedReduceTime = -1; if (type == TaskType.Reduce) { shuffleFinishTime = attempt.GetShuffleFinishTime(); sortFinishTime = attempt.GetSortFinishTime(); elapsedShuffleTime = Times.Elapsed(attemptStartTime, shuffleFinishTime, false); elapsedSortTime = Times.Elapsed(shuffleFinishTime, sortFinishTime, false); elapsedReduceTime = Times.Elapsed(sortFinishTime, attemptFinishTime, false); } long attemptElapsed = Times.Elapsed(attemptStartTime, attemptFinishTime, false); int sortId = attempt.GetID().GetId() + (attempt.GetID().GetTaskId().GetId() * 10000 ); attemptsTableData.Append("[\"").Append(sortId + " ").Append(taid).Append("\",\"") .Append(ta.GetState()).Append("\",\"").Append(StringEscapeUtils.EscapeJavaScript (StringEscapeUtils.EscapeHtml(ta.GetStatus()))).Append("\",\"").Append("<a class='nodelink' href='" + MRWebAppUtil.GetYARNWebappScheme() + nodeHttpAddr + "'>").Append(nodeRackName + "/" + nodeHttpAddr + "</a>\",\"").Append("<a class='logslink' href='").Append (Url("logs", nodeIdString, containerIdString, taid, app.GetJob().GetUserName())) .Append("'>logs</a>\",\"").Append(attemptStartTime).Append("\",\""); if (type == TaskType.Reduce) { attemptsTableData.Append(shuffleFinishTime).Append("\",\"").Append(sortFinishTime ).Append("\",\""); } attemptsTableData.Append(attemptFinishTime).Append("\",\""); if (type == TaskType.Reduce) { attemptsTableData.Append(elapsedShuffleTime).Append("\",\"").Append(elapsedSortTime ).Append("\",\"").Append(elapsedReduceTime).Append("\",\""); } attemptsTableData.Append(attemptElapsed).Append("\",\"").Append(StringEscapeUtils .EscapeJavaScript(StringEscapeUtils.EscapeHtml(ta.GetNote()))).Append("\"],\n"); } //Remove the last comma and close off the array of arrays if (attemptsTableData[attemptsTableData.Length - 2] == ',') { attemptsTableData.Delete(attemptsTableData.Length - 2, attemptsTableData.Length - 1); } attemptsTableData.Append("]"); html.Script().$type("text/javascript").("var attemptsTableData=" + attemptsTableData ).(); Hamlet.TR <Hamlet.TFOOT <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > > footRow = tbody.().Tfoot().Tr(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("attempt_name" ).$value("Attempt").().().Th().Input("search_init").$type(HamletSpec.InputType.text ).$name("attempt_state").$value("State").().().Th().Input("search_init").$type(HamletSpec.InputType .text).$name("attempt_status").$value("Status").().().Th().Input("search_init"). $type(HamletSpec.InputType.text).$name("attempt_node").$value("Node").().().Th() .Input("search_init").$type(HamletSpec.InputType.text).$name("attempt_node").$value ("Logs").().().Th().Input("search_init").$type(HamletSpec.InputType.text).$name( "attempt_start_time").$value("Start Time").().(); if (type == TaskType.Reduce) { footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("shuffle_time" ).$value("Shuffle Time").().(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("merge_time" ).$value("Merge Time").().(); } footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("attempt_finish" ).$value("Finish Time").().(); if (type == TaskType.Reduce) { footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_shuffle_time" ).$value("Elapsed Shuffle Time").().(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_merge_time" ).$value("Elapsed Merge Time").().(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_reduce_time" ).$value("Elapsed Reduce Time").().(); } footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("attempt_elapsed" ).$value("Elapsed Time").().().Th().Input("search_init").$type(HamletSpec.InputType .text).$name("note").$value("Note").().(); footRow.().().(); }
/* * (non-Javadoc) * @see org.apache.hadoop.yarn.webapp.view.HtmlBlock#render(org.apache.hadoop.yarn.webapp.view.HtmlBlock.Block) */ protected override void Render(HtmlBlock.Block html) { if (app.GetJob() == null) { html.H2($(Title)); return; } TaskType type = null; string symbol = $(AMParams.TaskType); if (!symbol.IsEmpty()) { type = MRApps.TaskType(symbol); } Hamlet.THEAD <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > thead; if (type != null) { thead = html.Table("#" + app.GetJob().GetID() + type).$class("dt-tasks").Thead(); } else { thead = html.Table("#tasks").Thead(); } //Create the spanning row int attemptColSpan = type == TaskType.Reduce ? 8 : 3; thead.Tr().Th().$colspan(5).$class("ui-state-default").("Task").().Th().$colspan( attemptColSpan).$class("ui-state-default").("Successful Attempt").().(); Hamlet.TR <Hamlet.THEAD <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > > theadRow = thead.Tr().Th("Name").Th("State").Th("Start Time").Th("Finish Time" ).Th("Elapsed Time").Th("Start Time"); //Attempt if (type == TaskType.Reduce) { theadRow.Th("Shuffle Finish Time"); //Attempt theadRow.Th("Merge Finish Time"); } //Attempt theadRow.Th("Finish Time"); //Attempt if (type == TaskType.Reduce) { theadRow.Th("Elapsed Time Shuffle"); //Attempt theadRow.Th("Elapsed Time Merge"); //Attempt theadRow.Th("Elapsed Time Reduce"); } //Attempt theadRow.Th("Elapsed Time"); //Attempt Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = theadRow .().().Tbody(); // Write all the data into a JavaScript array of arrays for JQuery // DataTables to display StringBuilder tasksTableData = new StringBuilder("[\n"); foreach (Task task in app.GetJob().GetTasks().Values) { if (type != null && task.GetType() != type) { continue; } TaskInfo info = new TaskInfo(task); string tid = info.GetId(); long startTime = info.GetStartTime(); long finishTime = info.GetFinishTime(); long elapsed = info.GetElapsedTime(); long attemptStartTime = -1; long shuffleFinishTime = -1; long sortFinishTime = -1; long attemptFinishTime = -1; long elapsedShuffleTime = -1; long elapsedSortTime = -1; long elapsedReduceTime = -1; long attemptElapsed = -1; TaskAttempt successful = info.GetSuccessful(); if (successful != null) { TaskAttemptInfo ta; if (type == TaskType.Reduce) { ReduceTaskAttemptInfo rta = new ReduceTaskAttemptInfo(successful, type); shuffleFinishTime = rta.GetShuffleFinishTime(); sortFinishTime = rta.GetMergeFinishTime(); elapsedShuffleTime = rta.GetElapsedShuffleTime(); elapsedSortTime = rta.GetElapsedMergeTime(); elapsedReduceTime = rta.GetElapsedReduceTime(); ta = rta; } else { ta = new TaskAttemptInfo(successful, type, false); } attemptStartTime = ta.GetStartTime(); attemptFinishTime = ta.GetFinishTime(); attemptElapsed = ta.GetElapsedTime(); } tasksTableData.Append("[\"").Append("<a href='" + Url("task", tid)).Append("'>"). Append(tid).Append("</a>\",\"").Append(info.GetState()).Append("\",\"").Append(startTime ).Append("\",\"").Append(finishTime).Append("\",\"").Append(elapsed).Append("\",\"" ).Append(attemptStartTime).Append("\",\""); if (type == TaskType.Reduce) { tasksTableData.Append(shuffleFinishTime).Append("\",\"").Append(sortFinishTime).Append ("\",\""); } tasksTableData.Append(attemptFinishTime).Append("\",\""); if (type == TaskType.Reduce) { tasksTableData.Append(elapsedShuffleTime).Append("\",\"").Append(elapsedSortTime) .Append("\",\"").Append(elapsedReduceTime).Append("\",\""); } tasksTableData.Append(attemptElapsed).Append("\"],\n"); } //Remove the last comma and close off the array of arrays if (tasksTableData[tasksTableData.Length - 2] == ',') { tasksTableData.Delete(tasksTableData.Length - 2, tasksTableData.Length - 1); } tasksTableData.Append("]"); html.Script().$type("text/javascript").("var tasksTableData=" + tasksTableData).( ); Hamlet.TR <Hamlet.TFOOT <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > > footRow = tbody.().Tfoot().Tr(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("task"). $value("ID").().().Th().Input("search_init").$type(HamletSpec.InputType.text).$name ("state").$value("State").().().Th().Input("search_init").$type(HamletSpec.InputType .text).$name("start_time").$value("Start Time").().().Th().Input("search_init"). $type(HamletSpec.InputType.text).$name("finish_time").$value("Finish Time").().( ).Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_time" ).$value("Elapsed Time").().().Th().Input("search_init").$type(HamletSpec.InputType .text).$name("attempt_start_time").$value("Start Time").().(); if (type == TaskType.Reduce) { footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("shuffle_time" ).$value("Shuffle Time").().(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("merge_time" ).$value("Merge Time").().(); } footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("attempt_finish" ).$value("Finish Time").().(); if (type == TaskType.Reduce) { footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_shuffle_time" ).$value("Elapsed Shuffle Time").().(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_merge_time" ).$value("Elapsed Merge Time").().(); footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("elapsed_reduce_time" ).$value("Elapsed Reduce Time").().(); } footRow.Th().Input("search_init").$type(HamletSpec.InputType.text).$name("attempt_elapsed" ).$value("Elapsed Time").().(); footRow.().().(); }
protected override void Render(HtmlBlock.Block html) { string webUiType = $(YarnWebParams.WebUiType); string aid = $(YarnWebParams.ApplicationId); if (aid.IsEmpty()) { Puts("Bad request: requires Application ID"); return; } try { appID = Apps.ToAppID(aid); } catch (Exception) { Puts("Invalid Application ID: " + aid); return; } UserGroupInformation callerUGI = GetCallerUGI(); ApplicationReport appReport; try { GetApplicationReportRequest request = GetApplicationReportRequest.NewInstance(appID ); if (callerUGI == null) { appReport = appBaseProt.GetApplicationReport(request).GetApplicationReport(); } else { appReport = callerUGI.DoAs(new _PrivilegedExceptionAction_99(this, request)); } } catch (Exception e) { string message = "Failed to read the application " + appID + "."; Log.Error(message, e); html.P().(message).(); return; } if (appReport == null) { Puts("Application not found: " + aid); return; } AppInfo app = new AppInfo(appReport); SetTitle(StringHelper.Join("Application ", aid)); if (webUiType != null && webUiType.Equals(YarnWebParams.RmWebUi) && conf.GetBoolean (YarnConfiguration.RmWebappUiActionsEnabled, YarnConfiguration.DefaultRmWebappUiActionsEnabled )) { // Application Kill html.Div().Button().$onclick("confirmAction()").B("Kill Application").().(); StringBuilder script = new StringBuilder(); script.Append("function confirmAction() {").Append(" b = confirm(\"Are you sure?\");" ).Append(" if (b == true) {").Append(" $.ajax({").Append(" type: 'PUT',").Append (" url: '/ws/v1/cluster/apps/").Append(aid).Append("/state',").Append(" contentType: 'application/json'," ).Append(" data: '{\"state\":\"KILLED\"}',").Append(" dataType: 'json'").Append( " }).done(function(data){").Append(" setTimeout(function(){").Append(" location.href = '/cluster/app/" ).Append(aid).Append("';").Append(" }, 1000);").Append(" }).fail(function(data){" ).Append(" console.log(data);").Append(" });").Append(" }").Append("}"); html.Script().$type("text/javascript").(script.ToString()).(); } Info("Application Overview").("User:"******"Name:", app.GetName()).("Application Type:" , app.GetType()).("Application Tags:", app.GetApplicationTags() == null ? string.Empty : app.GetApplicationTags()).("YarnApplicationState:", app.GetAppState() == null ? Unavailable : ClarifyAppState(app.GetAppState())).("FinalStatus Reported by AM:" , ClairfyAppFinalStatus(app.GetFinalAppStatus())).("Started:", Times.Format(app. GetStartedTime())).("Elapsed:", StringUtils.FormatTime(Times.Elapsed(app.GetStartedTime (), app.GetFinishedTime()))).("Tracking URL:", app.GetTrackingUrl() == null || app .GetTrackingUrl().Equals(Unavailable) ? null : Root_url(app.GetTrackingUrl()), app .GetTrackingUrl() == null || app.GetTrackingUrl().Equals(Unavailable) ? "Unassigned" : app.GetAppState() == YarnApplicationState.Finished || app.GetAppState() == YarnApplicationState .Failed || app.GetAppState() == YarnApplicationState.Killed ? "History" : "ApplicationMaster" ).("Diagnostics:", app.GetDiagnosticsInfo() == null ? string.Empty : app.GetDiagnosticsInfo ()); ICollection <ApplicationAttemptReport> attempts; try { GetApplicationAttemptsRequest request = GetApplicationAttemptsRequest.NewInstance (appID); if (callerUGI == null) { attempts = appBaseProt.GetApplicationAttempts(request).GetApplicationAttemptList( ); } else { attempts = callerUGI.DoAs(new _PrivilegedExceptionAction_196(this, request)); } } catch (Exception e) { string message = "Failed to read the attempts of the application " + appID + "."; Log.Error(message, e); html.P().(message).(); return; } CreateApplicationMetricsTable(html); html.(typeof(InfoBlock)); GenerateApplicationTable(html, callerUGI, attempts); }
protected internal virtual void GenerateApplicationTable(HtmlBlock.Block html, UserGroupInformation callerUGI, ICollection <ApplicationAttemptReport> attempts) { // Application Attempt Table Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#attempts").Thead().Tr().Th(".id", "Attempt ID").Th(".started", "Started" ).Th(".node", "Node").Th(".logs", "Logs").().().Tbody(); StringBuilder attemptsTableData = new StringBuilder("[\n"); foreach (ApplicationAttemptReport appAttemptReport in attempts) { AppAttemptInfo appAttempt = new AppAttemptInfo(appAttemptReport); ContainerReport containerReport; try { GetContainerReportRequest request = GetContainerReportRequest.NewInstance(appAttemptReport .GetAMContainerId()); if (callerUGI == null) { containerReport = appBaseProt.GetContainerReport(request).GetContainerReport(); } else { containerReport = callerUGI.DoAs(new _PrivilegedExceptionAction_242(this, request )); } } catch (Exception e) { string message = "Failed to read the AM container of the application attempt " + appAttemptReport.GetApplicationAttemptId() + "."; Log.Error(message, e); html.P().(message).(); return; } long startTime = 0L; string logsLink = null; string nodeLink = null; if (containerReport != null) { ContainerInfo container = new ContainerInfo(containerReport); startTime = container.GetStartedTime(); logsLink = containerReport.GetLogUrl(); nodeLink = containerReport.GetNodeHttpAddress(); } attemptsTableData.Append("[\"<a href='").Append(Url("appattempt", appAttempt.GetAppAttemptId ())).Append("'>").Append(appAttempt.GetAppAttemptId()).Append("</a>\",\"").Append (startTime).Append("\",\"<a ").Append(nodeLink == null ? "#" : "href='" + nodeLink ).Append("'>").Append(nodeLink == null ? "N/A" : StringEscapeUtils.EscapeJavaScript (StringEscapeUtils.EscapeHtml(nodeLink))).Append("</a>\",\"<a ").Append(logsLink == null ? "#" : "href='" + logsLink).Append("'>").Append(logsLink == null ? "N/A" : "Logs").Append("</a>\"],\n"); } if (attemptsTableData[attemptsTableData.Length - 2] == ',') { attemptsTableData.Delete(attemptsTableData.Length - 2, attemptsTableData.Length - 1); } attemptsTableData.Append("]"); html.Script().$type("text/javascript").("var attemptsTableData=" + attemptsTableData ).(); tbody.().(); }
protected override void Render(HtmlBlock.Block html) { if (app.GetJob() == null) { html.H2($(Title)); return; } TaskType type = null; string symbol = $(AMParams.TaskType); if (!symbol.IsEmpty()) { type = MRApps.TaskType(symbol); } Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#tasks").Thead().Tr().Th("Task").Th("Progress").Th("Status").Th("State") .Th("Start Time").Th("Finish Time").Th("Elapsed Time").().().Tbody(); StringBuilder tasksTableData = new StringBuilder("[\n"); foreach (Task task in app.GetJob().GetTasks().Values) { if (type != null && task.GetType() != type) { continue; } string taskStateStr = $(AMParams.TaskState); if (taskStateStr == null || taskStateStr.Trim().Equals(string.Empty)) { taskStateStr = "ALL"; } if (!Sharpen.Runtime.EqualsIgnoreCase(taskStateStr, "ALL")) { try { // get stateUI enum MRApps.TaskStateUI stateUI = MRApps.TaskState(taskStateStr); if (!stateUI.CorrespondsTo(task.GetState())) { continue; } } catch (ArgumentException) { continue; } } // not supported state, ignore TaskInfo info = new TaskInfo(task); string tid = info.GetId(); string pct = StringHelper.Percent(info.GetProgress() / 100); tasksTableData.Append("[\"<a href='").Append(Url("task", tid)).Append("'>").Append (tid).Append("</a>\",\"").Append("<br title='").Append(pct).Append("'> <div class='" ).Append(JQueryUI.CProgressbar).Append("' title='").Append(StringHelper.Join(pct , '%')).Append("'> ").Append("<div class='").Append(JQueryUI.CProgressbarValue). Append("' style='").Append(StringHelper.Join("width:", pct, '%')).Append("'> </div> </div>\",\"" ).Append(StringEscapeUtils.EscapeJavaScript(StringEscapeUtils.EscapeHtml(info.GetStatus ()))).Append("\",\"").Append(info.GetState()).Append("\",\"").Append(info.GetStartTime ()).Append("\",\"").Append(info.GetFinishTime()).Append("\",\"").Append(info.GetElapsedTime ()).Append("\"],\n"); } //Progress bar //Remove the last comma and close off the array of arrays if (tasksTableData[tasksTableData.Length - 2] == ',') { tasksTableData.Delete(tasksTableData.Length - 2, tasksTableData.Length - 1); } tasksTableData.Append("]"); html.Script().$type("text/javascript").("var tasksTableData=" + tasksTableData).( ); tbody.().(); }
protected override void Render(HtmlBlock.Block html) { string attemptid = $(YarnWebParams.ApplicationAttemptId); if (attemptid.IsEmpty()) { Puts("Bad request: requires application attempt ID"); return; } try { appAttemptId = ConverterUtils.ToApplicationAttemptId(attemptid); } catch (ArgumentException) { Puts("Invalid application attempt ID: " + attemptid); return; } UserGroupInformation callerUGI = GetCallerUGI(); ApplicationAttemptReport appAttemptReport; try { GetApplicationAttemptReportRequest request = GetApplicationAttemptReportRequest.NewInstance (appAttemptId); if (callerUGI == null) { appAttemptReport = appBaseProt.GetApplicationAttemptReport(request).GetApplicationAttemptReport (); } else { appAttemptReport = callerUGI.DoAs(new _PrivilegedExceptionAction_85(this, request )); } } catch (Exception e) { string message = "Failed to read the application attempt " + appAttemptId + "."; Log.Error(message, e); html.P().(message).(); return; } if (appAttemptReport == null) { Puts("Application Attempt not found: " + attemptid); return; } bool exceptionWhenGetContainerReports = false; ICollection <ContainerReport> containers = null; try { GetContainersRequest request = GetContainersRequest.NewInstance(appAttemptId); if (callerUGI == null) { containers = appBaseProt.GetContainers(request).GetContainerList(); } else { containers = callerUGI.DoAs(new _PrivilegedExceptionAction_115(this, request)); } } catch (RuntimeException) { // have this block to suppress the findbugs warning exceptionWhenGetContainerReports = true; } catch (Exception) { exceptionWhenGetContainerReports = true; } AppAttemptInfo appAttempt = new AppAttemptInfo(appAttemptReport); SetTitle(StringHelper.Join("Application Attempt ", attemptid)); string node = "N/A"; if (appAttempt.GetHost() != null && appAttempt.GetRpcPort() >= 0 && appAttempt.GetRpcPort () < 65536) { node = appAttempt.GetHost() + ":" + appAttempt.GetRpcPort(); } GenerateOverview(appAttemptReport, containers, appAttempt, node); if (exceptionWhenGetContainerReports) { html.P().("Sorry, Failed to get containers for application attempt" + attemptid + ".").(); return; } CreateAttemptHeadRoomTable(html); html.(typeof(InfoBlock)); CreateTablesForAttemptMetrics(html); // Container Table Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#containers").Thead().Tr().Th(".id", "Container ID").Th(".node", "Node") .Th(".exitstatus", "Container Exit Status").Th(".logs", "Logs").().().Tbody(); StringBuilder containersTableData = new StringBuilder("[\n"); foreach (ContainerReport containerReport in containers) { ContainerInfo container = new ContainerInfo(containerReport); containersTableData.Append("[\"<a href='").Append(Url("container", container.GetContainerId ())).Append("'>").Append(container.GetContainerId()).Append("</a>\",\"<a ").Append (container.GetNodeHttpAddress() == null ? "#" : "href='" + container.GetNodeHttpAddress ()).Append("'>").Append(container.GetNodeHttpAddress() == null ? "N/A" : StringEscapeUtils .EscapeJavaScript(StringEscapeUtils.EscapeHtml(container.GetNodeHttpAddress()))) .Append("</a>\",\"").Append(container.GetContainerExitStatus()).Append("\",\"<a href='" ).Append(container.GetLogUrl() == null ? "#" : container.GetLogUrl()).Append("'>" ).Append(container.GetLogUrl() == null ? "N/A" : "Logs").Append("</a>\"],\n"); } if (containersTableData[containersTableData.Length - 2] == ',') { containersTableData.Delete(containersTableData.Length - 2, containersTableData.Length - 1); } containersTableData.Append("]"); html.Script().$type("text/javascript").("var containersTableData=" + containersTableData ).(); tbody.().(); }
protected override void Render(HtmlBlock.Block html) { Hamlet.TBODY <Hamlet.TABLE <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > tbody = html .Table("#apps").Thead().Tr().Th(".id", "ID").Th(".user", "User").Th(".name", "Name" ).Th(".type", "Application Type").Th(".queue", "Queue").Th(".fairshare", "Fair Share" ).Th(".starttime", "StartTime").Th(".finishtime", "FinishTime").Th(".state", "State" ).Th(".finalstatus", "FinalStatus").Th(".progress", "Progress").Th(".ui", "Tracking UI" ).().().Tbody(); ICollection <YarnApplicationState> reqAppStates = null; string reqStateString = $(YarnWebParams.AppState); if (reqStateString != null && !reqStateString.IsEmpty()) { string[] appStateStrings = reqStateString.Split(","); reqAppStates = new HashSet <YarnApplicationState>(appStateStrings.Length); foreach (string stateString in appStateStrings) { reqAppStates.AddItem(YarnApplicationState.ValueOf(stateString)); } } StringBuilder appsTableData = new StringBuilder("[\n"); foreach (RMApp app in apps.Values) { if (reqAppStates != null && !reqAppStates.Contains(app.CreateApplicationState())) { continue; } AppInfo appInfo = new AppInfo(rm, app, true, WebAppUtils.GetHttpSchemePrefix(conf )); string percent = string.Format("%.1f", appInfo.GetProgress()); ApplicationAttemptId attemptId = app.GetCurrentAppAttempt().GetAppAttemptId(); int fairShare = fsinfo.GetAppFairShare(attemptId); if (fairShare == FairSchedulerInfo.InvalidFairShare) { // FairScheduler#applications don't have the entry. Skip it. continue; } 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 .GetApplicationType()))).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("\",\"").Append("<br title='").Append(percent) .Append("'> <div class='").Append(JQueryUI.CProgressbar).Append("' title='").Append (StringHelper.Join(percent, '%')).Append("'> ").Append("<div class='").Append(JQueryUI .CProgressbarValue).Append("' style='").Append(StringHelper.Join("width:", percent , '%')).Append("'> </div> </div>").Append("\",\"<a href='"); // Progress bar string trackingURL = !appInfo.IsTrackingUrlReady() ? "#" : appInfo.GetTrackingUrlPretty (); appsTableData.Append(trackingURL).Append("'>").Append(appInfo.GetTrackingUI()).Append ("</a>\"],\n"); } if (appsTableData[appsTableData.Length - 2] == ',') { appsTableData.Delete(appsTableData.Length - 2, appsTableData.Length - 1); } appsTableData.Append("]"); html.Script().$type("text/javascript").("var appsTableData=" + appsTableData).(); tbody.().(); }