Author: nextgens
Date: 2008-07-27 18:48:51 +0000 (Sun, 27 Jul 2008)
New Revision: 21441
Modified:
trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/PeerNodeStatus.java
Log:
implement part of bug #2465: Show the proportion of outgoing requests for any
given peer
Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2008-07-27 18:00:01 UTC (rev 21440)
+++ trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2008-07-27 18:48:51 UTC (rev 21441)
@@ -119,6 +119,8 @@
long total1 =
firstNode.getTotalInputBytes()+firstNode.getTotalOutputBytes();
long total2 =
secondNode.getTotalInputBytes()+secondNode.getTotalOutputBytes();
return compareLongs(total1, total2);
+ }else if(sortBy.equals("selection_percentage")){
+ return
compareLongs(firstNode.getNumberOfSelections(),
secondNode.getNumberOfSelections());
}else if(sortBy.equals("time_delta")){
return compareLongs(firstNode.getClockDelta(),
secondNode.getClockDelta());
}else if(sortBy.equals(("uptime"))){
@@ -397,6 +399,7 @@
if(mode >= PageMaker.MODE_ADVANCED) {
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"time_routable")).addChild("#", "%\u00a0Time Routable");
+
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"selection_percentage")).addChild("#", "%\u00a0Selection");
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"total_traffic")).addChild("#", "Total\u00a0Traffic\u00a0(in/out/resent)");
peerTableHeaderRow.addChild("th",
"Congestion\u00a0Control");
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"time_delta")).addChild("#", "Time\u00a0Delta");
@@ -415,10 +418,11 @@
}
}
+ long numberOfSelectionSamples =
peers.getNumberOfSelectionSamples();
for (int peerIndex = 0, peerCount =
peerNodeStatuses.length; peerIndex < peerCount; peerIndex++) {
PeerNodeStatus peerNodeStatus =
peerNodeStatuses[peerIndex];
- drawRow(peerTable, peerNodeStatus, mode
>= PageMaker.MODE_ADVANCED, fProxyJavascriptEnabled, now, path,
enablePeerActions, endCols, drawMessageTypes);
+ drawRow(peerTable, peerNodeStatus, mode
>= PageMaker.MODE_ADVANCED, fProxyJavascriptEnabled, now, path,
enablePeerActions, endCols, drawMessageTypes, numberOfSelectionSamples);
}
@@ -689,7 +693,7 @@
abstract protected SimpleFieldSet getNoderef();
- private void drawRow(HTMLNode peerTable, PeerNodeStatus peerNodeStatus,
boolean advancedModeEnabled, boolean fProxyJavascriptEnabled, long now, String
path, boolean enablePeerActions, SimpleColumn[] endCols, boolean
drawMessageTypes) {
+ private void drawRow(HTMLNode peerTable, PeerNodeStatus peerNodeStatus,
boolean advancedModeEnabled, boolean fProxyJavascriptEnabled, long now, String
path, boolean enablePeerActions, SimpleColumn[] endCols, boolean
drawMessageTypes, long numberOfSelectionSamples) {
HTMLNode peerRow = peerTable.addChild("tr");
if(enablePeerActions) {
@@ -770,6 +774,8 @@
if(advancedModeEnabled) {
// percent of time connected column
peerRow.addChild("td", "class", "peer-idle" /* FIXME
*/).addChild("#",
fix1.format(peerNodeStatus.getPercentTimeRoutableConnection()));
+ // selection stats
+ peerRow.addChild("td", "class", "peer-idle" /* FIXME
*/).addChild("#",
(peerNodeStatus.getNumberOfSelections()*100/numberOfSelectionSamples)+"%");
// total traffic column
peerRow.addChild("td", "class", "peer-idle" /* FIXME
*/).addChild("#", SizeUtil.formatSize(peerNodeStatus.getTotalInputBytes())+" /
"+SizeUtil.formatSize(peerNodeStatus.getTotalOutputBytes())+"/"+SizeUtil.formatSize(peerNodeStatus.getResendBytesSent()));
// congestion control
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2008-07-27 18:00:01 UTC
(rev 21440)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2008-07-27 18:48:51 UTC
(rev 21441)
@@ -79,6 +79,9 @@
private long nextRoutableConnectionStatsUpdateTime = -1;
/** routableConnectionStats update interval (milliseconds) */
private static final long routableConnectionStatsUpdateInterval = 7 *
1000; // 7 seconds
+ /** number of samples we have to do stats on peer-selection */
+ private long numberOfSelectionSamples = 0;
+
public static final int PEER_NODE_STATUS_CONNECTED = 1;
public static final int PEER_NODE_STATUS_ROUTING_BACKED_OFF = 2;
public static final int PEER_NODE_STATUS_TOO_NEW = 3;
@@ -987,6 +990,10 @@
if(closestNotBackedOff != null && closestBackedOff !=
null)
addUnpickedLocsTo.add(new
Double(closestBackedOff.getLocation()));
+ //TODO: synchronize! ; store the stats here instead of into
PeerNode?
+ best.incrementNumberOfSelections();
+ numberOfSelectionSamples++;
+
return best;
}
@@ -1814,4 +1821,8 @@
}
return null;
}
+
+ public long getNumberOfSelectionSamples() {
+ return numberOfSelectionSamples;
+ }
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-07-27 18:00:01 UTC
(rev 21440)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-07-27 18:48:51 UTC
(rev 21441)
@@ -149,6 +149,9 @@
private long timeLastRoutable;
/** Time added or restarted (reset on startup unlike peerAddedTime) */
private long timeAddedOrRestarted;
+ /** Number of time that peer has been selected by the routing algorithm
*/
+ private long numberOfSelections = 0;
+
/** Are we connected? If not, we need to start trying to
* handshake.
*/
@@ -3979,4 +3982,12 @@
public short getUptime() {
return (short)(((int)uptime) & 0xFF);
}
+
+ public long getNumberOfSelections() {
+ return numberOfSelections;
+ }
+
+ public void incrementNumberOfSelections() {
+ numberOfSelections++;
+ }
}
Modified: trunk/freenet/src/freenet/node/PeerNodeStatus.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNodeStatus.java 2008-07-27 18:00:01 UTC
(rev 21440)
+++ trunk/freenet/src/freenet/node/PeerNodeStatus.java 2008-07-27 18:48:51 UTC
(rev 21441)
@@ -93,6 +93,8 @@
private final long resendBytesSent;
private final int reportedUptimePercentage;
+
+ private final long numberOfSelections;
PeerNodeStatus(PeerNode peerNode, boolean noHeavy) {
if(Logger.shouldLog(Logger.MINOR, this)) {
@@ -106,6 +108,7 @@
peerAddress = p.getFreenetAddress().toString();
peerPort = p.getPort();
}
+ this.numberOfSelections = peerNode.getNumberOfSelections();
this.statusValue = peerNode.getPeerNodeStatus();
this.statusName = peerNode.getPeerNodeStatusString();
this.statusCSSName = peerNode.getPeerNodeStatusCSSClassName();
@@ -393,5 +396,8 @@
public int getReportedUptimePercentage() {
return reportedUptimePercentage;
}
-
+
+ public long getNumberOfSelections() {
+ return numberOfSelections;
+ }
}