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>