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


Reply via email to