<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="org.apache.hadoop.mapred.JobStatus" %> <%@ page import="org.apache.hadoop.mapred.JobTracker" %> <%@ page import="org.apache.hadoop.mapred.JobInProgress" %> <%@ page import="org.apache.hadoop.mapred.JobProfile" %> <%@ page import="org.apache.hadoop.mapred.TaskReport" %> <%@ page import="java.util.Vector" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.util.Date" %> <%@ page import="java.lang.StringBuffer" %> <%@ page import="org.apache.nutch.admin.*" %> <%@ page import="org.apache.hadoop.mapred.LocalJobRunner" %> <%@ page import="org.apache.hadoop.mapred.LocalJobRunner.Job" %> <%@ page import="org.apache.hadoop.fs.FileSystem" %> <%@ page import="org.apache.hadoop.conf.Configuration" %> <%@ page import="org.apache.nutch.util.NutchConfiguration" %> <%@ page import="java.text.DateFormat" %> <%@ page import="java.util.Locale" %> <%! public String generateTable(String label, TaskReport[] tasks, GuiComponent component, Locale locale) { StringBuffer buffer = new StringBuffer(); buffer.append("

" + label + "
"); buffer.append("
"); buffer.append(""); buffer.append(""); buffer.append(""); buffer.append(""); buffer.append(""); buffer.append(""); buffer.append(""); for (int i = 0; i < tasks.length; i++) { TaskReport report = tasks[i]; String tipid = report.getTaskId(); String progress = String.valueOf(report.getProgress()*100); String state = report.getState(); String[] diagnostics = report.getDiagnostics(); int diagnosticSize = diagnostics.length; buffer.append(""); buffer.append(""); buffer.append(""); buffer.append(""); for (int j = 0; j < diagnosticSize; j++) { buffer.append("
"+component.getLabel("map.id", locale)+"% "+component.getLabel("complete", locale)+""+component.getLabel("state", locale)+""+component.getLabel("diagnostic", locale)+"
"+tipid+""); buffer.append(""); buffer.append(""); buffer.append(""); buffer.append(""); buffer.append("
"); buffer.append(""+progress+" %
"+state+""+diagnostics[j]); buffer.append(""); } } buffer.append("
"); buffer.append("
"); return buffer.toString(); } %> <% DateFormat dateInstance = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG, request.getLocale()); String refresh = request.getParameter("refresh") != null ? request.getParameter("refresh") : "off"; String isRefresh = "off".equals(refresh) ? "on" : "off"; String jobid = request.getParameter("jobid") != null ? request.getParameter("jobid") : ""; boolean isLocal=false; GuiComponent component = (GuiComponent) application.getAttribute("component"); Configuration configuration = component.getNutchInstance().getConfiguration(); FileSystem fileSystem = FileSystem.get(configuration); String message =""; TaskReport[] reduceTaskReports = new TaskReport[0]; TaskReport[] mapTaskReports = new TaskReport[0]; int desiredMaps = 0; int desiredReduces = 0; int completedMaps = 0; int completedReduces = 0; JobStatus status = null; String startTime = "-"; String finishTime = "-"; String statePicture = ""; JobProfile profile = null; if(!"local".equals(fileSystem.getName())) { JobTracker tracker = JobTracker.getTracker(); JobInProgress job = (JobInProgress) tracker.getJob(jobid); mapTaskReports = (job != null) ? tracker.getMapTaskReports(jobid) : null; reduceTaskReports = (job != null) ? tracker.getReduceTaskReports(jobid) : null; desiredMaps = (job != null) ? job.desiredMaps() : 0; desiredReduces = (job != null) ? job.desiredReduces() : 0; completedMaps = (job != null) ? job.finishedMaps() : 0; completedReduces = (job != null) ? job.finishedReduces() : 0; profile = (job != null) ? (job.getProfile()) : null; startTime = dateInstance.format(new Date(job.getStartTime())); status = (job != null) ? (job.getStatus()) : null; if (status.getRunState() == JobStatus.RUNNING) { statePicture = "gfx/trafficlight_green.gif"; } else if (status.getRunState() == JobStatus.SUCCEEDED) { finishTime = dateInstance.format(new Date(job.getFinishTime())); statePicture = "gfx/trafficlight_green.gif"; } else if (status.getRunState() == JobStatus.FAILED) { finishTime = dateInstance.format(new Date(job.getFinishTime())); statePicture = "gfx/trafficlight_red.gif"; } }else if("local".equals(fileSystem.getName())){ isLocal=true; LocalJobRunner runner = LocalJobRunner.getInstance(configuration); Job job = (Job) runner.getJob(jobid); desiredMaps = (job != null) ? job.getDesiredMaps() : 0; desiredReduces = (job != null) ? job.getDesiredReduces() : 0; completedMaps = (job != null) ? job.getFinishedMaps() : 0; completedReduces = (job != null) ? job.getFinishedReduces() : 0; profile = runner.getJobProfile(jobid); mapTaskReports = (job != null) ? runner.getMapTaskReports(jobid) : null; reduceTaskReports = (job != null) ? runner.getReduceTaskReports(jobid) : null; startTime = dateInstance.format(new Date(job.getStartTime())); status = (job != null) ? (job.getStatus()) : null; if (status.getRunState() == JobStatus.RUNNING) { statePicture = "gfx/trafficlight_green.gif"; } else if (status.getRunState() == JobStatus.SUCCEEDED) { finishTime = dateInstance.format(new Date(job.getFinishTime())); statePicture = "gfx/trafficlight_green.gif"; } else if (status.getRunState() == JobStatus.FAILED) { finishTime = dateInstance.format(new Date(job.getFinishTime())); statePicture = "gfx/trafficlight_red.gif"; } } %> Nutch Administration <%if("on".equals(refresh)) {%><%}%>
<%=component.getLabel("job.detail.headline", request.getLocale())%> (<%=component.getLabel("job.help", request.getLocale())%>)

<%=component.getLabel("refresh."+isRefresh, request.getLocale())%>
<%=component.getLabel("general", request.getLocale())%>
<%=component.getLabel("job.id", request.getLocale())%> <%=component.getLabel("state", request.getLocale())%> <%=component.getLabel("type", request.getLocale())%> <%=component.getLabel("start", request.getLocale())%> <%=component.getLabel("finish", request.getLocale())%> <%=component.getLabel("job.file", request.getLocale())%> <%=component.getLabel("map.required", request.getLocale())%> <%=component.getLabel("map.complete", request.getLocale())%> <%=component.getLabel("reduce.required", request.getLocale())%> <%=component.getLabel("reduce.complete", request.getLocale())%>
<%=jobid%> width="33" height="16"> <%=profile.getJobName()%> <%=startTime%> <%=finishTime%> <%=profile.getJobFile()%> <%=desiredMaps%> <%=completedMaps%> <%=desiredReduces%> <%=completedReduces%>
<%=generateTable(component.getLabel("map.headline", request.getLocale()), mapTaskReports, component, request.getLocale())%> <%=generateTable(component.getLabel("reduce.headline", request.getLocale()), reduceTaskReports, component, request.getLocale())%>