propagate from branch 'i2p.i2p.zzz.test2' (head 91f7c17a08ea873ff7bb40835a43ba857ee7fe46)

to branch 'i2p.i2p' (head 3d86e500d1550fccc2ac29371555a1a5af2c5c2b)
This commit is contained in:
zzz
2009-06-29 03:18:19 +00:00
19 changed files with 723 additions and 77 deletions

View File

@ -15,7 +15,7 @@ public class ConfigClientsHelper extends HelperBase {
public String getForm1() {
StringBuffer buf = new StringBuffer(1024);
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);
for (int cur = 0; cur < clients.size(); cur++) {
@ -31,7 +31,7 @@ public class ConfigClientsHelper extends HelperBase {
public String getForm2() {
StringBuffer buf = new StringBuffer(1024);
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();
Set keys = new TreeSet(props.keySet());
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {

View File

@ -56,27 +56,27 @@ public class ConfigTunnelsHelper extends HelperBase {
private static final int MIN_NEG_VARIANCE = -1;
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(name).append("</a></b></td></tr>\n");
buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">");
buf.append(name).append("</a></th></tr>\n");
if (in.getLength() <= 0 ||
in.getLength() + in.getLengthVariance() <= 0 ||
out.getLength() <= 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 ||
in.getLength() + in.getLengthVariance() <= 1 ||
out.getLength() <= 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 ||
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 ||
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
buf.append("<tr><td>Depth</td>\n");

View File

@ -6,7 +6,7 @@
<title>I2P Router Console - home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%@include file="css.jsp" %>
<link rel="shortcut icon" href="favicon.ico" />
<link rel="shortcut icon" href="/themes/console/images/favicon.ico" />
</head><body>
<%
if (System.getProperty("router.consoleNonce") == null) {

View File

@ -1,6 +1,6 @@
<%@page import="java.io.File" %>
<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 class="toolbar">
<% if (new File("docs/toolbar.html").exists()) { %>

View File

@ -14,7 +14,9 @@ if (uri.endsWith(".css")) {
response.setContentType("image/gif");
} else if (uri.endsWith(".jpg")) {
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());
%>

View File

@ -297,9 +297,6 @@
<copy todir="pkg-temp/docs/themes/" >
<fileset dir="installer/resources/themes/" />
</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/webapps" />
<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/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
</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 -->
<target name="tarball" depends="preppkg">
<tar compression="bzip2" destfile="i2p.tar.bz2">
@ -364,7 +378,7 @@
<copy file="history.txt" todir="pkg-temp/" />
<copy file="news.xml" todir="pkg-temp/docs/" />
</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/mstreaming.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/" />
<!-- New readme_*.html files - For one release only -->
<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 name="prepupdateRouter" depends="buildrouter, deletepkg-temp">
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 925 B

After

Width:  |  Height:  |  Size: 925 B

View File

@ -669,9 +669,9 @@ public class JobQueue {
/** render the HTML for the job stats */
private void getJobStats(StringBuffer buf) {
buf.append("<table border=\"1\">\n");
buf.append("<tr><td><b>Job</b></td><td><b>Runs</b></td>");
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("<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("<tr><th>Job</th><th>Runs</th>");
buf.append("<th>Time</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th>");
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 totExecTime = 0;
long avgExecTime = 0;

View File

@ -139,12 +139,18 @@ public class StatisticsManager implements Service {
//includeRate("tunnel.buildRequestTime", stats, new long[] { 10*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.buildClientReject", stats, new long[] { rate });
includeRate("tunnel.buildClientSuccess", stats, new long[] { rate });
includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate });
includeRate("tunnel.buildExploratoryReject", 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.rejectOverloaded", 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();
}
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 */
private void includeAverageThroughput(Properties stats) {
RateStat sendRate = _context.statManager().getRate("bw.sendRate");

View File

@ -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("<table border=\"1\">");
buf.append("<tr>");
buf.append("<td><b>Peer</b></td>");
buf.append("<td><b>Groups (Caps)</b></td>");
buf.append("<td><b>Speed</b></td>");
buf.append("<td><b>Capacity</b></td>");
buf.append("<td><b>Integration</b></td>");
buf.append("<td><b>Failing?</b></td>");
buf.append("<td>&nbsp;</td>");
buf.append("<th>Peer</th>");
buf.append("<th>Groups (Caps)</th>");
buf.append("<th>Speed</th>");
buf.append("<th>Capacity</th>");
buf.append("<th>Integration</th>");
buf.append("<th>Failing?</th>");
buf.append("<th>&nbsp;</th>");
buf.append("</tr>");
int prevTier = 1;
for (Iterator iter = order.iterator(); iter.hasNext();) {
@ -159,22 +159,22 @@ class ProfileOrganizerRenderer {
buf.append("<h2>Floodfill and Integrated Peers</h2>\n");
buf.append("<table border=\"1\">");
buf.append("<tr>");
buf.append("<td><b>Peer</b></td>");
buf.append("<td><b>Caps</b></td>");
buf.append("<td><b>Integ. Value</b></td>");
buf.append("<td><b>Last Heard About</b></td>");
buf.append("<td><b>Last Heard From</b></td>");
buf.append("<td><b>Last Successful Send</b></td>");
buf.append("<td><b>Last Failed Send</b></td>");
buf.append("<td><b>10m Resp. Time</b></td>");
buf.append("<td><b>1h Resp. Time</b></td>");
buf.append("<td><b>1d Resp. Time</b></td>");
buf.append("<td><b>Successful Lookups</b></td>");
buf.append("<td><b>Failed Lookups</b></td>");
buf.append("<td><b>New Stores</b></td>");
buf.append("<td><b>Old Stores</b></td>");
buf.append("<td><b>1h Fail Rate</b></td>");
buf.append("<td><b>1d Fail Rate</b></td>");
buf.append("<th>Peer</th>");
buf.append("<th>Caps</th>");
buf.append("<th>Integ. Value</th>");
buf.append("<th>Last Heard About</th>");
buf.append("<th>Last Heard From</th>");
buf.append("<th>Last Successful Send</th>");
buf.append("<th>Last Failed Send</th>");
buf.append("<th>10m Resp. Time</th>");
buf.append("<th>1h Resp. Time</th>");
buf.append("<th>1d Resp. Time</th>");
buf.append("<th>Successful Lookups</th>");
buf.append("<th>Failed Lookups</th>");
buf.append("<th>New Stores</th>");
buf.append("<th>Old Stores</th>");
buf.append("<th>1h Fail Rate</th>");
buf.append("<th>1d Fail Rate</th>");
buf.append("</tr>");
for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) {
PeerProfile prof = (PeerProfile)iter.next();

View File

@ -1769,48 +1769,48 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
buf.append("</b><br />\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)
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);
buf.append("/");
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
buf.append("</td>");
buf.append("<td><b><a href=\"#def.rate\">In/Out</a></b>");
buf.append("</th>");
buf.append("<th><a href=\"#def.rate\">In/Out</a>");
appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
buf.append("/");
appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
buf.append("</td>\n");
buf.append("<td><b><a href=\"#def.up\">Up</a></b>");
buf.append("</th>\n");
buf.append("<th><a href=\"#def.up\">Up</a>");
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);
buf.append("</td>\n");
buf.append("<td><b><a href=\"#def.cwnd\">Cwnd</a></b>");
buf.append("</th>\n");
buf.append("<th><a href=\"#def.cwnd\">Cwnd</a>");
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);
buf.append("</td>\n");
buf.append("<td><b><a href=\"#def.rtt\">Rtt</a></b>");
buf.append("</th>\n");
buf.append("<th><a href=\"#def.rtt\">Rtt</a>");
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);
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);
buf.append("</td>\n");
buf.append("<td><b><a href=\"#def.mtu\">Mtu</a></b>");
buf.append("</th>\n");
buf.append("<th><a href=\"#def.mtu\">Mtu</a>");
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);
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);
buf.append("</td>\n");
buf.append("<td><b><a href=\"#def.resent\">Resent</a></b>");
buf.append("</th>\n");
buf.append("<th><a href=\"#def.resent\">Resent</a>");
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);
buf.append("</td>\n");
buf.append("</th>\n");
buf.append("</tr>\n");
out.write(buf.toString());
buf.setLength(0);

View File

@ -439,9 +439,9 @@ public class TunnelPoolManager implements TunnelManagerFacade {
List participating = _context.tunnelDispatcher().listParticipatingTunnels();
Collections.sort(participating, new TunnelComparator());
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>"
+ "<b>Send on</b></td><td><b>To</b></td><td><b>Expiration</b></td>"
+ "<td><b>Usage</b></td><td><b>Rate</b></td><td><b>Role</b></td></tr>\n");
out.write("<tr><th>Receive on</th><th>From</th><th>"
+ "Send on</th><th>To</th><th>Expiration</th>"
+ "<th>Usage</th><th>Rate</th><th>Role</th></tr>\n");
long processed = 0;
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
if (rs != null)
@ -602,7 +602,7 @@ public class TunnelPoolManager implements TunnelManagerFacade {
Collections.sort(peerList, new HashComparator());
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) {
out.write("<tr><td align=\"right\">");
out.write(netDbLink(h));