Print

Print


Author: [log in to unmask]
Date: Wed Sep 23 06:25:58 2015
New Revision: 3675

Log:
Current working version of run webapp; new main page with iframes.

Added:
    webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/AbstractRunServlet.java   (with props)
    webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunMainServlet.java   (with props)
    webapps/trunk/run-webapp/src/main/webapp/runMain.jsp   (with props)
Modified:
    webapps/trunk/run-webapp/pom.xml
    webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunSummaryServlet.java
    webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/ScalerDataServlet.java
    webapps/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml
    webapps/trunk/run-webapp/src/main/webapp/css/style.css
    webapps/trunk/run-webapp/src/main/webapp/runEpics.jsp
    webapps/trunk/run-webapp/src/main/webapp/runScalers.jsp
    webapps/trunk/run-webapp/src/main/webapp/runSummary.jsp

Modified: webapps/trunk/run-webapp/pom.xml
 =============================================================================
--- webapps/trunk/run-webapp/pom.xml	(original)
+++ webapps/trunk/run-webapp/pom.xml	Wed Sep 23 06:25:58 2015
@@ -43,6 +43,11 @@
             <version>3.4.1-SNAPSHOT</version>
         </dependency>
         <dependency>
+            <groupId>org.hps</groupId>
+            <artifactId>hps-datacat-client</artifactId>
+            <version>3.4.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
             <version>2.4</version>

Added: webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/AbstractRunServlet.java
 =============================================================================
--- webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/AbstractRunServlet.java	(added)
+++ webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/AbstractRunServlet.java	Wed Sep 23 06:25:58 2015
@@ -0,0 +1,77 @@
+package org.hps.webapps.run;
+
+import java.io.IOException;
+import java.sql.Connection;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+import org.hps.run.database.RunManager;
+import org.hps.run.database.RunSummary;
+
+/**
+ * Setup state for JSP that shows run summary.
+ *
+ * @author Jeremy McCormick, SLAC
+ */
+@SuppressWarnings("serial")
+public abstract class AbstractRunServlet extends HttpServlet {
+   
+    /**
+     * The data source with the database connection.
+     */
+    private final DataSource dataSource;
+
+    /**
+     * Create a new run servlet.
+     */
+    public AbstractRunServlet() {
+        this.dataSource = DatabaseUtilities.getDataSource();
+    }
+
+    /**
+     * Child class implements specific behavior.
+     * 
+     * @param request the HTTP request
+     * @param response the HTTP response
+     */
+    @Override
+    abstract public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException;
+    	
+    /**
+     * Set the <i>run</i> and <i>run_summary</i> attributes on the request.
+     * 
+     * @param request the HTTP request
+     * @return the run number
+     */
+	int setRunAttribute(final HttpServletRequest request) {
+		if (!request.getParameterMap().containsKey("run")) {
+            throw new RuntimeException("Missing required run parameter.");
+        }
+        final Integer run = Integer.parseInt(request.getParameterValues("run")[0]);
+        request.setAttribute("run", run);
+        return run;
+	}
+
+    /**
+     * Get a run summary for the given run number.
+     *
+     * @param run the run number
+     * @return the run summary
+     */
+    RunSummary getRunSummary(final Integer run) {
+        final RunManager runManager = new RunManager();
+        RunSummary runSummary = null;
+        try (Connection connection = this.dataSource.getConnection()) {
+            runManager.setConnection(connection);
+            runManager.setRun(run);
+            runSummary = runManager.getRunSummary();
+        } catch (final Exception e) {
+            throw new RuntimeException(e);
+        }
+        return runSummary;
+    }
+}

Added: webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunMainServlet.java
 =============================================================================
--- webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunMainServlet.java	(added)
+++ webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunMainServlet.java	Wed Sep 23 06:25:58 2015
@@ -0,0 +1,29 @@
+package org.hps.webapps.run;
+
+import java.io.IOException;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet for main run page.
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
+public class RunMainServlet extends AbstractRunServlet {
+	      
+	/**
+     * Setup servlet state by loading the run summaries and then forward to the JSP page for display.
+     */
+    @Override
+    public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
+            IOException {
+    	
+    	this.setRunAttribute(request);
+
+        final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/runMain.jsp");
+        dispatcher.forward(request, response);
+    }           
+}

Modified: webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunSummaryServlet.java
 =============================================================================
--- webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunSummaryServlet.java	(original)
+++ webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/RunSummaryServlet.java	Wed Sep 23 06:25:58 2015
@@ -1,16 +1,12 @@
 package org.hps.webapps.run;
 
 import java.io.IOException;
