From cfaf76be07755e73ed5ca910a0eddca537fe49aa Mon Sep 17 00:00:00 2001
From: HongKee Moon <hkmoon@me.com>
Date: Thu, 5 Feb 2015 14:55:10 +0100
Subject: [PATCH] Add "Number of datasets" and "Total size of datasets" in
 manager context

---
 src/main/java/bdv/server/ManagerHandler.java | 42 +++++++++++++++-----
 src/main/resources/templates/manager.st      |  8 ++++
 2 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/src/main/java/bdv/server/ManagerHandler.java b/src/main/java/bdv/server/ManagerHandler.java
index 2377776..afef94c 100644
--- a/src/main/java/bdv/server/ManagerHandler.java
+++ b/src/main/java/bdv/server/ManagerHandler.java
@@ -15,6 +15,7 @@ import org.eclipse.jetty.util.log.Log;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URISyntaxException;
@@ -34,6 +35,12 @@ public class ManagerHandler extends ContextHandler
 	
 	private final ConnectorStatistics connectorStats;
 
+	private String contexts = null;
+
+	private int noDataSets = 0;
+
+	private long sizeDataSets = 0;
+
 	public ManagerHandler( final String baseURL, final Server server, final ConnectorStatistics connectorStats, final StatisticsHandler statHandler, ContextHandlerCollection handlers ) throws IOException, URISyntaxException
 	{
 		this.baseURL = baseURL;
@@ -105,28 +112,41 @@ public class ManagerHandler extends ContextHandler
 		t.setAttribute( "openConnections", connectorStats.getConnectionsOpen() );
 		t.setAttribute( "maxOpenConnections", connectorStats.getConnectionsOpenMax() );
 
-		t.setAttribute( "contexts", getContexts() );
+		getContexts();
+
+		t.setAttribute( "contexts", contexts );
+
+		t.setAttribute( "noDataSets", noDataSets );
+		t.setAttribute( "sizeDataSets", getByteSizeString( sizeDataSets ) );
 
 		t.setAttribute( "statHtml", statHandler.toStatsHTML() );
 
 		return t.toString();
 	}
 
-	private String getContexts()
+	private void getContexts()
 	{
-		StringBuilder sb = new StringBuilder();
-		for ( final Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
+		if ( contexts == null )
 		{
-			CellHandler contextHandler = null;
-			if ( handler instanceof CellHandler )
+			noDataSets = 0;
+			sizeDataSets = 0;
+
+			StringBuilder sb = new StringBuilder();
+			for ( final Handler handler : server.getChildHandlersByClass( CellHandler.class ) )
 			{
-				sb.append( "<tr>\n<th>" );
-				contextHandler = ( CellHandler ) handler;
-				sb.append( contextHandler.getContextPath() + "</th>\n<td>" );
-				sb.append( contextHandler.getXmlFile() + "</td>\n</tr>\n" );
+				CellHandler contextHandler = null;
+				if ( handler instanceof CellHandler )
+				{
+					sb.append( "<tr>\n<th>" );
+					contextHandler = ( CellHandler ) handler;
+					sb.append( contextHandler.getContextPath() + "</th>\n<td>" );
+					sb.append( contextHandler.getXmlFile() + "</td>\n</tr>\n" );
+					noDataSets++;
+					sizeDataSets += new File( contextHandler.getXmlFile().replace( ".xml", ".h5" ) ).length();
+				}
 			}
+			contexts = sb.toString();
 		}
-		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
index 38ab1b4..aa0abf2 100644
--- a/src/main/resources/templates/manager.st
+++ b/src/main/resources/templates/manager.st
@@ -43,6 +43,14 @@ This page is refreshed in every 5 secs.<br/>
             <th>Max open connections:</th>
             <td>$maxOpenConnections$</td>
         </tr>
+        <tr>
+            <th>Number of datasets:</th>
+            <td>$noDataSets$</td>
+        </tr>
+        <tr>
+            <th>Total size of datasets:</th>
+            <td>$sizeDataSets$</td>
+        </tr>
     </table>
 
     <hr>
-- 
GitLab