diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java
index c7d98cfedd613b79baa5fb59a138acf92f3771c9..4b6657033c8daebbd228729249dd121fa4fec18e 100644
--- a/src/main/java/bdv/server/BigDataServer.java
+++ b/src/main/java/bdv/server/BigDataServer.java
@@ -1,7 +1,5 @@
package bdv.server;
-import java.util.HashMap;
-
import mpicbg.spim.data.SpimDataException;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.ConnectorStatistics;
@@ -14,6 +12,8 @@ import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
+import java.util.HashMap;
+
public class BigDataServer
{
static HashMap< String, String > dataSet = new HashMap<>();
diff --git a/src/main/java/bdv/server/CellHandler.java b/src/main/java/bdv/server/CellHandler.java
index 099597f0ef650c5499bea661726f440767a7f9a4..6a40ee954e8ca75a885c352a23ac0cb04454509f 100644
--- a/src/main/java/bdv/server/CellHandler.java
+++ b/src/main/java/bdv/server/CellHandler.java
@@ -1,23 +1,5 @@
package bdv.server;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import mpicbg.spim.data.SpimDataException;
-import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
-import net.imglib2.realtransform.AffineTransform3D;
-
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.jdom2.Document;
-import org.jdom2.output.Format;
-import org.jdom2.output.XMLOutputter;
-
import bdv.img.cache.CacheHints;
import bdv.img.cache.LoadingStrategy;
import bdv.img.cache.VolatileCell;
@@ -29,8 +11,22 @@ import bdv.img.remote.RemoteImageLoaderMetaData;
import bdv.spimdata.SequenceDescriptionMinimal;
import bdv.spimdata.SpimDataMinimal;
import bdv.spimdata.XmlIoSpimDataMinimal;
-
import com.google.gson.GsonBuilder;
+import mpicbg.spim.data.SpimDataException;
+import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
+import net.imglib2.realtransform.AffineTransform3D;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.jdom2.Document;
+import org.jdom2.output.Format;
+import org.jdom2.output.XMLOutputter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
public class CellHandler extends ContextHandler
{
@@ -149,7 +145,6 @@ public class CellHandler extends ContextHandler
throw new ServletException( e );
}
-
// final SAXBuilder sax = new SAXBuilder();
// Document doc;
// try
@@ -179,4 +174,9 @@ public class CellHandler extends ContextHandler
// ow.write( new XMLOutputter().outputString( doc ) );
// ow.close();
}
+
+ public String getXmlFile()
+ {
+ return xmlFile;
+ }
}
diff --git a/src/main/java/bdv/server/ManagerHandler.java b/src/main/java/bdv/server/ManagerHandler.java
index cb50f04ea907d4072c26f12ff6eb4243132c9225..577f44a17ec9c14f6ffa7f2f572b74acb4fd14cc 100644
--- a/src/main/java/bdv/server/ManagerHandler.java
+++ b/src/main/java/bdv/server/ManagerHandler.java
@@ -1,13 +1,8 @@
package bdv.server;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import mpicbg.spim.data.SpimDataException;
+import org.antlr.stringtemplate.StringTemplate;
+import org.antlr.stringtemplate.StringTemplateGroup;
import org.eclipse.jetty.server.ConnectorStatistics;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
@@ -22,6 +17,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
+import java.net.URISyntaxException;
import java.text.DecimalFormat;
public class ManagerHandler extends ContextHandler
@@ -38,7 +34,7 @@ public class ManagerHandler extends ContextHandler
private final ConnectorStatistics connectorStats;
- public ManagerHandler( String baseURL, Server server, ConnectorStatistics connectorStats, StatisticsHandler statHandler, ContextHandlerCollection handlers )
+ public ManagerHandler( String baseURL, Server server, ConnectorStatistics connectorStats, StatisticsHandler statHandler, ContextHandlerCollection handlers ) throws IOException, URISyntaxException
{
this.baseURL = baseURL;
this.server = server;
@@ -92,34 +88,45 @@ public class ManagerHandler extends ContextHandler
final PrintWriter ow = response.getWriter();
- ow.write( "<HTML>\n<HEAD><META HTTP-EQUIV=\"refresh\" CONTENT=\"5\"></HEAD>\n<BODY>" );
+ ow.write( getHtml() );
+ ow.close();
+ }
+
+ private String getHtml()
+ {
+ // manager.st should be under {WorkingFolder}/templates/
+ StringTemplateGroup templates =
+ new StringTemplateGroup( "manager", "templates" );
- ow.write( "This page is refreshed in every 5 secs.<br/>\n" );
- ow.write( "<br/>\n" );
- ow.write( "Bytes sent total: " + getByteSizeString( statHandler.getResponsesBytesTotal() ) + "<br/>\n" );
+ StringTemplate t = templates.getInstanceOf( "manager" );
- // Refer: http://download.eclipse.org/jetty/9.2.6.v20141205/apidocs/org/eclipse/jetty/server/ConnectorStatistics.html
- ow.write( String.format( "%,d Message/sec<br/>%n", connectorStats.getMessagesOutPerSecond() ) );
+ t.setAttribute( "bytesSent", getByteSizeString( statHandler.getResponsesBytesTotal() ) );
+ t.setAttribute( "msgPerSec", connectorStats.getMessagesOutPerSecond() );
+ t.setAttribute( "openConnections", connectorStats.getConnectionsOpen() );
+ t.setAttribute( "maxOpenConnections", connectorStats.getConnectionsOpenMax() );
- ow.write( String.format( "Open connections = %,d<br/>%n", connectorStats.getConnectionsOpen() ) );
- ow.write( String.format( "Max open connections = %,d<br/>%n", connectorStats.getConnectionsOpenMax() ) );
+ t.setAttribute( "contexts", getContexts() );
- ow.write( "<H1> Datasets: </H1>\n" );
+ t.setAttribute( "statHtml", statHandler.toStatsHTML() );
- for ( final Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
+ return t.toString();
+ }
+
+ private String getContexts()
+ {
+ StringBuilder sb = new StringBuilder();
+ for ( Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
{
CellHandler contextHandler = null;
if ( handler instanceof CellHandler )
{
+ sb.append( "<tr>\n<th>" );
contextHandler = ( CellHandler ) handler;
- ow.write( contextHandler.getContextPath() + "<BR/>" );
+ sb.append( contextHandler.getContextPath() + "</th>\n<td>" );
+ sb.append( contextHandler.getXmlFile() + "</td>\n</tr>\n" );
}
}
-
- ow.write( statHandler.toStatsHTML() );
-
- ow.write( "</BODY>" );
- ow.close();
+ return sb.toString();
}
private void deploy( final String datasetName, final String fileLocation, final Request baseRequest, final HttpServletResponse response ) throws IOException
diff --git a/src/main/resources/templates/manager.st b/src/main/resources/templates/manager.st
new file mode 100644
index 0000000000000000000000000000000000000000..38ab1b4b2f3ba57d64089ac92ad6ed510234030f
--- /dev/null
+++ b/src/main/resources/templates/manager.st
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <meta http-equiv="refresh" content="5"/>
+
+ <title>BigDataServer</title>
+
+ <!-- Latest compiled and minified CSS -->
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+
+ <!-- Optional theme -->
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css">
+
+ <!-- Latest compiled and minified JavaScript -->
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
+</head>
+
+<body class="tundra">
+
+This page is refreshed in every 5 secs.<br/>
+
+<div class="contentelement">
+
+ <h1>$title$</h1>
+
+ <hr>
+
+ <table cellspacing="2">
+ <tr>
+ <th>Bytes sent total:</th>
+ <td>$bytesSent$</td>
+ </tr>
+ <tr>
+ <th>Messages per second:</th>
+ <td>$msgPerSec$</td>
+ </tr>
+ <tr>
+ <th>Open connections:</th>
+ <td>$openConnections$</td>
+ </tr>
+ <tr>
+ <th>Max open connections:</th>
+ <td>$maxOpenConnections$</td>
+ </tr>
+ </table>
+
+ <hr>
+
+ <h1> Datasets: </h1>
+ <table cellspacing="2">
+ $contexts$
+ </table>
+
+ <hr>
+ <table cellspacing="2">
+ <tr>
+ <td>
+ $statHtml$
+ </td>
+ </tr>
+ </table>
+
+</div>
+</body>
+</html>
\ No newline at end of file