-import java.sql.Connection;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.sql.DataSource;
 
-import org.hps.run.database.RunManager;
 import org.hps.run.database.RunSummary;
 
 /**
@@ -19,31 +15,7 @@
  * @author Jeremy McCormick, SLAC
  */
 @SuppressWarnings("serial")
-public class RunSummaryServlet extends HttpServlet {
-
-    /**
-     * JSP target page.
-     */
-    private static final String JSP_TARGET = "/runSummary.jsp";
-
-    /**
-     * Attribute in the request which will have the run summary object.
-     */
-    private static final String RUN_SUMMARY_ATTRIBUTE = "RunSummary";
-
-    /**
-     * The data source with the database connection.
-     */
-    private final DataSource dataSource;
-
-    /**
-     * Create a new runs servlet.
-     * <p>
-     * This will initialize the data source with the db connection.
-     */
-    public RunSummaryServlet() {
-        this.dataSource = DatabaseUtilities.getDataSource();
-    }
+public class RunSummaryServlet extends AbstractRunServlet {
 
     /**
      * Setup servlet state by loading the run summaries and then forward to the JSP page for display.
@@ -51,32 +23,13 @@
     @Override
     public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
             IOException {
-        if (!request.getParameterMap().containsKey("run")) {
-            throw new RuntimeException("Missing required run parameter.");
-        }
-        final Integer run = Integer.parseInt(request.getParameterValues("run")[0]);
+    	
+    	int run = this.setRunAttribute(request);
+    
         final RunSummary runSummary = this.getRunSummary(run);
-        request.setAttribute(RUN_SUMMARY_ATTRIBUTE, runSummary);
-        final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(JSP_TARGET);
+        request.setAttribute("run_summary", runSummary);
+        
+        final RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/runSummary.jsp");
         dispatcher.forward(request, response);
-    }
-
-    /**
-     * Get a run summary for the given run number.
-     *
-     * @param run the run number
-     * @return the run summary
-     */
-    private RunSummary getRunSummary(final Integer run) {
-        final RunManager runManager = new RunManager();
-        RunSummary runSummary = null;
-        try (Connection connection = this.dataSource.getConnection()) {
-            runManager.setConnection(connection);
-            runManager.setRun(run);
-            runSummary = runManager.getRunSummary();
-        } catch (final Exception e) {
-            throw new RuntimeException(e);
-        }
-        return runSummary;
-    }
+    }   
 }

Modified: webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/ScalerDataServlet.java
 =============================================================================
--- webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/ScalerDataServlet.java	(original)
+++ webapps/trunk/run-webapp/src/main/java/org/hps/webapps/run/ScalerDataServlet.java	Wed Sep 23 06:25:58 2015
@@ -12,7 +12,6 @@
 import javax.sql.DataSource;
 
 import org.hps.record.scalers.ScalerData;
-import org.hps.run.database.RunDatabaseDaoFactory;
 import org.hps.run.database.RunManager;
 import org.hps.run.database.ScalerDataDao;
 

Modified: webapps/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml
 =============================================================================
--- webapps/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml	(original)
+++ webapps/trunk/run-webapp/src/main/webapp/WEB-INF/web.xml	Wed Sep 23 06:25:58 2015
@@ -30,8 +30,19 @@
         <url-pattern>/runs</url-pattern>
     </servlet-mapping>
         
-    <!-- Display a run summary. -->
+    <!-- Display the run page. -->
     
+    <servlet>
+        <servlet-name>RunMainServlet</servlet-name>
+        <servlet-class>org.hps.webapps.run.RunMainServlet</servlet-class>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>RunMainServlet</servlet-name>
+        <url-pattern>/run</url-pattern>
+    </servlet-mapping>
+    
+    <!-- Display run summary side bar. -->
     <servlet>
         <servlet-name>RunSummaryServlet</servlet-name>
         <servlet-class>org.hps.webapps.run.RunSummaryServlet</servlet-class>
@@ -39,7 +50,7 @@
 
     <servlet-mapping>
         <servlet-name>RunSummaryServlet</servlet-name>
-        <url-pattern>/run</url-pattern>
+        <url-pattern>/runSummary</url-pattern>
     </servlet-mapping>
     
     <!-- Display EPICS data -->

Modified: webapps/trunk/run-webapp/src/main/webapp/css/style.css
 =============================================================================
