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


Reply via email to