HAMA-910: Web UI Improvement
git-svn-id: https://svn.apache.org/repos/asf/hama/trunk@1621061 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/hama/manager/LogView.java b/core/src/main/java/org/apache/hama/manager/LogView.java
index 6a5aa8a..c9ccd82 100644
--- a/core/src/main/java/org/apache/hama/manager/LogView.java
+++ b/core/src/main/java/org/apache/hama/manager/LogView.java
@@ -37,7 +37,9 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
+import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -45,8 +47,16 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hama.bsp.BSPJobID;
+import org.apache.hama.bsp.BSPMaster;
+import org.apache.hama.bsp.ClusterStatus;
+import org.apache.hama.bsp.GroomServerStatus;
+import org.apache.hama.bsp.JobStatus;
import org.apache.hama.manager.util.UITemplate;
+/**
+ * Log viewer class for for BSP Server.
+ */
public class LogView {
/**
@@ -196,11 +206,11 @@
String logfilePath = logDirPath + "/" + fileName;
- if (pageType.equals("download")) {
+ if (pageType.equals("download")) { // download log file
LogView.downloadFile(response, logfilePath);
- } else {
+ } else { // log viewer
response.setContentType("text/html");
PrintWriter out = response.getWriter();
@@ -221,7 +231,7 @@
out.println(uit.convert(tplHead, vars));
vars.clear();
- if (pageType.equals("list")) { // list page
+ if (pageType.equals("list")) { // list
String[] listArea = new String[4];
listArea[0] = uit.getArea(tplfile, "list0");
@@ -259,7 +269,7 @@
vars.clear();
out.println(uit.convert(listArea[3], vars));
- } else if (pageType.equals("detail")) { // detail page
+ } else if (pageType.equals("detail")) { // detail
String[] detailArea = new String[4];
detailArea[0] = uit.getArea(tplfile, "detail0");
@@ -295,7 +305,7 @@
out.println(uit.convert(detailArea[2], vars));
- } else if (pageType.equals("tail")) { // tail page
+ } else if (pageType.equals("tail")) { // tail
String tailLine = request.getParameter("tailLine");
tailLine = (tailLine == null) ? "100" : tailLine;
@@ -353,14 +363,53 @@
vars.clear();
out.println(uit.convert(tailArea[2], vars));
+ } else if (pageType.equals("tasklist")) { // job list
+ String jobId = request.getParameter("jobId");
+ String[] listArea = new String[3];
+ listArea[0] = uit.getArea(tplfile, "tasklist0");
+ listArea[1] = uit.getArea(tplfile, "tasklist1");
+ listArea[2] = uit.getArea(tplfile, "tasklist2");
+
+ ServletContext ctx = getServletContext();
+ BSPMaster tracker = (BSPMaster) ctx.getAttribute("bsp.master");
+ ClusterStatus status = tracker.getClusterStatus(true);
+ JobStatus jobStatus = tracker.getJobStatus(BSPJobID.forName(jobId));
+
+ vars.put("hamaLogDir", hamaLogDir);
+ vars.put("dirName", dirName);
+ vars.put("targetUri", targetUri);
+ vars.put("jobId", jobId);
+ vars.put("jobStatus", jobStatus.getState().toString());
+ vars.put("jobName", jobStatus.getName());
+
+ out.println(uit.convert(listArea[0], vars));
+ vars.clear();
+
+ for (Entry<String, GroomServerStatus> entry : status
+ .getActiveGroomServerStatus().entrySet()) {
+ vars.put("jobId", jobId);
+ vars.put("dirName", dirName);
+ vars.put("serverName", entry.getKey());
+ vars.put("hostName", entry.getValue().getGroomHostName());
+ vars.put("targetUri", targetUri);
+ vars.put("type", "dir");
+ out.println(uit.convert(listArea[1], vars));
+
+ }
+
+ vars.clear();
+ out.println(uit.convert(listArea[2], vars));
}
- vars.clear();
out.println(tplTail);
}
}
+ /**
+ * Get Hama log Directory
+ * @return hama log directory
+ */
private static String getLogHomeDir() {
Map<String, String> env = System.getenv();
String hamaHome = env.get("HAMA_HOME");
diff --git a/core/src/main/java/org/apache/hama/util/BSPServletUtil.java b/core/src/main/java/org/apache/hama/util/BSPServletUtil.java
index 02b9865..5bf039c 100644
--- a/core/src/main/java/org/apache/hama/util/BSPServletUtil.java
+++ b/core/src/main/java/org/apache/hama/util/BSPServletUtil.java
@@ -78,7 +78,9 @@
sb.append("</td><td>");
sb.append(new Date(status.getStartTime()));
sb.append("</td><td>");
- sb.append("<a href=\"/logView?dir=tasklogs/");
+ sb.append("<a href=\"/logView?type=tasklist&jobId=");
+ sb.append(status.getJobID());
+ sb.append("&dir=tasklogs/");
sb.append(status.getJobID());
sb.append("\">view</a>");
sb.append("</td></tr>\n");
diff --git a/core/src/main/resources/webapp/bspmaster/bspjob.jsp b/core/src/main/resources/webapp/bspmaster/bspjob.jsp
index efdb281..7d6a727 100644
--- a/core/src/main/resources/webapp/bspmaster/bspjob.jsp
+++ b/core/src/main/resources/webapp/bspmaster/bspjob.jsp
@@ -60,7 +60,7 @@
<td>
<% if(status.getFinishTime() != 0L) {out.write(new Date(status.getFinishTime()).toString());} %>
</td>
- <td><a href="/logView?dir=tasklogs/<%=idString%>">view</a></td>
+ <td><a href="/logView?dir=tasklogs/<%=idString%>&jobId=<%=idString%>&type=tasklist">view</a></td>
</tr>
</table>
@@ -110,9 +110,6 @@
</div>
<p/>
<hr>
- <h2>Job Logs</h2>
- <a href="/logView?dir=tasklogs/<%=idString%>">Log</a> directory
- <hr>
<a href="bspmaster.jsp"><i>Back to BSPMaster</i></a>
<%
diff --git a/core/src/main/resources/webapp/commons/tpl/tpl.logview.html b/core/src/main/resources/webapp/commons/tpl/tpl.logview.html
index a5d53e9..249f173 100644
--- a/core/src/main/resources/webapp/commons/tpl/tpl.logview.html
+++ b/core/src/main/resources/webapp/commons/tpl/tpl.logview.html
@@ -162,13 +162,55 @@
</div>
<!--{area,end,logtail2}-->
+<!--{area,begin,tasklist0}-->
+<h2>${jobName}</h2>
+<div class="block-detail">
+<ul>
+ <li><span>Job ID : </span>${jobId}</li>
+ <li><span>Status : </span>${jobStatus}</li>
+</ul>
+</div>
+
+<hr>
+<div class="block-list-log">
+<table class="full-width">
+<thead>
+ <tr>
+ <th>Job ID</th>
+ <th>Server Name</th>
+ <th>Hostname</th>
+ <th>Directory</th>
+ <th>Type</th>
+ <th>Etc</th>
+ </tr>
+</thead>
+<tbody>
+<!--{area,end,tasklist0}-->
+
+<!--{area,begin,tasklist1}-->
+ <tr>
+ <td><a href="/bspjob.jsp?jobid=${jobId}">${jobId}</a></td>
+ <td><a href="http://${serverName}/">${serverName}</a></td>
+ <td>${hostName}</td>
+ <td><a href="http://${serverName}/logView?dir=${dirName}/${fileName}">/${dirName}</a></td>
+ <td>${type}</td>
+ <td>
+ <a href="http://${serverName}/logView?dir=${dirName}/${fileName}" class="link-container"><span class="link-title">view</span></a>
+ </td>
+ </tr>
+<!--{area,end,tasklist1}-->
+
+<!--{area,begin,tasklist2}-->
+</tbody>
+</table>
+</div>
+<!--{area,end,tasklist2}-->
<!--{area,begin,tail}-->
<hr />
<div id="footer" class="contents">
-<a href='http://hama.apache.org/'>Apache Hama</a>
+ <a href='http://hama.apache.org/'>Apache Hama</a>
</div>
-</body></html>
</body>
</html>
<!--{area,end,tail}-->
\ No newline at end of file