--- webapps/trunk/run-webapp/src/main/webapp/css/style.css	(original)
+++ webapps/trunk/run-webapp/src/main/webapp/css/style.css	Wed Sep 23 06:25:58 2015
@@ -6,3 +6,18 @@
     rgba(255, 255, 255, 0.3);
 }
 
+table.run-summary {
+	border: 1px gray solid;
+	border-collapse: collapse;
+}
+
+table.run-summary td.label {
+    font-weight: bold;
+}
+
+table.run-summary td {
+    border: 1px gray solid;
+    padding: 5px;
+    text-align: left;
+    vertical-align: middle;
+}

Modified: webapps/trunk/run-webapp/src/main/webapp/runEpics.jsp
 =============================================================================
--- webapps/trunk/run-webapp/src/main/webapp/runEpics.jsp	(original)
+++ webapps/trunk/run-webapp/src/main/webapp/runEpics.jsp	Wed Sep 23 06:25:58 2015
@@ -26,7 +26,7 @@
         EpicsType epicsType = (EpicsType) request.getAttribute("EpicsType");
         List<EpicsData> epicsDataList = (List<EpicsData>) request.getAttribute("EpicsDataList");
     %>
-    <h1>HPS Run <%= run %> - EPICS <%= epicsType.getTypeCode() %>s Data</h1>
+    <h1>EPICS <%= epicsType.getTypeCode() %>s Data</h1>
     <hr />
 
     <!--  

Added: webapps/trunk/run-webapp/src/main/webapp/runMain.jsp
 =============================================================================
--- webapps/trunk/run-webapp/src/main/webapp/runMain.jsp	(added)
+++ webapps/trunk/run-webapp/src/main/webapp/runMain.jsp	Wed Sep 23 06:25:58 2015
@@ -0,0 +1,19 @@
+<%@page contentType="text/html" import="org.freehep.graphicsio.raw.RawImageWriteParam"%>
+<%@page pageEncoding="UTF-8"%>
+
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+
+<%
+    Integer run = (Integer) request.getAttribute("run");
+%>
+
+<html>
+<head>
+<title>HPS Run Web - Run <%=run%></title>
+</head>
+<body>
+    <h1>Run <%=run%></h1>
+    <iframe src="runSummary?run=<%= request.getAttribute("run") %>" name="runSummaryFrame" height="100%" width="30%"></iframe>
+    <iframe src="" name="dataFrame" height="100%" width="68%"></iframe>
+</body>
+</html>

Modified: webapps/trunk/run-webapp/src/main/webapp/runScalers.jsp
 =============================================================================
--- webapps/trunk/run-webapp/src/main/webapp/runScalers.jsp	(original)
+++ webapps/trunk/run-webapp/src/main/webapp/runScalers.jsp	Wed Sep 23 06:25:58 2015
@@ -27,7 +27,7 @@
         // Get the list of EPICS data for this run.
         List<ScalerData> scalerDataList = (List<ScalerData>) request.getAttribute("ScalerDataList");
     %>
-    <h1>HPS Run <%= run %> - Scaler Data</h1>
+    <h1>Scaler Data</h1>
     <hr />
 
     <!-- scaler data table -->

Modified: webapps/trunk/run-webapp/src/main/webapp/runSummary.jsp
 =============================================================================
--- webapps/trunk/run-webapp/src/main/webapp/runSummary.jsp	(original)
+++ webapps/trunk/run-webapp/src/main/webapp/runSummary.jsp	Wed Sep 23 06:25:58 2015
@@ -1,33 +1,93 @@
-<%@ page contentType="text/html" import="java.util.*,org.hps.run.database.*,java.text.SimpleDateFormat"%>
+<%@ page contentType="text/html" import="java.util.*,org.hps.run.database.*,java.text.SimpleDateFormat,org.hps.datacat.client.*" %>
 <!DOCTYPE html>
 <html>
-<link rel="stylesheet" href="css/style.css" />
+<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" />
 <body>
-    <h1>HPS Run Summary</h1>
-    <hr />
     <%
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
         dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
-        RunSummary runSummary = (RunSummary) request.getAttribute("RunSummary"); 
+        RunSummary runSummary = (RunSummary) request.getAttribute("run_summary");
+        int run = runSummary.getRun();
+        if (runSummary == null) {
+            throw new RuntimeException("Run summary was not set in request.");
+        }
     %>
