Author: billa
Date: Tue May 2 10:38:11 2006
New Revision: 398974
URL: http://svn.apache.org/viewcvs?rev=398974&view=rev
Log:
first working version
Modified:
incubator/solr/trunk/src/webapp/resources/admin/distributiondump.jsp
incubator/solr/trunk/src/webapp/resources/admin/threaddump.jsp
Modified: incubator/solr/trunk/src/webapp/resources/admin/distributiondump.jsp
URL:
http://svn.apache.org/viewcvs/incubator/solr/trunk/src/webapp/resources/admin/distributiondump.jsp?rev=398974&r1=398973&r2=398974&view=diff
==============================================================================
--- incubator/solr/trunk/src/webapp/resources/admin/distributiondump.jsp
(original)
+++ incubator/solr/trunk/src/webapp/resources/admin/distributiondump.jsp Tue
May 2 10:38:11 2006
@@ -2,6 +2,7 @@
org.apache.solr.schema.IndexSchema,
java.io.BufferedReader,
java.io.File,
+ java.io.FilenameFilter,
java.io.FileReader,
java.net.InetAddress,
java.net.UnknownHostException,
@@ -10,15 +11,16 @@
<[EMAIL PROTECTED] file="header.jsp" %>
<%
- File slaveinfo = new File(cwd + "/logs/snappuller.status");
+ File slaveinfo = new File(cwd + "/solr/logs/snappuller.status");
StringBuffer buffer = new StringBuffer();
+ StringBuffer buffer2 = new StringBuffer();
String mode = "";
if (slaveinfo.canRead()) {
// Slave instance
mode = "Slave";
- File slavevers = new File(cwd + "/logs/snapshot.current");
+ File slavevers = new File(cwd + "/solr/logs/snapshot.current");
BufferedReader inforeader = new BufferedReader(new FileReader(slaveinfo));
BufferedReader versreader = new BufferedReader(new FileReader(slavevers));
buffer.append("<tr>\n" +
@@ -41,8 +43,18 @@
} else {
// Master instance
mode = "Master";
- File masterdir = new File(cwd + "/logs/clients");
- File[] clients = masterdir.listFiles();
+ File masterdir = new File(cwd + "/solr/logs/clients");
+ FilenameFilter sfilter = new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.startsWith("snapshot.status");
+ }
+ };
+ FilenameFilter cfilter = new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.startsWith("snapshot.current");
+ }
+ };
+ File[] clients = masterdir.listFiles(cfilter);
if (clients == null) {
buffer.append("<tr>\n" +
"<td>\n" +
@@ -52,19 +64,24 @@
"</td>\n" +
"</tr>\n");
} else {
+ buffer.append("<h4>Client Snapshot In Use:</h4>\n" +
+ "<tr>\n" +
+ "<th>\n" +
+ "Client" +
+ "</th>\n" +
+ "<th>\n" +
+ "Version" +
+ "</th>\n" +
+ "</tr>\n");
int i = 0;
while (i < clients.length) {
+ String fileName=clients[i].toString();
+ int p=fileName.indexOf("snapshot.current");
+ String clientName=fileName.substring(p+17);
BufferedReader reader = new BufferedReader(new FileReader(clients[i]));
buffer.append("<tr>\n" +
"<td>\n" +
- "Client:" +
- "</td>\n" +
- "<td>\n")
- .append( clients[i].toString())
- .append( "</td>\n" +
- "</tr>\n" +
- "<tr>\n" +
- "<td>\n" +
+ clientName +
"</td>\n" +
"<td>\n")
.append( reader.readLine())
@@ -74,10 +91,50 @@
"</tr>\n");
i++;
}
+ clients = masterdir.listFiles(sfilter);
+ if (clients!=null) {
+ buffer.append("</table>\n" +
+ "<h4>Client Snapshot Distribution Status:</h4>\n" +
+ "<table>\n" +
+ "<tr>\n" +
+ "<th>\n" +
+ "Client" +
+ "</th>\n" +
+ "<th>\n" +
+ "Status" +
+ "</th>\n" +
+ "</tr>\n");
+ i = 0;
+ while (i < clients.length) {
+ String fileName=clients[i].toString();
+ int p=fileName.indexOf("snapshot.status");
+ String clientName=fileName.substring(p+16);
+ BufferedReader reader = new BufferedReader(new
FileReader(clients[i]));
+ buffer.append("<tr>\n" +
+ "<td>\n" +
+ clientName +
+ "</td>\n" +
+ "<td>\n")
+ .append( reader.readLine())
+ .append( "</td>\n" +
+ "</tr>\n" +
+ "<tr>\n" +
+ "</tr>\n");
+ i++;
+ }
+ }
}
}
%>
+<br clear="all">
+<h2>Distribution Info</h2>
+<h3><%= mode %> Server</h3>
+<table>
+<%= buffer %>
+</table>
+<br><br>
+ <a href=".">Return to Admin Page</a>
</body>
</html>
Modified: incubator/solr/trunk/src/webapp/resources/admin/threaddump.jsp
URL:
http://svn.apache.org/viewcvs/incubator/solr/trunk/src/webapp/resources/admin/threaddump.jsp?rev=398974&r1=398973&r2=398974&view=diff
==============================================================================
--- incubator/solr/trunk/src/webapp/resources/admin/threaddump.jsp (original)
+++ incubator/solr/trunk/src/webapp/resources/admin/threaddump.jsp Tue May 2
10:38:11 2006
@@ -1,13 +1,104 @@
-<%@ page import="java.io.BufferedReader,
- java.io.FileReader"%>
-<%@ page import="java.util.Date"%>
+<%@ page import="java.lang.management.ManagementFactory,
+ java.lang.management.ThreadMXBean,
+ java.lang.management.ThreadInfo,
+ java.io.IOException"%>
<[EMAIL PROTECTED] file="header.jsp" %>
-<%
- File getinfo = new File("logs/jvm.log");
+<%!
+ static ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();
%>
<br clear="all">
+<h2>Thread Dump</h2>
+<table>
+<tr>
+<td>
+<%
+ out.print(System.getProperty("java.vm.name") +
+ " " + System.getProperty("java.vm.version") + "<br>");
+%>
+</td>
+</tr>
+<tr>
+<td>
+<%
+ long[] tids;
+ ThreadInfo[] tinfos;
-WORK IN PROGRESS: portable thread dump isn't implemented yet.
-
+ out.print("Thread Count: current=" + tmbean.getThreadCount() +
+ " deamon=" + tmbean.getDaemonThreadCount() +
+ " peak=" + tmbean.getPeakThreadCount());
+%>
+</td>
+</tr>
+<tr>
+<td>
+<%
+ tids = tmbean.findMonitorDeadlockedThreads();
+ if (tids == null) {
+ out.print("No deadlock found.");
+ }
+ else {
+ out.print("Deadlock found :-");
+ tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
+ for (ThreadInfo ti : tinfos) {
+ printThreadInfo(ti, out);
+ }
+ }
+%>
+</td>
+</tr>
+<tr>
+<td>
+<%
+ out.print("Full Thread Dump:<br>");
+ tids = tmbean.getAllThreadIds();
+ tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
+ for (ThreadInfo ti : tinfos) {
+ printThreadInfo(ti, out);
+ }
+%>
+</td>
+</tr>
+</table>
+<br><br>
+ <a href=".">Return to Admin Page</a>
</body>
</html>
+
+<%!
+ static String INDENT = "     ";
+
+ static void printThreadInfo(ThreadInfo ti, JspWriter out) throws IOException
{
+ long tid = ti.getThreadId();
+ StringBuilder sb = new StringBuilder("\"" + ti.getThreadName() + "\"" +
+ " Id=" + tid +
+ " in " + ti.getThreadState());
+ if (ti.getLockName() != null) {
+ sb.append(" on lock=" + ti.getLockName());
+ }
+ if (ti.isSuspended()) {
+ sb.append(" (suspended)");
+ }
+ if (ti.isInNative()) {
+ sb.append(" (running in native)");
+ }
+ if (tmbean.isThreadCpuTimeSupported()) {
+ sb.append(" total cpu time="
+ +formatNanos(tmbean.getThreadCpuTime(tid)));
+ sb.append(" user time="
+ +formatNanos(tmbean.getThreadUserTime(tid)));
+ }
+ out.print(sb.toString()+"<br>");
+ if (ti.getLockOwnerName() != null) {
+ out.print(INDENT + " owned by " + ti.getLockOwnerName() +
+ " Id=" + ti.getLockOwnerId()+"<br>");
+ }
+ for (StackTraceElement ste : ti.getStackTrace()) {
+ out.print(INDENT + "at " + ste.toString()+"<br>");
+ }
+ out.print("<br>");
+ }
+
+ static String formatNanos(long ns) {
+ return String.format("%.4fms", ns / (double) 1000000);
+ }
+%>