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