propagate from branch 'i2p.i2p.zzz.test2' (head 91f7c17a08ea873ff7bb40835a43ba857ee7fe46)
to branch 'i2p.i2p' (head 3d86e500d1550fccc2ac29371555a1a5af2c5c2b)
This commit is contained in:
@ -15,7 +15,7 @@ public class ConfigClientsHelper extends HelperBase {
|
|||||||
public String getForm1() {
|
public String getForm1() {
|
||||||
StringBuffer buf = new StringBuffer(1024);
|
StringBuffer buf = new StringBuffer(1024);
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td>Client</td><td>Run at Startup?</td><td>Start Now</td><td>Class and arguments</td></tr>\n");
|
buf.append("<tr><th>Client</th><th>Run at Startup?</th><th>Start Now</th><th>Class and arguments</th></tr>\n");
|
||||||
|
|
||||||
List clients = ClientAppConfig.getClientApps(_context);
|
List clients = ClientAppConfig.getClientApps(_context);
|
||||||
for (int cur = 0; cur < clients.size(); cur++) {
|
for (int cur = 0; cur < clients.size(); cur++) {
|
||||||
@ -31,7 +31,7 @@ public class ConfigClientsHelper extends HelperBase {
|
|||||||
public String getForm2() {
|
public String getForm2() {
|
||||||
StringBuffer buf = new StringBuffer(1024);
|
StringBuffer buf = new StringBuffer(1024);
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td>WebApp</td><td>Run at Startup?</td><td>Start Now</td><td>Description</td></tr>\n");
|
buf.append("<tr><th>WebApp</th><th>Run at Startup?</th><th>Start Now</th><th>Description</th></tr>\n");
|
||||||
Properties props = RouterConsoleRunner.webAppProperties();
|
Properties props = RouterConsoleRunner.webAppProperties();
|
||||||
Set keys = new TreeSet(props.keySet());
|
Set keys = new TreeSet(props.keySet());
|
||||||
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
||||||
|
@ -56,27 +56,27 @@ public class ConfigTunnelsHelper extends HelperBase {
|
|||||||
private static final int MIN_NEG_VARIANCE = -1;
|
private static final int MIN_NEG_VARIANCE = -1;
|
||||||
private void renderForm(StringBuffer buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) {
|
private void renderForm(StringBuffer buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) {
|
||||||
|
|
||||||
buf.append("<tr><td colspan=\"3\"><b><a name=\"").append(prefix).append("\">");
|
buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">");
|
||||||
buf.append(name).append("</a></b></td></tr>\n");
|
buf.append(name).append("</a></th></tr>\n");
|
||||||
if (in.getLength() <= 0 ||
|
if (in.getLength() <= 0 ||
|
||||||
in.getLength() + in.getLengthVariance() <= 0 ||
|
in.getLength() + in.getLengthVariance() <= 0 ||
|
||||||
out.getLength() <= 0 ||
|
out.getLength() <= 0 ||
|
||||||
out.getLength() + out.getLengthVariance() <= 0)
|
out.getLength() + out.getLengthVariance() <= 0)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels</font></th></tr>");
|
||||||
else if (in.getLength() <= 1 ||
|
else if (in.getLength() <= 1 ||
|
||||||
in.getLength() + in.getLengthVariance() <= 1 ||
|
in.getLength() + in.getLengthVariance() <= 1 ||
|
||||||
out.getLength() <= 1 ||
|
out.getLength() <= 1 ||
|
||||||
out.getLength() + out.getLengthVariance() <= 1)
|
out.getLength() + out.getLengthVariance() <= 1)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels</font></th></tr>");
|
||||||
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
|
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
|
||||||
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
|
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels</font></th></tr>");
|
||||||
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
|
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
|
||||||
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
|
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities</font></th></tr>");
|
||||||
|
|
||||||
|
|
||||||
buf.append("<tr><td></td><td><b>Inbound</b></td><td><b>Outbound</b></td></tr>\n");
|
buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
|
||||||
|
|
||||||
// tunnel depth
|
// tunnel depth
|
||||||
buf.append("<tr><td>Depth</td>\n");
|
buf.append("<tr><td>Depth</td>\n");
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<title>I2P Router Console - home</title>
|
<title>I2P Router Console - home</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<%@include file="css.jsp" %>
|
<%@include file="css.jsp" %>
|
||||||
<link rel="shortcut icon" href="favicon.ico" />
|
<link rel="shortcut icon" href="/themes/console/images/favicon.ico" />
|
||||||
</head><body>
|
</head><body>
|
||||||
<%
|
<%
|
||||||
if (System.getProperty("router.consoleNonce") == null) {
|
if (System.getProperty("router.consoleNonce") == null) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<%@page import="java.io.File" %>
|
<%@page import="java.io.File" %>
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<a href="index.jsp"><img src="i2plogo.png" alt="Router Console" width="187" height="35" /></a><br />
|
<a href="index.jsp"><img src="/themes/console/images/i2plogo.png" alt="Router Console" width="187" height="35" /></a><br />
|
||||||
</div>
|
</div>
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
<% if (new File("docs/toolbar.html").exists()) { %>
|
<% if (new File("docs/toolbar.html").exists()) { %>
|
||||||
|
@ -14,7 +14,9 @@ if (uri.endsWith(".css")) {
|
|||||||
response.setContentType("image/gif");
|
response.setContentType("image/gif");
|
||||||
} else if (uri.endsWith(".jpg")) {
|
} else if (uri.endsWith(".jpg")) {
|
||||||
response.setContentType("image/jpeg");
|
response.setContentType("image/jpeg");
|
||||||
|
} else if (uri.endsWith(".ico")) {
|
||||||
|
response.setContentType("image/x-icon");
|
||||||
}
|
}
|
||||||
|
response.setHeader("Cache-Control", "max-age=86400"); // cache for a day
|
||||||
net.i2p.util.FileUtil.readFile(uri, "./docs", response.getOutputStream());
|
net.i2p.util.FileUtil.readFile(uri, "./docs", response.getOutputStream());
|
||||||
%>
|
%>
|
25
build.xml
25
build.xml
@ -297,9 +297,6 @@
|
|||||||
<copy todir="pkg-temp/docs/themes/" >
|
<copy todir="pkg-temp/docs/themes/" >
|
||||||
<fileset dir="installer/resources/themes/" />
|
<fileset dir="installer/resources/themes/" />
|
||||||
</copy>
|
</copy>
|
||||||
<!-- CSS now in docs/, not in the .war -->
|
|
||||||
<copy file="apps/routerconsole/jsp/default.css" tofile="pkg-temp/docs/themes/console/console.css" />
|
|
||||||
<copy file="apps/routerconsole/jsp/default.css" tofile="pkg-temp/docs/themes/console/defCon1/console.css" />
|
|
||||||
<mkdir dir="pkg-temp/eepsite" />
|
<mkdir dir="pkg-temp/eepsite" />
|
||||||
<mkdir dir="pkg-temp/eepsite/webapps" />
|
<mkdir dir="pkg-temp/eepsite/webapps" />
|
||||||
<mkdir dir="pkg-temp/eepsite/logs" />
|
<mkdir dir="pkg-temp/eepsite/logs" />
|
||||||
@ -319,6 +316,23 @@
|
|||||||
<copy file="installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-JGoodies-Looks.txt" />
|
<copy file="installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-JGoodies-Looks.txt" />
|
||||||
<copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
|
<copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
|
||||||
</target>
|
</target>
|
||||||
|
<target name="prepthemeupdates">
|
||||||
|
<!-- CSS now in docs/, not in the .war -->
|
||||||
|
<copy file="installer/resources/themes/console/console.css" todir="pkg-temp/docs/themes/console/" />
|
||||||
|
<copy file="installer/resources/themes/console/defCon1/console.css" todir="pkg-temp/docs/themes/console/defCon1/" />
|
||||||
|
<!-- these files now in docs/, not in the .war -->
|
||||||
|
<copy file="installer/resources/themes/console/images/favicon.ico" todir="pkg-temp/docs/themes/console/images/" />
|
||||||
|
<copy file="installer/resources/themes/console/images/i2plogo.png" todir="pkg-temp/docs/themes/console/images/" />
|
||||||
|
<!-- Since the logo moved, we have to update the error pages -->
|
||||||
|
<copy todir="pkg-temp/docs/" >
|
||||||
|
<fileset dir="installer/resources/" includes="*-header.ht" />
|
||||||
|
</copy>
|
||||||
|
<!-- make a "classic" theme -->
|
||||||
|
<copy todir="pkg-temp/docs/themes/console/classic/" >
|
||||||
|
<fileset dir="installer/resources/themes/console/classic/" />
|
||||||
|
</copy>
|
||||||
|
</target>
|
||||||
|
|
||||||
<!-- this is no longer required, izpack 4.3.0 supports headless installs with java -jar i2pinstall.exe -console -->
|
<!-- this is no longer required, izpack 4.3.0 supports headless installs with java -jar i2pinstall.exe -console -->
|
||||||
<target name="tarball" depends="preppkg">
|
<target name="tarball" depends="preppkg">
|
||||||
<tar compression="bzip2" destfile="i2p.tar.bz2">
|
<tar compression="bzip2" destfile="i2p.tar.bz2">
|
||||||
@ -364,7 +378,7 @@
|
|||||||
<copy file="history.txt" todir="pkg-temp/" />
|
<copy file="history.txt" todir="pkg-temp/" />
|
||||||
<copy file="news.xml" todir="pkg-temp/docs/" />
|
<copy file="news.xml" todir="pkg-temp/docs/" />
|
||||||
</target>
|
</target>
|
||||||
<target name="prepupdateSmall" depends="buildSmall, prepupdateRouter">
|
<target name="prepupdateSmall" depends="buildSmall, prepupdateRouter, prepthemeupdates">
|
||||||
<copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
|
<copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
|
||||||
<copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
|
<copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
|
||||||
<copy file="build/streaming.jar" todir="pkg-temp/lib/" />
|
<copy file="build/streaming.jar" todir="pkg-temp/lib/" />
|
||||||
@ -374,9 +388,6 @@
|
|||||||
<copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
|
<copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
|
||||||
<!-- New readme_*.html files - For one release only -->
|
<!-- New readme_*.html files - For one release only -->
|
||||||
<copy file="readme_zh.html" todir="pkg-temp/docs/" />
|
<copy file="readme_zh.html" todir="pkg-temp/docs/" />
|
||||||
<!-- CSS now in docs/, not in the .war -->
|
|
||||||
<copy file="apps/routerconsole/jsp/default.css" tofile="pkg-temp/docs/themes/console/console.css" />
|
|
||||||
<copy file="apps/routerconsole/jsp/default.css" tofile="pkg-temp/docs/themes/console/defCon1/console.css" />
|
|
||||||
</target>
|
</target>
|
||||||
<target name="prepupdateRouter" depends="buildrouter, deletepkg-temp">
|
<target name="prepupdateRouter" depends="buildrouter, deletepkg-temp">
|
||||||
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />
|
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB |
182
installer/resources/themes/console/classic/default.css
Normal file
182
installer/resources/themes/console/classic/default.css
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
body {
|
||||||
|
margin : 0px;
|
||||||
|
padding : 0px;
|
||||||
|
text-align : center;
|
||||||
|
font-family : Arial, Helvetica, sans-serif;
|
||||||
|
background-color : #ffffff;
|
||||||
|
color : #000000;
|
||||||
|
font-size : 100%;
|
||||||
|
|
||||||
|
/* we've avoided Tantek Hacks so far,
|
||||||
|
** but we can't avoid using the non-w3c method of
|
||||||
|
** box rendering. (and therefore one of mozilla's
|
||||||
|
** proprietry -moz properties (which hopefully they'll
|
||||||
|
** drop soon).
|
||||||
|
*/
|
||||||
|
-moz-box-sizing : border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
-moz-box-sizing : border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4, label {
|
||||||
|
margin : 0px;
|
||||||
|
padding : 2px;
|
||||||
|
float : left;
|
||||||
|
width : 150px;
|
||||||
|
height : 24px;
|
||||||
|
font-weight : bold;
|
||||||
|
text-align : right;
|
||||||
|
font-size : 1.0em;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size : 1.2em;
|
||||||
|
text-align : center;
|
||||||
|
width : 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
margin : 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea, input, select, button, a {
|
||||||
|
font-family : Arial, Helvetica, sans-serif;
|
||||||
|
-moz-box-sizing : border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
font-size : 1.0em;
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
float : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
border : 1px solid #ddddc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
br {
|
||||||
|
clear : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.statusNotRunning {
|
||||||
|
float : left;
|
||||||
|
width : 82px;
|
||||||
|
height : 24px;
|
||||||
|
color : #dd0000;
|
||||||
|
}
|
||||||
|
div.statusRunning {
|
||||||
|
float : left;
|
||||||
|
width : 82px;
|
||||||
|
height : 24px;
|
||||||
|
color : #00dd00;
|
||||||
|
}
|
||||||
|
div.statusStarting {
|
||||||
|
float : left;
|
||||||
|
width : 82px;
|
||||||
|
height : 24px;
|
||||||
|
color : #339933;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
display : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator, .subdivider {
|
||||||
|
clear : both;
|
||||||
|
height : 1px;
|
||||||
|
margin : 3px 0px 3px 0px;
|
||||||
|
border-bottom : 1px solid #ddddc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subdivider {
|
||||||
|
border-bottom : 1px dashed #ddddc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.freetext {
|
||||||
|
width : 150px;
|
||||||
|
height : 22px;
|
||||||
|
border : 1px solid #aaaac0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control {
|
||||||
|
margin : 0 4px 0 0;
|
||||||
|
padding : 0 0 4px 0;
|
||||||
|
overflow : hidden;
|
||||||
|
height : 20px;
|
||||||
|
width : 60px;
|
||||||
|
font-weight : normal;
|
||||||
|
background-color : #dddddd;
|
||||||
|
color : black;
|
||||||
|
border : 1px outset #ddddc0;
|
||||||
|
text-align : center;
|
||||||
|
white-space : nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control:hover {
|
||||||
|
background-color : #ffffed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control:active {
|
||||||
|
border : 2px inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
width : 760px;
|
||||||
|
margin : 16px auto 16px auto;
|
||||||
|
overflow : hidden;
|
||||||
|
text-align : left;
|
||||||
|
font-size : 0.8em;
|
||||||
|
background-color : #ffffef;
|
||||||
|
border : 4px solid #ffffd0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel .footer {
|
||||||
|
float : right;
|
||||||
|
padding : 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbox {
|
||||||
|
float : right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rowItem {
|
||||||
|
width : 750px;
|
||||||
|
float : left;
|
||||||
|
margin : 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment {
|
||||||
|
font-style : italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
height : 24px;
|
||||||
|
width : 150px;
|
||||||
|
padding : 2px 0 0 2px;
|
||||||
|
float : left;
|
||||||
|
margin : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.accessKey {
|
||||||
|
text-decoration : underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#globalOperationsPanel {
|
||||||
|
background-color : #ffefef;
|
||||||
|
border : 4px solid #ffd0d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#globalOperationsPanel .control {
|
||||||
|
width : 100px;
|
||||||
|
}
|
178
installer/resources/themes/console/classic/i2ptunnel.css
Normal file
178
installer/resources/themes/console/classic/i2ptunnel.css
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
/* I2P Tunnel Edit Page
|
||||||
|
*/
|
||||||
|
|
||||||
|
#tunnelEditPage input {
|
||||||
|
width : 458px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage select {
|
||||||
|
width : 308px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage option[selected] {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #targetField,
|
||||||
|
#tunnelEditPage #accessField,
|
||||||
|
#tunnelEditPage #optionsField {
|
||||||
|
height : 48px;
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
#tunnelEditPage #tunnelOptionsField {
|
||||||
|
height : 96px;
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #targetField label,
|
||||||
|
#tunnelEditPage #accessField label,
|
||||||
|
#tunnelEditPage #tunnelOptionsField label,
|
||||||
|
#tunnelEditPage #optionsField label{
|
||||||
|
height : 48px;
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #reachField,
|
||||||
|
#tunnelEditPage #hostField,
|
||||||
|
#tunnelEditPage #depthField,
|
||||||
|
#tunnelEditPage #countField,
|
||||||
|
#tunnelEditPage #optionsHostField {
|
||||||
|
width : 304px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #portField,
|
||||||
|
#tunnelEditPage #optionsPortField,
|
||||||
|
#tunnelEditPage #backupField,
|
||||||
|
#tunnelEditPage #varianceField {
|
||||||
|
width : 150px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #reachField label,
|
||||||
|
#tunnelEditPage #hostField label,
|
||||||
|
#tunnelEditPage #portField label,
|
||||||
|
#tunnelEditPage #optionsHostField label,
|
||||||
|
#tunnelEditPage #optionsPortField label,
|
||||||
|
#tunnelEditPage #depthField label,
|
||||||
|
#tunnelEditPage #countField label,
|
||||||
|
#tunnelEditPage #backupField label,
|
||||||
|
#tunnelEditPage #varianceField label {
|
||||||
|
text-align : left;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #otherField label {
|
||||||
|
width : 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #reachableByOther,
|
||||||
|
#tunnelEditPage #tunnelDepth,
|
||||||
|
#tunnelEditPage #tunnelQuantity,
|
||||||
|
#tunnelEditPage #targetHost,
|
||||||
|
#tunnelEditPage #clientHost {
|
||||||
|
width : 306px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #port {
|
||||||
|
width : 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #targetPort,
|
||||||
|
#tunnelEditPage #clientPort,
|
||||||
|
#tunnelEditPage #tunnelBackupQuantity,
|
||||||
|
#tunnelEditPage #tunnelVariance {
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #shared,
|
||||||
|
#tunnelEditPage #connectDelay,
|
||||||
|
#tunnelEditPage #startOnLoad {
|
||||||
|
width : 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage label {
|
||||||
|
width : 150px;
|
||||||
|
font-weight : bold;
|
||||||
|
text-align : right;
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* I2P Tunnel List Page
|
||||||
|
*/
|
||||||
|
|
||||||
|
#tunnelListPage .rowItem {
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage select {
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage textarea {
|
||||||
|
width : 750px;
|
||||||
|
height : 100px;
|
||||||
|
padding : 0 0 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .footer .control {
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .footer label {
|
||||||
|
text-align : right;
|
||||||
|
height : 24px;
|
||||||
|
width : 360px;
|
||||||
|
float : left;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use Leary and Langridge content replacement methods (LIR)
|
||||||
|
** to embed accessibility information into the document.
|
||||||
|
** Should allow the lists to be rendered nicely by
|
||||||
|
** screen readers. (and lynx!)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#tunnelListPage label {
|
||||||
|
height : 0;
|
||||||
|
width : 0;
|
||||||
|
overflow : hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .nameHeaderField label,
|
||||||
|
#tunnelListPage .portHeaderField label,
|
||||||
|
#tunnelListPage .typeHeaderField label,
|
||||||
|
#tunnelListPage .interfaceHeaderField label,
|
||||||
|
#tunnelListPage .targetHeaderField label,
|
||||||
|
#tunnelListPage .previewHeaderField label,
|
||||||
|
#tunnelListPage .statusHeaderField label {
|
||||||
|
text-align : left;
|
||||||
|
width : 150px;
|
||||||
|
height : 24px;
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .targetField,
|
||||||
|
#tunnelListPage .targetField .text,
|
||||||
|
#tunnelListPage .targetHeaderField,
|
||||||
|
#tunnelListPage .targetHeaderField label {
|
||||||
|
width : 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .descriptionField,
|
||||||
|
#tunnelListPage .destinationField {
|
||||||
|
width : 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .descriptionField .text,
|
||||||
|
#tunnelListPage .destinationField input {
|
||||||
|
width : 450px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .descriptionField label,
|
||||||
|
#tunnelListPage .destinationField label {
|
||||||
|
text-align : right;
|
||||||
|
width : 150px;
|
||||||
|
height : 24px;
|
||||||
|
float : left;
|
||||||
|
}
|
112
installer/resources/themes/console/console.css
Normal file
112
installer/resources/themes/console/console.css
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
body {
|
||||||
|
font-family: Verdana, Tahoma, Helvetica, sans-serif;
|
||||||
|
margin: 1em 0em;
|
||||||
|
padding: 0em;
|
||||||
|
text-align: center;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.logo {
|
||||||
|
float: left;
|
||||||
|
width: 200px;
|
||||||
|
left: 1em;
|
||||||
|
top: 1em;
|
||||||
|
margin: 0em;
|
||||||
|
padding: .5em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toolbar {
|
||||||
|
margin: 0em 0em 2em 0em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.routersummaryouter {
|
||||||
|
float: left;
|
||||||
|
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: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: medium solid #efefff;
|
||||||
|
font-size: 0.82em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.warning {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffefef;
|
||||||
|
border: medium solid #ffafaf;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffef;
|
||||||
|
border: medium solid #ffffd0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main textarea {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.news {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
border: medium solid #ffffa0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.confignav {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #efefff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.configure {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #fafaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.error {
|
||||||
|
color: #d00000;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.notice {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
112
installer/resources/themes/console/defCon1/console.css
Normal file
112
installer/resources/themes/console/defCon1/console.css
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
body {
|
||||||
|
font-family: Verdana, Tahoma, Helvetica, sans-serif;
|
||||||
|
margin: 1em 0em;
|
||||||
|
padding: 0em;
|
||||||
|
text-align: center;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.logo {
|
||||||
|
float: left;
|
||||||
|
width: 200px;
|
||||||
|
left: 1em;
|
||||||
|
top: 1em;
|
||||||
|
margin: 0em;
|
||||||
|
padding: .5em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toolbar {
|
||||||
|
margin: 0em 0em 2em 0em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.routersummaryouter {
|
||||||
|
float: left;
|
||||||
|
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: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: medium solid #efefff;
|
||||||
|
font-size: 0.82em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.warning {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffefef;
|
||||||
|
border: medium solid #ffafaf;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffef;
|
||||||
|
border: medium solid #ffffd0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main textarea {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.news {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
border: medium solid #ffffa0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.confignav {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #efefff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.configure {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #fafaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.error {
|
||||||
|
color: #d00000;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.notice {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 925 B After Width: | Height: | Size: 925 B |
@ -669,9 +669,9 @@ public class JobQueue {
|
|||||||
/** render the HTML for the job stats */
|
/** render the HTML for the job stats */
|
||||||
private void getJobStats(StringBuffer buf) {
|
private void getJobStats(StringBuffer buf) {
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td><b>Job</b></td><td><b>Runs</b></td>");
|
buf.append("<tr><th>Job</th><th>Runs</th>");
|
||||||
buf.append("<td><b>Time</b></td><td><b><i>Avg</i></b></td><td><b><i>Max</i></b></td><td><b><i>Min</i></b></td>");
|
buf.append("<th>Time</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th>");
|
||||||
buf.append("<td><b>Pending</b></td><td><b><i>Avg</i></b></td><td><b><i>Max</i></b></td><td><b><i>Min</i></b></td></tr>\n");
|
buf.append("<th>Pending</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th></tr>\n");
|
||||||
long totRuns = 0;
|
long totRuns = 0;
|
||||||
long totExecTime = 0;
|
long totExecTime = 0;
|
||||||
long avgExecTime = 0;
|
long avgExecTime = 0;
|
||||||
|
@ -139,12 +139,18 @@ public class StatisticsManager implements Service {
|
|||||||
|
|
||||||
//includeRate("tunnel.buildRequestTime", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.buildRequestTime", stats, new long[] { 10*60*1000 });
|
||||||
long rate = 60*60*1000;
|
long rate = 60*60*1000;
|
||||||
|
boolean commentOutIn076 = RouterVersion.VERSION.equals("0.7.5");
|
||||||
|
if (commentOutIn076) {
|
||||||
includeRate("tunnel.buildClientExpire", stats, new long[] { rate });
|
includeRate("tunnel.buildClientExpire", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildClientReject", stats, new long[] { rate });
|
includeRate("tunnel.buildClientReject", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildClientSuccess", stats, new long[] { rate });
|
includeRate("tunnel.buildClientSuccess", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate });
|
includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate });
|
includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate });
|
includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate });
|
||||||
|
} else {
|
||||||
|
includeTunnelRates("Client", stats, rate);
|
||||||
|
includeTunnelRates("Exploratory", stats, rate);
|
||||||
|
}
|
||||||
//includeRate("tunnel.rejectTimeout", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.rejectTimeout", stats, new long[] { 10*60*1000 });
|
||||||
//includeRate("tunnel.rejectOverloaded", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.rejectOverloaded", stats, new long[] { 10*60*1000 });
|
||||||
//includeRate("tunnel.acceptLoad", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.acceptLoad", stats, new long[] { 10*60*1000 });
|
||||||
@ -223,6 +229,49 @@ public class StatisticsManager implements Service {
|
|||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] tunnelStats = { "Expire", "Reject", "Success" };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add tunnel build rates with some mods to hide absolute quantities
|
||||||
|
* In particular, report counts normalized to 100 (i.e. a percentage)
|
||||||
|
*/
|
||||||
|
private void includeTunnelRates(String tunnelType, Properties stats, long selectedPeriod) {
|
||||||
|
long totalEvents = 0;
|
||||||
|
for (String tunnelStat : tunnelStats) {
|
||||||
|
String rateName = "tunnel.build" + tunnelType + tunnelStat;
|
||||||
|
RateStat stat = _context.statManager().getRate(rateName);
|
||||||
|
if (stat == null) continue;
|
||||||
|
Rate curRate = stat.getRate(selectedPeriod);
|
||||||
|
if (curRate == null) continue;
|
||||||
|
totalEvents += curRate.getLastEventCount();
|
||||||
|
}
|
||||||
|
if (totalEvents <= 0)
|
||||||
|
return;
|
||||||
|
for (String tunnelStat : tunnelStats) {
|
||||||
|
String rateName = "tunnel.build" + tunnelType + tunnelStat;
|
||||||
|
RateStat stat = _context.statManager().getRate(rateName);
|
||||||
|
if (stat == null) continue;
|
||||||
|
Rate curRate = stat.getRate(selectedPeriod);
|
||||||
|
if (curRate == null) continue;
|
||||||
|
double fudgeQuantity = 100.0d * curRate.getLastEventCount() / totalEvents;
|
||||||
|
stats.setProperty("stat_" + rateName + '.' + getPeriod(curRate), renderRate(curRate, fudgeQuantity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String renderRate(Rate rate, double fudgeQuantity) {
|
||||||
|
StringBuffer buf = new StringBuffer(128);
|
||||||
|
buf.append(num(rate.getAverageValue())).append(';');
|
||||||
|
buf.append(num(rate.getExtremeAverageValue())).append(';');
|
||||||
|
buf.append(pct(rate.getPercentageOfLifetimeValue())).append(';');
|
||||||
|
if (rate.getLifetimeTotalEventTime() > 0) {
|
||||||
|
// bah saturation
|
||||||
|
buf.append("0;0;0;0;");
|
||||||
|
}
|
||||||
|
long numPeriods = rate.getLifetimePeriods();
|
||||||
|
buf.append(num(fudgeQuantity)).append(';');
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/* report the same data for tx and rx, for enhanced anonymity */
|
/* report the same data for tx and rx, for enhanced anonymity */
|
||||||
private void includeAverageThroughput(Properties stats) {
|
private void includeAverageThroughput(Properties stats) {
|
||||||
RateStat sendRate = _context.statManager().getRate("bw.sendRate");
|
RateStat sendRate = _context.statManager().getRate("bw.sendRate");
|
||||||
|
@ -61,13 +61,13 @@ class ProfileOrganizerRenderer {
|
|||||||
buf.append("<p>Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles</p>");
|
buf.append("<p>Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles</p>");
|
||||||
buf.append("<table border=\"1\">");
|
buf.append("<table border=\"1\">");
|
||||||
buf.append("<tr>");
|
buf.append("<tr>");
|
||||||
buf.append("<td><b>Peer</b></td>");
|
buf.append("<th>Peer</th>");
|
||||||
buf.append("<td><b>Groups (Caps)</b></td>");
|
buf.append("<th>Groups (Caps)</th>");
|
||||||
buf.append("<td><b>Speed</b></td>");
|
buf.append("<th>Speed</th>");
|
||||||
buf.append("<td><b>Capacity</b></td>");
|
buf.append("<th>Capacity</th>");
|
||||||
buf.append("<td><b>Integration</b></td>");
|
buf.append("<th>Integration</th>");
|
||||||
buf.append("<td><b>Failing?</b></td>");
|
buf.append("<th>Failing?</th>");
|
||||||
buf.append("<td> </td>");
|
buf.append("<th> </th>");
|
||||||
buf.append("</tr>");
|
buf.append("</tr>");
|
||||||
int prevTier = 1;
|
int prevTier = 1;
|
||||||
for (Iterator iter = order.iterator(); iter.hasNext();) {
|
for (Iterator iter = order.iterator(); iter.hasNext();) {
|
||||||
@ -159,22 +159,22 @@ class ProfileOrganizerRenderer {
|
|||||||
buf.append("<h2>Floodfill and Integrated Peers</h2>\n");
|
buf.append("<h2>Floodfill and Integrated Peers</h2>\n");
|
||||||
buf.append("<table border=\"1\">");
|
buf.append("<table border=\"1\">");
|
||||||
buf.append("<tr>");
|
buf.append("<tr>");
|
||||||
buf.append("<td><b>Peer</b></td>");
|
buf.append("<th>Peer</th>");
|
||||||
buf.append("<td><b>Caps</b></td>");
|
buf.append("<th>Caps</th>");
|
||||||
buf.append("<td><b>Integ. Value</b></td>");
|
buf.append("<th>Integ. Value</th>");
|
||||||
buf.append("<td><b>Last Heard About</b></td>");
|
buf.append("<th>Last Heard About</th>");
|
||||||
buf.append("<td><b>Last Heard From</b></td>");
|
buf.append("<th>Last Heard From</th>");
|
||||||
buf.append("<td><b>Last Successful Send</b></td>");
|
buf.append("<th>Last Successful Send</th>");
|
||||||
buf.append("<td><b>Last Failed Send</b></td>");
|
buf.append("<th>Last Failed Send</th>");
|
||||||
buf.append("<td><b>10m Resp. Time</b></td>");
|
buf.append("<th>10m Resp. Time</th>");
|
||||||
buf.append("<td><b>1h Resp. Time</b></td>");
|
buf.append("<th>1h Resp. Time</th>");
|
||||||
buf.append("<td><b>1d Resp. Time</b></td>");
|
buf.append("<th>1d Resp. Time</th>");
|
||||||
buf.append("<td><b>Successful Lookups</b></td>");
|
buf.append("<th>Successful Lookups</th>");
|
||||||
buf.append("<td><b>Failed Lookups</b></td>");
|
buf.append("<th>Failed Lookups</th>");
|
||||||
buf.append("<td><b>New Stores</b></td>");
|
buf.append("<th>New Stores</th>");
|
||||||
buf.append("<td><b>Old Stores</b></td>");
|
buf.append("<th>Old Stores</th>");
|
||||||
buf.append("<td><b>1h Fail Rate</b></td>");
|
buf.append("<th>1h Fail Rate</th>");
|
||||||
buf.append("<td><b>1d Fail Rate</b></td>");
|
buf.append("<th>1d Fail Rate</th>");
|
||||||
buf.append("</tr>");
|
buf.append("</tr>");
|
||||||
for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) {
|
for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) {
|
||||||
PeerProfile prof = (PeerProfile)iter.next();
|
PeerProfile prof = (PeerProfile)iter.next();
|
||||||
|
@ -1769,48 +1769,48 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
|||||||
buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
|
buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
|
||||||
buf.append("</b><br />\n");
|
buf.append("</b><br />\n");
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td><b><a href=\"#def.peer\">Peer</a></b>");
|
buf.append("<tr><th><a href=\"#def.peer\">Peer</a>");
|
||||||
if (sortFlags != FLAG_ALPHA)
|
if (sortFlags != FLAG_ALPHA)
|
||||||
buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
|
buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
|
||||||
buf.append("</td><td><b><a href=\"#def.dir\">Dir/Intro</a></b></td><td><b><a href=\"#def.idle\">Idle</a></b>");
|
buf.append("</th><th><a href=\"#def.dir\">Dir/Intro</a></th><th><a href=\"#def.idle\">Idle</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN);
|
||||||
buf.append("/");
|
buf.append("/");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
|
||||||
buf.append("</td>");
|
buf.append("</th>");
|
||||||
buf.append("<td><b><a href=\"#def.rate\">In/Out</a></b>");
|
buf.append("<th><a href=\"#def.rate\">In/Out</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
|
||||||
buf.append("/");
|
buf.append("/");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.up\">Up</a></b>");
|
buf.append("<th><a href=\"#def.up\">Up</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME);
|
||||||
buf.append("</td><td><b><a href=\"#def.skew\">skew</a></b>");
|
buf.append("</th><th><a href=\"#def.skew\">skew</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.cwnd\">Cwnd</a></b>");
|
buf.append("<th><a href=\"#def.cwnd\">Cwnd</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND);
|
||||||
buf.append("</td><td><b><a href=\"#def.ssthresh\">Ssthresh</a></b>");
|
buf.append("</th><th><a href=\"#def.ssthresh\">Ssthresh</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.rtt\">Rtt</a></b>");
|
buf.append("<th><a href=\"#def.rtt\">Rtt</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT);
|
||||||
buf.append("</td><td><b><a href=\"#def.dev\">Dev</a></b>");
|
buf.append("</th><th><a href=\"#def.dev\">Dev</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV);
|
||||||
buf.append("</td><td><b><a href=\"#def.rto\">Rto</a></b>");
|
buf.append("</th><th><a href=\"#def.rto\">Rto</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.mtu\">Mtu</a></b>");
|
buf.append("<th><a href=\"#def.mtu\">Mtu</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU);
|
||||||
buf.append("</td><td><b><a href=\"#def.send\">Send</a></b>");
|
buf.append("</th><th><a href=\"#def.send\">Send</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND);
|
||||||
buf.append("</td><td><b><a href=\"#def.recv\">Recv</a></b>");
|
buf.append("</th><th><a href=\"#def.recv\">Recv</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.resent\">Resent</a></b>");
|
buf.append("<th><a href=\"#def.resent\">Resent</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND);
|
||||||
buf.append("</td><td><b><a href=\"#def.dupRecv\">DupRecv</a></b>");
|
buf.append("</th><th><a href=\"#def.dupRecv\">DupRecv</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("</tr>\n");
|
buf.append("</tr>\n");
|
||||||
out.write(buf.toString());
|
out.write(buf.toString());
|
||||||
buf.setLength(0);
|
buf.setLength(0);
|
||||||
|
@ -439,9 +439,9 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
|||||||
List participating = _context.tunnelDispatcher().listParticipatingTunnels();
|
List participating = _context.tunnelDispatcher().listParticipatingTunnels();
|
||||||
Collections.sort(participating, new TunnelComparator());
|
Collections.sort(participating, new TunnelComparator());
|
||||||
out.write("<h2><a name=\"participating\">Participating tunnels</a>:</h2><table border=\"1\">\n");
|
out.write("<h2><a name=\"participating\">Participating tunnels</a>:</h2><table border=\"1\">\n");
|
||||||
out.write("<tr><td><b>Receive on</b></td><td><b>From</b></td><td>"
|
out.write("<tr><th>Receive on</th><th>From</th><th>"
|
||||||
+ "<b>Send on</b></td><td><b>To</b></td><td><b>Expiration</b></td>"
|
+ "Send on</th><th>To</th><th>Expiration</th>"
|
||||||
+ "<td><b>Usage</b></td><td><b>Rate</b></td><td><b>Role</b></td></tr>\n");
|
+ "<th>Usage</th><th>Rate</th><th>Role</th></tr>\n");
|
||||||
long processed = 0;
|
long processed = 0;
|
||||||
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
|
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
|
||||||
if (rs != null)
|
if (rs != null)
|
||||||
@ -602,7 +602,7 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
|||||||
Collections.sort(peerList, new HashComparator());
|
Collections.sort(peerList, new HashComparator());
|
||||||
|
|
||||||
out.write("<h2><a name=\"peers\">Tunnel Counts By Peer</a>:</h2>\n");
|
out.write("<h2><a name=\"peers\">Tunnel Counts By Peer</a>:</h2>\n");
|
||||||
out.write("<table border=\"1\"><tr><td><b>Peer</b></td><td><b>Expl. + Client</b></td><td><b>% of total</b></td><td><b>Part. from + to</b></td><td><b>% of total</b></td></tr>\n");
|
out.write("<table border=\"1\"><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n");
|
||||||
for (Hash h : peerList) {
|
for (Hash h : peerList) {
|
||||||
out.write("<tr><td align=\"right\">");
|
out.write("<tr><td align=\"right\">");
|
||||||
out.write(netDbLink(h));
|
out.write(netDbLink(h));
|
||||||
|
Reference in New Issue
Block a user