diff --git a/apps/routerconsole/jsp/default.css b/apps/routerconsole/jsp/default.css index 527a7c9bea4a947a9655e516fd0d696381c7e47d..9b1db4cdb23689cdfe5e655b98f778fe8e5bdd08 100644 --- a/apps/routerconsole/jsp/default.css +++ b/apps/routerconsole/jsp/default.css @@ -1,3 +1,9 @@ +/*** +html { + font-size: 14px; +} +***/ + body { font-family: Verdana, Tahoma, Helvetica, sans-serif; margin: 1em 0em; @@ -5,6 +11,7 @@ body { text-align: center; background-color: white; color: black; + font-size: 100%; } .hide { @@ -30,23 +37,24 @@ div.toolbar { font-weight: bold; } -div.routersummary { - /* width: 8em; */ - /* height: 5em; */ - /* position: fixed; */ +div.routersummaryouter { float: left; - width: 200px; - /* left: 1em; */ - /* top: 1em; */ + width: 215px; + margin: 0; + padding: 0; + border: 0; + clear: left; /* fixes a bug in Opera */ + overflow: auto; +} + +div.routersummary { + background-color: #fafaff; + width: 195px; + color: inherit; margin: 0em; - padding: .5em; + padding: 5px; text-align: left; border: medium solid #efefff; - background-color: #fafaff; - color: inherit; - font-size: small; - clear: left; /* fixes a bug in Opera */ - overflow: auto; } div.warning { @@ -67,6 +75,10 @@ div.main { color: inherit; } +div.main textarea { + width: 100%; +} + div.news { margin: 0em 1em 1em 224px; padding: .5em 1em; diff --git a/apps/routerconsole/jsp/summary.jsp b/apps/routerconsole/jsp/summary.jsp index c3b7f8a74cb322187bb26b4109857852e49ba3cd..46bbd0ee4a74dab799a48b6f203088d5cc1cf739 100644 --- a/apps/routerconsole/jsp/summary.jsp +++ b/apps/routerconsole/jsp/summary.jsp @@ -1,102 +1,30 @@ -<%@page import="net.i2p.router.web.SummaryHelper" %> -<jsp:useBean class="net.i2p.router.web.SummaryHelper" id="helper" scope="request" /> -<jsp:setProperty name="helper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> - -<jsp:useBean class="net.i2p.router.web.ReseedHandler" id="reseed" scope="request" /> -<jsp:setProperty name="reseed" property="*" /> -<jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" /> -<jsp:setProperty name="update" property="*" /> -<jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> -<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="uhelper" scope="request" /> -<jsp:setProperty name="uhelper" property="*" /> -<jsp:setProperty name="uhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> - +<% // put width here too to prevent bad layout at startup %> +<div class="routersummaryouter" style="width: 215px;"> +<% + // skip the iframe if refresh disabled + String d = request.getParameter("refresh"); + String newDelay = ""; + if (d == null || "".equals(d)) + d = System.getProperty("routerconsole.summaryRefresh"); + else + // pass the new delay parameter to the iframe + newDelay = "?refresh=" + d; + if (!"0".equals(d)) + out.print("<iframe src=\"summaryframe.jsp" + newDelay + "\" height=\"1000\" width=\"100%\" scrolling=\"auto\" frameborder=\"0\" allowtransparency=\"true\">\n"); +%> <div class="routersummary"> - <center><b><a href="config.jsp">Configuration</a> <a href="help.jsp">Help</a></b></center> - <hr /> - - <u><b>General</b></u><br /> - <b>Ident:</b> (<a title="Your router identity is <jsp:getProperty name="helper" property="ident" />, never reveal it to anyone" href="netdb.jsp?r=.">view</a>)<br /> - <b>Version:</b> <jsp:getProperty name="helper" property="version" /><br /> - <b>Uptime:</b> <jsp:getProperty name="helper" property="uptime" /><br /> - <b>Now:</b> <jsp:getProperty name="helper" property="time" /><br /> - <b>Reachability:</b> <a href="config.jsp#help"><jsp:getProperty name="helper" property="reachability" /></a><% - if (helper.updateAvailable()) { - // display all the time so we display the final failure message - out.print("<br />" + update.getStatus()); - if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { - } else if(!update.isDone()) { - long nonce = new java.util.Random().nextLong(); - String prev = System.getProperty("net.i2p.router.web.UpdateHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.UpdateHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.UpdateHandler.nonce", nonce+""); - String uri = request.getRequestURI(); - out.print("<p><form action=\"" + uri + "\" method=\"GET\">\n"); - out.print("<input type=\"hidden\" name=\"updateNonce\" value=\"" + nonce + "\" >\n"); - out.print("<input type=\"submit\" value=\"Download " + uhelper.getUpdateVersion() + " Update\" ></form></p>\n"); - } +<%@include file="summarynoframe.jsp" %> +<% + // d defined above + if (!"0".equals(d)) { + out.print("</div></iframe>\n"); + } else { + // since we don't have an iframe this will reload the base page, and + // the new delay will be passed to the iframe above + out.print("<hr /><p><form action=\"" + request.getRequestURI() + "\" method=\"GET\">\n"); + out.print("<b>Refresh (s):</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n"); + out.print("<button type=\"submit\">Enable</button>\n"); + out.print("</form></p></div>\n"); } - %> - <p> - <%=net.i2p.router.web.ConfigRestartBean.renderStatus(request.getRequestURI(), request.getParameter("action"), request.getParameter("consoleNonce"))%> - </p> - <hr /> - - <u><b><a href="peers.jsp">Peers</a></b></u><br /> - <b>Active:</b> <jsp:getProperty name="helper" property="activePeers" />/<jsp:getProperty name="helper" property="activeProfiles" /><br /> - <b>Fast:</b> <jsp:getProperty name="helper" property="fastPeers" /><br /> - <b>High capacity:</b> <jsp:getProperty name="helper" property="highCapacityPeers" /><br /> - <b>Well integrated:</b> <jsp:getProperty name="helper" property="wellIntegratedPeers" /><br /> - <b>Known:</b> <jsp:getProperty name="helper" property="allPeers" /><br /><% - if (helper.getActivePeers() <= 0) { - %><b><a href="config.jsp">check your NAT/firewall</a></b><br /><% - } - // If showing the reseed link is allowed - if (helper.allowReseed()) { - if ("true".equals(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress", "false"))) { - // While reseed occurring, show status message instead - out.print("<i>" + System.getProperty("net.i2p.router.web.ReseedHandler.statusMessage","") + "</i><br />"); - } else { - // While no reseed occurring, show reseed link - long nonce = new java.util.Random().nextLong(); - String prev = System.getProperty("net.i2p.router.web.ReseedHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ReseedHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ReseedHandler.nonce", nonce+""); - String uri = request.getRequestURI(); - out.print("<p><form action=\"" + uri + "\" method=\"GET\">\n"); - out.print("<input type=\"hidden\" name=\"reseedNonce\" value=\"" + nonce + "\" >\n"); - out.print("<button type=\"submit\" >Reseed</button></form></p>\n"); - } - } - // If a new reseed ain't running, and the last reseed had errors, show error message - if ("false".equals(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress", "false"))) { - String reseedErrorMessage = System.getProperty("net.i2p.router.web.ReseedHandler.errorMessage",""); - if (reseedErrorMessage.length() > 0) { - out.print("<i>" + reseedErrorMessage + "</i><br />"); - } - } - %><hr /> - - <u><b><a href="config.jsp" title="Configure the bandwidth limits">Bandwidth in/out</a></b></u><br /> - <b>1s:</b> <jsp:getProperty name="helper" property="inboundSecondKBps" />/<jsp:getProperty name="helper" property="outboundSecondKBps" />KBps<br /> - <b>5m:</b> <jsp:getProperty name="helper" property="inboundFiveMinuteKBps" />/<jsp:getProperty name="helper" property="outboundFiveMinuteKBps" />KBps<br /> - <b>Total:</b> <jsp:getProperty name="helper" property="inboundLifetimeKBps" />/<jsp:getProperty name="helper" property="outboundLifetimeKBps" />KBps<br /> - <b>Used:</b> <jsp:getProperty name="helper" property="inboundTransferred" />/<jsp:getProperty name="helper" property="outboundTransferred" /><br /> - <hr /> - - <jsp:getProperty name="helper" property="destinations" /> - - <u><b>Tunnels in/out</b></u><br /> - <b>Exploratory:</b> <jsp:getProperty name="helper" property="inboundTunnels" />/<jsp:getProperty name="helper" property="outboundTunnels" /><br /> - <b>Client:</b> <jsp:getProperty name="helper" property="inboundClientTunnels" />/<jsp:getProperty name="helper" property="outboundClientTunnels" /><br /> - <b>Participating:</b> <jsp:getProperty name="helper" property="participatingTunnels" /><br /> - <hr /> - - <u><b>Congestion</b></u><br /> - <b>Job lag:</b> <jsp:getProperty name="helper" property="jobLag" /><br /> - <b>Message delay:</b> <jsp:getProperty name="helper" property="messageDelay" /><br /> - <b>Tunnel lag:</b> <jsp:getProperty name="helper" property="tunnelLag" /><br /> - <b>Handle backlog:</b> <jsp:getProperty name="helper" property="inboundBacklog" /><br /> - <b><jsp:getProperty name="helper" property="tunnelStatus" /></b><br /> - +%> </div> diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp new file mode 100644 index 0000000000000000000000000000000000000000..627fe328c8ad5888d96c3bf464b029f1ca443680 --- /dev/null +++ b/apps/routerconsole/jsp/summaryframe.jsp @@ -0,0 +1,68 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<% +/* + * All links in the summary bar must have target="_top" + * so they don't load in the iframe + */ +%> + +<html><head> +<title>Summary Bar</title> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<% + // try hard to avoid an error page in the iframe after shutdown + String action = request.getParameter("action"); + String d = request.getParameter("refresh"); + boolean shutdownSoon = "shutdownImmediate".equals(action) || "restartImmediate".equals(action); + if (!shutdownSoon) { + if (d == null || "".equals(d)) { + d = System.getProperty("routerconsole.summaryRefresh"); + if (d == null || "".equals(d)) + d = "60"; + } else { + System.setProperty("routerconsole.summaryRefresh", d); + } + // we probably don't get here if d == "0" since caught in summary.jsp, but just + // to be sure... + if (!"0".equals(d)) { + // doesn't work for restart or shutdown with no expl. tunnels, + // since the call to ConfigRestartBean.renderStatus() hasn't happened yet... + long timeleft = net.i2p.router.web.ConfigRestartBean.getRestartTimeRemaining(); + long delay = 60; + try { delay = Long.parseLong(d); } catch (NumberFormatException nfe) {} + if (delay*1000 < timeleft + 5000) + out.print("<meta http-equiv=\"refresh\" content=\"" + d + "\" />\n"); + else + shutdownSoon = true; + } + } +%> +<link rel="stylesheet" href="default.css" type="text/css" /> +</head> + +<body style="margin: 0;"> + +<div class="routersummary"> +<%@include file="summarynoframe.jsp" %> +<% + // d and shutdownSoon defined above + if (!shutdownSoon) { + out.print("<hr /><p><form action=\"summaryframe.jsp\" method=\"GET\">\n"); + if ("0".equals(d)) { + out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n"); + out.print("<button type=\"submit\">Enable</button>\n"); + } else { + // this will load in the iframe but subsequent pages will not have the iframe + out.print("<input type=\"hidden\" name=\"refresh\" value=\"0\" />\n"); + out.print("<button type=\"submit\">Disable " + d + "s Refresh</button>\n"); + } + out.print("</form></p>\n"); + } +%> +</div> + +</body> +</html> diff --git a/apps/routerconsole/jsp/summarynoframe.jsp b/apps/routerconsole/jsp/summarynoframe.jsp new file mode 100644 index 0000000000000000000000000000000000000000..f3f8b800246fa7f02d8dede10c92cba8dbd92708 --- /dev/null +++ b/apps/routerconsole/jsp/summarynoframe.jsp @@ -0,0 +1,100 @@ +<%@page import="net.i2p.router.web.SummaryHelper" %> +<jsp:useBean class="net.i2p.router.web.SummaryHelper" id="helper" scope="request" /> +<jsp:setProperty name="helper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> + +<jsp:useBean class="net.i2p.router.web.ReseedHandler" id="reseed" scope="request" /> +<jsp:setProperty name="reseed" property="*" /> +<jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" /> +<jsp:setProperty name="update" property="*" /> +<jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> +<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="uhelper" scope="request" /> +<jsp:setProperty name="uhelper" property="*" /> +<jsp:setProperty name="uhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> + + <center><b><a href="config.jsp" target="_top">Configuration</a> <a href="help.jsp" target="_top">Help</a></b></center> + <hr /> + + <u><b>General</b></u><br /> + <b>Ident:</b> (<a title="Your router identity is <jsp:getProperty name="helper" property="ident" />, never reveal it to anyone" href="netdb.jsp?r=." target="_top">view</a>)<br /> + <b>Version:</b> <jsp:getProperty name="helper" property="version" /><br /> + <b>Uptime:</b> <jsp:getProperty name="helper" property="uptime" /><br /> + <b>Now:</b> <jsp:getProperty name="helper" property="time" /><br /> + <b>Reachability:</b> <a href="config.jsp#help" target="_top"><jsp:getProperty name="helper" property="reachability" /></a><% + if (helper.updateAvailable()) { + // display all the time so we display the final failure message + out.print("<br />" + update.getStatus()); + if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { + } else if(!update.isDone()) { + long nonce = new java.util.Random().nextLong(); + String prev = System.getProperty("net.i2p.router.web.UpdateHandler.nonce"); + if (prev != null) System.setProperty("net.i2p.router.web.UpdateHandler.noncePrev", prev); + System.setProperty("net.i2p.router.web.UpdateHandler.nonce", nonce+""); + String uri = request.getRequestURI(); + out.print("<p><form action=\"" + uri + "\" method=\"GET\">\n"); + out.print("<input type=\"hidden\" name=\"updateNonce\" value=\"" + nonce + "\" />\n"); + out.print("<input type=\"submit\" value=\"Download " + uhelper.getUpdateVersion() + " Update\" /></form></p>\n"); + } + } + %> + <p> + <%=net.i2p.router.web.ConfigRestartBean.renderStatus(request.getRequestURI(), request.getParameter("action"), request.getParameter("consoleNonce"))%> + </p> + <hr /> + + <u><b><a href="peers.jsp" target="_top">Peers</a></b></u><br /> + <b>Active:</b> <jsp:getProperty name="helper" property="activePeers" />/<jsp:getProperty name="helper" property="activeProfiles" /><br /> + <b>Fast:</b> <jsp:getProperty name="helper" property="fastPeers" /><br /> + <b>High capacity:</b> <jsp:getProperty name="helper" property="highCapacityPeers" /><br /> + <b>Well integrated:</b> <jsp:getProperty name="helper" property="wellIntegratedPeers" /><br /> + <b>Known:</b> <jsp:getProperty name="helper" property="allPeers" /><br /><% + if (helper.getActivePeers() <= 0) { + %><b><a href="config.jsp" target="_top">check your NAT/firewall</a></b><br /><% + } + // If showing the reseed link is allowed + if (helper.allowReseed()) { + if ("true".equals(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress", "false"))) { + // While reseed occurring, show status message instead + out.print("<i>" + System.getProperty("net.i2p.router.web.ReseedHandler.statusMessage","") + "</i><br />"); + } else { + // While no reseed occurring, show reseed link + long nonce = new java.util.Random().nextLong(); + String prev = System.getProperty("net.i2p.router.web.ReseedHandler.nonce"); + if (prev != null) System.setProperty("net.i2p.router.web.ReseedHandler.noncePrev", prev); + System.setProperty("net.i2p.router.web.ReseedHandler.nonce", nonce+""); + String uri = request.getRequestURI(); + out.print("<p><form action=\"" + uri + "\" method=\"GET\">\n"); + out.print("<input type=\"hidden\" name=\"reseedNonce\" value=\"" + nonce + "\" />\n"); + out.print("<button type=\"submit\" >Reseed</button></form></p>\n"); + } + } + // If a new reseed ain't running, and the last reseed had errors, show error message + if ("false".equals(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress", "false"))) { + String reseedErrorMessage = System.getProperty("net.i2p.router.web.ReseedHandler.errorMessage",""); + if (reseedErrorMessage.length() > 0) { + out.print("<i>" + reseedErrorMessage + "</i><br />"); + } + } + %><hr /> + + <u><b><a href="config.jsp" title="Configure the bandwidth limits" target="_top">Bandwidth in/out</a></b></u><br /> + <b>1s:</b> <jsp:getProperty name="helper" property="inboundSecondKBps" />/<jsp:getProperty name="helper" property="outboundSecondKBps" />KBps<br /> + <b>5m:</b> <jsp:getProperty name="helper" property="inboundFiveMinuteKBps" />/<jsp:getProperty name="helper" property="outboundFiveMinuteKBps" />KBps<br /> + <b>Total:</b> <jsp:getProperty name="helper" property="inboundLifetimeKBps" />/<jsp:getProperty name="helper" property="outboundLifetimeKBps" />KBps<br /> + <b>Used:</b> <jsp:getProperty name="helper" property="inboundTransferred" />/<jsp:getProperty name="helper" property="outboundTransferred" /><br /> + <hr /> + + <jsp:getProperty name="helper" property="destinations" /> + + <u><b>Tunnels in/out</b></u><br /> + <b>Exploratory:</b> <jsp:getProperty name="helper" property="inboundTunnels" />/<jsp:getProperty name="helper" property="outboundTunnels" /><br /> + <b>Client:</b> <jsp:getProperty name="helper" property="inboundClientTunnels" />/<jsp:getProperty name="helper" property="outboundClientTunnels" /><br /> + <b>Participating:</b> <jsp:getProperty name="helper" property="participatingTunnels" /><br /> + <hr /> + + <u><b>Congestion</b></u><br /> + <b>Job lag:</b> <jsp:getProperty name="helper" property="jobLag" /><br /> + <b>Message delay:</b> <jsp:getProperty name="helper" property="messageDelay" /><br /> + <b>Tunnel lag:</b> <jsp:getProperty name="helper" property="tunnelLag" /><br /> + <b>Handle backlog:</b> <jsp:getProperty name="helper" property="inboundBacklog" /><br /> + <b><jsp:getProperty name="helper" property="tunnelStatus" /></b><br /> +