final Path jobFile = new Path(logFile);
String jobid = JobHistory.getJobIDFromHistoryFilePath(jobFile).toString();
final FileSystem fs = (FileSystem) application.getAttribute("fileSys");
final JobTracker jobTracker = (JobTracker) application.getAttribute("job.tracker");
JobInfo job = JSPUtil.checkAccessAndGetJobInfo(request, response,
jobTracker, fs, jobFile);
if (job == null) {
return;
}
if (job.getJobStatus().equals("FAILED"))
reasonforFailure = job.getErrorInfo();
out.write("\n\n<!DOCTYPE html>\n<html>\n<head>\n<title>Hadoop Job ");
out.print(jobid);
out.write(" on History Viewer</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/static/hadoop.css\">\n</head>\n<body>\n\n<h2>Hadoop Job ");
out.print(jobid );
out.write(" on <a href=\"jobhistory.jsp\">History Viewer</a></h2>\n\n<b>User: </b> ");
out.print(HtmlQuoting.quoteHtmlChars(job.getUsername()) );
out.write("<br/>\n<b>JobName: </b> ");
out.print(HtmlQuoting.quoteHtmlChars(job.getJobname()) );
out.write("<br/>\n<b>JobConf: </b> <a href=\"jobconf_history.jsp?logFile=");
out.print(logFile);
out.write("\"> \n ");
out.print(job.getJobConfPath() );
out.write("</a><br/> \n");
Map<JobACL, AccessControlList> jobAcls = job.getJobACLs();
JSPUtil.printJobACLs(jobTracker, jobAcls, out);
out.write("\n<b>Submitted At: </b> ");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, job.getSubmitTime(), 0 ) );
out.write("<br/> \n<b>Launched At: </b> ");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLaunchTime(), job.getSubmitTime()) );
out.write("<br/>\n<b>Finished At: </b> ");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, job.getFinishTime(), job.getLaunchTime()) );
out.write("<br/>\n<b>Status: </b> ");
out.print( ((job.getJobStatus()) == null ? "Incomplete" :job.getJobStatus()) );
out.write("<br/> \n<b>ReasonForFailure: </b> ");
out.print(reasonforFailure );
out.write("<br/>\n");
HistoryViewer.SummarizedJob sj = new HistoryViewer.SummarizedJob(job);
out.write("\n<b><a href=\"analysejobhistory.jsp?logFile=");
out.print(logFile);
out.write("\">Analyse This Job</a></b> \n<hr/>\n<center>\n<table border=\"2\" cellpadding=\"5\" cellspacing=\"2\">\n<tr>\n<td>Kind</td><td>Total Tasks(successful+failed+killed)</td><td>Successful tasks</td><td>Failed tasks</td><td>Killed tasks</td><td>Start Time</td><td>Finish Time</td>\n</tr>\n<tr>\n<td>Setup</td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_SETUP&status=all\">\n ");
out.print(sj.getTotalSetups());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_SETUP&status=SUCCEEDED\">\n ");
out.print(sj.getNumFinishedSetups());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_SETUP&status=FAILED\">\n ");
out.print(sj.getNumFailedSetups());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_SETUP&status=KILLED\">\n ");
out.print(sj.getNumKilledSetups());
out.write("</a></td> \n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getSetupStarted(), 0) );
out.write("</td>\n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getSetupFinished(), sj.getSetupStarted()) );
out.write("</td>\n</tr>\n<tr>\n<td>Map</td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=MAP&status=all\">\n ");
out.print(sj.getTotalMaps());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=MAP&status=SUCCEEDED\">\n ");
out.print(job.getFinishedMaps() );
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=MAP&status=FAILED\">\n ");
out.print(sj.getNumFailedMaps());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=MAP&status=KILLED\">\n ");
out.print(sj.getNumKilledMaps());
out.write("</a></td>\n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getMapStarted(), 0) );
out.write("</td>\n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getMapFinished(), sj.getMapStarted()) );
out.write("</td>\n</tr>\n<tr>\n<td>Reduce</td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=REDUCE&status=all\">\n ");
out.print(sj.getTotalReduces());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=REDUCE&status=SUCCEEDED\">\n ");
out.print(job.getFinishedReduces());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=REDUCE&status=FAILED\">\n ");
out.print(sj.getNumFailedReduces());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=REDUCE&status=KILLED\">\n ");
out.print(sj.getNumKilledReduces());
out.write("</a></td> \n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getReduceStarted(), 0) );
out.write("</td>\n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getReduceFinished(), sj.getReduceStarted()) );
out.write("</td>\n</tr>\n<tr>\n<td>Cleanup</td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_CLEANUP&status=all\">\n ");
out.print(sj.getTotalCleanups());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_CLEANUP&status=SUCCEEDED\">\n ");
out.print(sj.getNumFinishedCleanups());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_CLEANUP&status=FAILED\">\n ");
out.print(sj.getNumFailedCleanups());
out.write("</a></td>\n <td><a href=\"jobtaskshistory.jsp?logFile=");
out.print(logFile);
out.write("&taskType=JOB_CLEANUP&status=KILLED>\">\n ");
out.print(sj.getNumKilledCleanups());
out.write("</a></td> \n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getCleanupStarted(), 0) );
out.write("</td>\n <td>");
out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, sj.getCleanupFinished(), sj.getCleanupStarted()) );
out.write("</td>\n</tr>\n</table>\n\n<br>\n<br>\n\n<table border=2 cellpadding=\"5\" cellspacing=\"2\">\n <tr>\n <th><br/></th>\n <th>Counter</th>\n <th>Map</th>\n <th>Reduce</th>\n <th>Total</th>\n</tr>\n\n");
Counters totalCounters = job.getTotalCounters();
Counters mapCounters = job.getMapCounters();
Counters reduceCounters = job.getReduceCounters();
if (totalCounters != null) {
for (String groupName : totalCounters.getGroupNames()) {
CounterGroup totalGroup = totalCounters.getGroup(groupName);
CounterGroup mapGroup = mapCounters.getGroup(groupName);