-    <p><b>run:</b> <%= runSummary.getRun() %></p>
-    <p><b>start:</b> <%= dateFormat.format(runSummary.getStartDate()) %></p>
-    <p><b>end:</b> <%= dateFormat.format(runSummary.getEndDate()) %></p>
-    <p><b>events:</b> <%= runSummary.getTotalEvents() %></p>
-    <p><b>files:</b> <%= runSummary.getTotalFiles() %></p>
-    <p><b>end okay:</b> <%= runSummary.getEndOkay() %></p>
-    <p><b>run okay:</b> <%= runSummary.getRunOkay() %></p>
-    <p><b>updated:</b> <%= dateFormat.format(runSummary.getUpdated()) %></p>
-    <p><b>created:</b> <%= dateFormat.format(runSummary.getCreated()) %></p>
-    <hr/>	
-    <p>
-        <a href="epics?run=<%= runSummary.getRun() %>&epicsBankType=<%= EpicsType.EPICS_1S %>">EPICS 1s Data</a>        
-    </p>		
-    <p>
-        <a href="epics?run=<%= runSummary.getRun() %>&epicsBankType=<%= EpicsType.EPICS_10S %>">EPICS 10s Data</a>
-    </p>
-    <p>
-        <a href="scalers?run=<%= runSummary.getRun() %>">Scaler Data</a>
-    </p>
+    <h3>Run Summary</h3>
+    <div>
+        <table class="run-summary">
+            <tr>
+                <td class="label">Run</td>
+                <td><%= runSummary.getRun() %></td>
+            </tr>
+            <tr>
+                <td class="label">Started</td>
+                <td><%= dateFormat.format(runSummary.getStartDate()) %></td>
+            </tr>
+            <tr>
+                <td class="label">Ended</td>
+                <td><%= dateFormat.format(runSummary.getEndDate()) %></td>
+            <tr>
+            <tr>
+                <td class="label">Event Count</td>
+                <td><%= runSummary.getTotalEvents() %></td>
+            </tr>
+            <tr>
+                <td class="label">File Count</td>
+                <td><%= runSummary.getTotalFiles() %></td>
+            </tr>
+            <tr>
+                <td class="label">End Okay</td>
+                <td><%= runSummary.getEndOkay() %></td>
+            </tr>
+            <tr>
+                <td class="label">Run Okay</td>
+                <td><%= runSummary.getRunOkay() %></td>
+            </tr>
+            <tr>
+                <td class="label">Updated</td>
+                <td><%= dateFormat.format(runSummary.getUpdated()) %></td>
+            </tr>
+            <tr>
+                <td class="label">Created</td>
+                <td><%= dateFormat.format(runSummary.getCreated()) %></td>
+            </tr>                        
+        </table>
+    </div>
+    <h3>Data</h3>
+    <div>                 
+        <p>
+            <a target="dataFrame" href="epics?run=<%= runSummary.getRun() %>&epicsBankType=<%= EpicsType.EPICS_1S %>">EPICS 1s Data</a>
+        </p>
+        <p>
+            <a target="dataFrame" href="epics?run=<%= runSummary.getRun() %>&epicsBankType=<%= EpicsType.EPICS_10S %>">EPICS 10s Data</a>
+        </p>
+        <p>
+            <a target="dataFrame" href="scalers?run=<%= runSummary.getRun() %>">Scaler Data</a>
+        </p>
+    </div>
+    
+    
+    <!--
+        example search URL
+        http://localhost:8080/datacat-v0.4-SNAPSHOT/display/datasets/HPS/data/raw?offset=0&max=999999&sort=dataType&filter=dataType%20eq%20%27RAW%27%20and%20runMin%20eq%205772
+    -->
+    
+    <h3>Files</h3>
+    <div>
+        <% String datacatRootUrl = "http://localhost:8080/datacat-v0.4-SNAPSHOT/display/datasets/"; %>
+        <p>
+            <a target="dataFrame" href="<%= datacatRootUrl + "HPS/data/raw?offset=0&max=999999&sort=name&filter=dataType eq 'RAW' and runMin eq " + run %>">EVIO / RAW</a>
+        </p>
+    </div>
+    
+    <h3>Data Quality Plots</h3>
+    <div>
+        <% 
+            String plotsUrl = "http://localhost:8080/data-quality/"; 
+            DatacatClient datacatClient = new DatacatClientFactory().createClient();            
+            List<Dataset> dqmDatasets = datacatClient.findDatasets("dqm", "dataType == 'DQM' and runMin == " + run, new HashSet<String>());
+        %>
+        <p>found <%= dqmDatasets.size() %> DQM datasets</p>
+    </div>
 </body>
 </html>