Author: zothar
Date: 2006-10-22 18:27:14 +0000 (Sun, 22 Oct 2006)
New Revision: 10686
Modified:
trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/PeerNodeStatus.java
Log:
Add percent Time Routable and export it and a few other things via FCP.
Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-10-22 01:52:16 UTC (rev 10685)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-10-22 18:27:14 UTC (rev 10686)
@@ -339,6 +339,7 @@
peerTableHeaderRow.addChild("th").addChild("span", new String[] { "title",
"style" }, new String[] { "A private note concerning this peer",
"border-bottom: 1px dotted; cursor: help;" }, "Private Note");
if(advancedEnabled) {
+ peerTableHeaderRow.addChild("th",
"%\u00a0Time Routable");
peerTableHeaderRow.addChild("th",
"Total\u00a0Traffic\u00a0(in/out)");
}
@@ -413,8 +414,12 @@
// private darknet node comment note
column
peerRow.addChild("td", "class",
"peer-private-darknet-comment-note").addChild("input", new String[] { "type",
"name", "size", "maxlength", "value" }, new String[] { "text",
"peerPrivateNote_" + peerNodeStatus.hashCode(), "16", "250",
peerNodeStatus.getPrivateDarknetCommentNote() });
- if(advancedEnabled)
+ if(advancedEnabled) {
+ // percent of time connected
column
+ peerRow.addChild("td", "class",
"peer-idle" /* FIXME */).addChild("#",
fix1.format(peerNodeStatus.getPercentTimeRoutableConnection()));
+ // total traffic column
peerRow.addChild("td", "class",
"peer-idle" /* FIXME */).addChild("#",
SizeUtil.formatSize(peerNodeStatus.getTotalInputBytes())+" /
"+SizeUtil.formatSize(peerNodeStatus.getTotalOutputBytes()));
+ }
if
(path.endsWith("displaymessagetypes.html")) {
HTMLNode messageCountRow =
peerTable.addChild("tr", "class", "message-status");
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-10-22 01:52:16 UTC (rev
10685)
+++ trunk/freenet/src/freenet/node/Node.java 2006-10-22 18:27:14 UTC (rev
10686)
@@ -448,6 +448,10 @@
private long nextNodeIOStatsUpdateTime = -1;
/** Node I/O stats update interval (milliseconds) */
private static final long nodeIOStatsUpdateInterval = 2000;
+ /** Next time to update routableConnectionStats */
+ private long nextRoutableConnectionStatsUpdateTime = -1;
+ /** routableConnectionStats update interval (milliseconds) */
+ private static final long routableConnectionStatsUpdateInterval = 7 *
1000; // 7 seconds
// The version we were before we restarted.
public int lastVersion;
@@ -3093,4 +3097,20 @@
}
}
}
+
+ /**
+ * Update hadRoutableConnectionCount/routableConnectionCheckCount on
peers if the timer has expired
+ */
+ public void maybeUpdatePeerNodeRoutableConnectionStats(long now) {
+ if(now > nextRoutableConnectionStatsUpdateTime) {
+ if(peers != null && -1 !=
nextRoutableConnectionStatsUpdateTime) {
+ PeerNode[] peerList = peers.myPeers;
+ for(int i=0;i<peerList.length;i++) {
+ PeerNode pn = peerList[i];
+ pn.checkRoutableConnectionStatus();
+ }
+ }
+ nextRoutableConnectionStatsUpdateTime = now +
routableConnectionStatsUpdateInterval;
+ }
+ }
}
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2006-10-22 01:52:16 UTC
(rev 10685)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2006-10-22 18:27:14 UTC
(rev 10686)
@@ -155,6 +155,7 @@
node.maybeUpdateOldestNeverConnectedPeerAge(now);
node.maybeUpdatePeerManagerUserAlertStats(now);
node.maybeUpdateNodeIOStats(now);
+ node.maybeUpdatePeerNodeRoutableConnectionStats(now);
long nextActionTime = Long.MAX_VALUE;
long oldTempNow = now;
for(int i=0;i<nodes.length;i++) {
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-10-22 01:52:16 UTC
(rev 10685)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-10-22 18:27:14 UTC
(rev 10686)
@@ -307,6 +307,12 @@
/** Total low-level output bytes */
private long totalBytesOut;
+ /** Times had routable connection when checked */
+ private long hadRoutableConnectionCount;
+
+ /** Times checked for routable connection */
+ private long routableConnectionCheckCount;
+
private static boolean logMINOR;
/**
@@ -571,6 +577,20 @@
isListenOnly =
Fields.stringToBool(metadata.get("isListenOnly"), false);
isBurstOnly = Fields.stringToBool(metadata.get("isBurstOnly"),
false);
allowLocalAddresses =
Fields.stringToBool(metadata.get("allowLocalAddresses"), false);
+ String tempHadRoutableConnectionCountString =
metadata.get("hadRoutableConnectionCount");
+ if(tempHadRoutableConnectionCountString != null) {
+ long tempHadRoutableConnectionCount =
Long.parseLong(tempHadRoutableConnectionCountString);
+ hadRoutableConnectionCount =
tempHadRoutableConnectionCount;
+ } else {
+ hadRoutableConnectionCount = 0;
+ }
+ String tempRoutableConnectionCheckCountString =
metadata.get("routableConnectionCheckCount");
+ if(tempRoutableConnectionCheckCountString != null) {
+ long tempRoutableConnectionCheckCount =
Long.parseLong(tempRoutableConnectionCheckCountString);
+ routableConnectionCheckCount =
tempRoutableConnectionCheckCount;
+ } else {
+ routableConnectionCheckCount = 0;
+ }
}
} else {
neverConnected = true;
@@ -1867,6 +1887,10 @@
fs.put("isBurstOnly", "true");
if(allowLocalAddresses)
fs.put("allowLocalAddresses", "true");
+ if(hadRoutableConnectionCount > 0)
+ fs.put("hadRoutableConnectionCount",
Long.toString(hadRoutableConnectionCount));
+ if(routableConnectionCheckCount > 0)
+ fs.put("routableConnectionCheckCount",
Long.toString(routableConnectionCheckCount));
return fs;
}
@@ -1889,6 +1913,10 @@
fs.put("routingBackoffPercent",
Double.toString(backedOffPercent.currentValue() * 100));
fs.put("routingBackoff",
Long.toString((Math.max(routingBackedOffUntil - now, 0))));
fs.put("routingBackoffLength",
Integer.toString(routingBackoffLength));
+ fs.put("overloadProbability",
Double.toString(getPRejected() * 100));
+ fs.put("percentTimeRoutableConnection",
Double.toString(getPercentTimeRoutableConnection() * 100));
+ fs.put("totalBytesIn", Long.toString(totalBytesIn));
+ fs.put("totalBytesOut", Long.toString(totalBytesOut));
}
fs.put("status", getPeerNodeStatusString());
return fs;
@@ -2938,4 +2966,28 @@
}
node.peers.writePeers();
}
+
+ public void checkRoutableConnectionStatus() {
+ synchronized(this) {
+ if(isRoutable()) {
+ hadRoutableConnectionCount += 1;
+ }
+ routableConnectionCheckCount += 1;
+ // prevent the average from moving too slowly by
capping the checkcount to 200000,
+ // which, at 7 seconds between counts, works out to
about 2 weeks. This also prevents
+ // knowing how long we've had a particular peer long
term.
+ if(routableConnectionCheckCount >= 200000) {
+ // divide both sides by the same amount to keep
the same ratio
+ hadRoutableConnectionCount =
hadRoutableConnectionCount / 2;
+ routableConnectionCheckCount =
routableConnectionCheckCount / 2;
+ }
+ }
+ }
+
+ public synchronized double getPercentTimeRoutableConnection() {
+ if(hadRoutableConnectionCount == 0) {
+ return 0.0;
+ }
+ return ((double) hadRoutableConnectionCount) /
routableConnectionCheckCount;
+ }
}
Modified: trunk/freenet/src/freenet/node/PeerNodeStatus.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNodeStatus.java 2006-10-22 01:52:16 UTC
(rev 10685)
+++ trunk/freenet/src/freenet/node/PeerNodeStatus.java 2006-10-22 18:27:14 UTC
(rev 10686)
@@ -81,6 +81,8 @@
private long totalBytesIn;
private long totalBytesOut;
+
+ private double percentTimeRoutableConnection;
public PeerNodeStatus(PeerNode peerNode) {
this.name = peerNode.getName();
@@ -115,6 +117,7 @@
this.privateDarknetCommentNote =
peerNode.getPrivateDarknetCommentNote();
this.totalBytesIn = peerNode.getTotalInputBytes();
this.totalBytesOut = peerNode.getTotalOutputBytes();
+ this.percentTimeRoutableConnection =
peerNode.getPercentTimeRoutableConnection();
}
/**
@@ -332,4 +335,8 @@
public long getTotalOutputBytes() {
return totalBytesOut;
}
+
+ public double getPercentTimeRoutableConnection() {
+ return percentTimeRoutableConnection;
+ }
}