Author: toad
Date: 2007-11-27 01:05:11 +0000 (Tue, 27 Nov 2007)
New Revision: 15951
Modified:
trunk/freenet/src/freenet/clients/http/ConnectivityToadlet.java
trunk/freenet/src/freenet/io/AddressTrackerItem.java
Log:
Show the last 5 long send/recv gaps in the connectivity toadlet.
Modified: trunk/freenet/src/freenet/clients/http/ConnectivityToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ConnectivityToadlet.java
2007-11-27 00:55:44 UTC (rev 15950)
+++ trunk/freenet/src/freenet/clients/http/ConnectivityToadlet.java
2007-11-27 01:05:11 UTC (rev 15951)
@@ -20,8 +20,10 @@
import freenet.client.HighLevelSimpleClient;
import freenet.io.AddressTracker;
+import freenet.io.AddressTrackerItem;
import freenet.io.InetAddressAddressTrackerItem;
import freenet.io.PeerAddressTrackerItem;
+import freenet.io.AddressTrackerItem.Gap;
import freenet.io.comm.UdpSocketHandler;
import freenet.l10n.L10n;
import freenet.node.Node;
@@ -69,6 +71,7 @@
String noreply = l10n("noreply");
String local = l10n("local");
String remote = l10n("remote");
+ long now = System.currentTimeMillis();
for(int i=0;i<handlers.length;i++) {
// Peers
@@ -84,6 +87,9 @@
row.addChild("th", l10n("localRemoteTitle"));
row.addChild("th", l10n("firstSendLeadTime"));
row.addChild("th", l10n("firstReceiveLeadTime"));
+ for(int j=0;j<AddressTrackerItem.TRACK_GAPS;j++) {
+ row.addChild("th", " "); // FIXME is <th/>
valid??
+ }
for(int j=0;j<items.length;j++) {
row = table.addChild("tr");
PeerAddressTrackerItem item = items[j];
@@ -98,6 +104,11 @@
row.addChild("td",
TimeUtil.formatTime(item.timeFromStartupToFirstSentPacket()));
// Lead in time to first packet received
row.addChild("td",
TimeUtil.formatTime(item.timeFromStartupToFirstReceivedPacket()));
+ Gap[] gaps = item.getGaps();
+ for(int
k=0;k<AddressTrackerItem.TRACK_GAPS;k++) {
+ row.addChild("td",
gaps[k].receivedPacketAt == 0 ? "" :
+
(TimeUtil.formatTime(gaps[k].gapLength)+" @ "+TimeUtil.formatTime(now -
gaps[k].receivedPacketAt)+" ago" /* fixme l10n */));
+ }
}
// IPs
@@ -112,6 +123,9 @@
row.addChild("th", l10n("localRemoteTitle"));
row.addChild("th", l10n("firstSendLeadTime"));
row.addChild("th", l10n("firstReceiveLeadTime"));
+ for(int j=0;j<AddressTrackerItem.TRACK_GAPS;j++) {
+ row.addChild("th", " "); // FIXME is <th/>
valid??
+ }
for(int j=0;j<ipItems.length;j++) {
row = table.addChild("tr");
InetAddressAddressTrackerItem item = ipItems[j];
@@ -126,6 +140,11 @@
row.addChild("td",
TimeUtil.formatTime(item.timeFromStartupToFirstSentPacket()));
// Lead in time to first packet received
row.addChild("td",
TimeUtil.formatTime(item.timeFromStartupToFirstReceivedPacket()));
+ Gap[] gaps = item.getGaps();
+ for(int
k=0;k<AddressTrackerItem.TRACK_GAPS;k++) {
+ row.addChild("td",
gaps[k].receivedPacketAt == 0 ? "" :
+
(TimeUtil.formatTime(gaps[k].gapLength)+" @ "+TimeUtil.formatTime(now -
gaps[k].receivedPacketAt)+" ago" /* fixme l10n */));
+ }
}
}
Modified: trunk/freenet/src/freenet/io/AddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTrackerItem.java 2007-11-27
00:55:44 UTC (rev 15950)
+++ trunk/freenet/src/freenet/io/AddressTrackerItem.java 2007-11-27
01:05:11 UTC (rev 15951)
@@ -43,7 +43,7 @@
private long packetsSent;
/** The total number of packets received from this address */
private long packetsReceived;
- static final int TRACK_GAPS = 5;
+ public static final int TRACK_GAPS = 5;
private long[] topGapLengths;
private long[] topGapLengthRecvTimes;
static final int GAP_THRESHOLD = AddressTracker.MAX_TUNNEL_LENGTH;
@@ -88,6 +88,23 @@
}
}
+ public class Gap {
+ public final long gapLength;
+ public final long receivedPacketAt;
+ Gap(long gapLength, long receivedPacketAt) {
+ this.gapLength = gapLength;
+ this.receivedPacketAt = receivedPacketAt;
+ }
+ }
+
+ public synchronized Gap[] getGaps() {
+ Gap[] gaps = new Gap[GAP_THRESHOLD];
+ for(int i=0;i<GAP_THRESHOLD;i++) {
+ gaps[i] = new Gap(topGapLengths[i],
topGapLengthRecvTimes[i]);
+ }
+ return gaps;
+ }
+
public synchronized long firstReceivedPacket() {
return timeFirstReceivedPacket;
}