diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java
index 801f92856ca73323d64a6ff255741ed93c4714b6..ae18d38da622906f3cb9edf2a564e6341087cd80 100644
--- a/src/main/java/bdv/server/BigDataServer.java
+++ b/src/main/java/bdv/server/BigDataServer.java
@@ -5,7 +5,10 @@ import java.util.HashMap;
import mpicbg.spim.data.SpimDataException;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.server.handler.RequestLogHandler;
+import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.eclipse.jetty.util.log.Log;
public class BigDataServer
@@ -19,6 +22,7 @@ public class BigDataServer
final String fn = args.length > 0 ? args[ 0 ] : "/Users/moon/Projects/git-projects/BigDataViewer/data/HisYFP-SPIM.xml";
dataSet.put( "HisYFP-SPIM", fn );
+ dataSet.put( "t1-head", "/Users/moon/Projects/git-projects/BigDataViewer/data/t1-head.xml" );
final int port = args.length > 1 ? Integer.parseInt( args[ 1 ] ) : 8080;
System.setProperty( "org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog" );
@@ -26,19 +30,27 @@ public class BigDataServer
final String baseURL = "http://" + server.getURI().getHost() + ":" + port;
- final HandlerCollection handlers = createHandlers( baseURL, dataSet );
- handlers.addHandler( new ManagerHandler( baseURL, server, handlers ) );
+ final StatisticsHandler statHandler = new StatisticsHandler();
- LOG.info( "Set handler: " + handlers );
- server.setHandler( handlers );
+ final HandlerCollection handlers = new HandlerCollection();
+
+ final ContextHandlerCollection datasetHandlers = createHandlers( baseURL, dataSet );
+ handlers.addHandler( datasetHandlers );
+ handlers.addHandler( new ManagerHandler( baseURL, server, statHandler, datasetHandlers ) );
+ handlers.addHandler( new RequestLogHandler() );
+
+ statHandler.setHandler( handlers );
+
+ LOG.info( "Set handler: " + statHandler );
+ server.setHandler( statHandler );
LOG.info( "BigDataServer starting" );
server.start();
server.join();
}
- static private HandlerCollection createHandlers( final String baseURL, final HashMap< String, String > dataSet ) throws SpimDataException
+ static private ContextHandlerCollection createHandlers( String baseURL, HashMap< String, String > dataSet ) throws SpimDataException
{
- final HandlerCollection handlers = new HandlerCollection( true );
+ final ContextHandlerCollection handlers = new ContextHandlerCollection();
for ( final String key : dataSet.keySet() )
{
diff --git a/src/main/java/bdv/server/ManagerHandler.java b/src/main/java/bdv/server/ManagerHandler.java
index 2deff297369e831ad4d32d408f5712d8c511e66b..839065c7f0b9881f0620fea65c3890821dddfc7f 100644
--- a/src/main/java/bdv/server/ManagerHandler.java
+++ b/src/main/java/bdv/server/ManagerHandler.java
@@ -13,9 +13,17 @@ import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.eclipse.jetty.util.log.Log;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.DecimalFormat;
+
public class ManagerHandler extends ContextHandler
{
private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger( ManagerHandler.class );
@@ -23,14 +31,17 @@ public class ManagerHandler extends ContextHandler
private final String baseURL;
private final Server server;
+
+ private final ContextHandlerCollection handlers;
+
+ private final StatisticsHandler statHandler;
- private final HandlerCollection handlers;
-
- public ManagerHandler( final String baseURL, final Server server, final HandlerCollection handlers )
+ public ManagerHandler( String baseURL, Server server, StatisticsHandler statHandler, ContextHandlerCollection handlers )
{
this.baseURL = baseURL;
this.server = server;
this.handlers = handlers;
+ this.statHandler = statHandler;
setContextPath( "/manager" );
}
@@ -61,6 +72,15 @@ public class ManagerHandler extends ContextHandler
}
+ public String getByteSizeString( long size )
+ {
+ if ( size <= 0 )
+ return "0";
+ final String[] units = new String[] { "B", "kB", "MB", "GB", "TB" };
+ int digitGroups = ( int ) ( Math.log10( size ) / Math.log10( 1024 ) );
+ return new DecimalFormat( "#,##0.#" ).format( size / Math.pow( 1024, digitGroups ) ) + " " + units[ digitGroups ];
+ }
+
private void list( final Request baseRequest, final HttpServletResponse response ) throws IOException
{
response.setContentType( "text/html" );
@@ -69,16 +89,27 @@ 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( "This page is refreshed in every 5 secs.<br/>\n" );
+ ow.write( "<br/>\n" );
+ ow.write( "Bytes sent total: " + getByteSizeString( statHandler.getResponsesBytesTotal() ) + "<br/>\n" );
+
+ ow.write( "<H1> Datasets: </H1>\n" );
+
for ( final Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
{
CellHandler contextHandler = null;
if ( handler instanceof CellHandler )
{
contextHandler = ( CellHandler ) handler;
- ow.write( contextHandler.getContextPath() );
+ ow.write( contextHandler.getContextPath() + "<BR/>" );
}
}
+ ow.write( statHandler.toStatsHTML() );
+
+ ow.write( "</BODY>" );
ow.close();
}