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(); }