Author: zothar
Date: 2006-08-16 21:43:51 +0000 (Wed, 16 Aug 2006)
New Revision: 10141

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PacketSender.java
Log:
Quick hack of node bandwidth Bytes per second until someone commits something 
less volatile.

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-08-16 21:41:34 UTC (rev 10140)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-08-16 21:43:51 UTC (rev 10141)
@@ -194,8 +194,14 @@
                                        activityList.addChild("li", 
"ARK\u00a0Fetch\u00a0Requests:\u00a0" + numARKFetchers);
                                }
                                long[] total = 
IOStatisticCollector.getTotalIO();
-                               activityList.addChild("li", "Output:\u00a0" + 
SizeUtil.formatSize(total[0]));
-                               activityList.addChild("li", "Input:\u00a0" + 
SizeUtil.formatSize(total[1]));
+                               activityList.addChild("li", "Total 
Output:\u00a0" + SizeUtil.formatSize(total[0]));
+                               activityList.addChild("li", "Total 
Input:\u00a0" + SizeUtil.formatSize(total[1]));
+                               long[] rate = node.getNodeIOStats();
+                               long delta = (rate[5] - rate[2]) / 1000;
+                               long output_rate = (rate[3] - rate[0]) / delta;
+                               long input_rate = (rate[4] - rate[1]) / delta;
+                               activityList.addChild("li", "Output 
Rate:\u00a0" + SizeUtil.formatSize(output_rate) + "ps");
+                               activityList.addChild("li", "Input Rate:\u00a0" 
+ SizeUtil.formatSize(input_rate) + "ps");
                        }
                }


Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-08-16 21:41:34 UTC (rev 
10140)
+++ trunk/freenet/src/freenet/node/Node.java    2006-08-16 21:43:51 UTC (rev 
10141)
@@ -47,6 +47,7 @@
 import freenet.io.comm.DMT;
 import freenet.io.comm.DisconnectedException;
 import freenet.io.comm.FreenetInetAddress;
+import freenet.io.comm.IOStatisticCollector;
 import freenet.io.comm.Message;
 import freenet.io.comm.MessageFilter;
 import freenet.io.comm.Peer;
@@ -420,6 +421,17 @@
        final TimeDecayingRunningAverage localSskInsertBytesReceivedAverage;
        File persistTarget; 
        File persistTemp;
+       private long previous_input_stat;
+       private long previous_output_stat;
+       private long previous_io_stat_time;
+       private long last_input_stat;
+       private long last_output_stat;
+       private long last_io_stat_time;
+       private final Object ioStatSync = new Object();
+       /** Next time to update the node I/O stats */
+       private long nextNodeIOStatsUpdateTime = -1;
+       /** Node I/O stats update interval (milliseconds) */
+       private static final long nodeIOStatsUpdateInterval = 2000;

        // The version we were before we restarted.
        public int lastVersion;
@@ -808,6 +820,13 @@

                Logger.normal(Node.class, "Creating node...");

+               previous_input_stat = 0;
+               previous_output_stat = 0;
+               previous_io_stat_time = 1;
+               last_input_stat = 0;
+               last_output_stat = 0;
+               last_io_stat_time = 3;
+
                // Bandwidth limit

                // FIXME These should not be static !!!! Need a context object 
for BT for bwlimiting.
@@ -2530,7 +2549,7 @@
                int numberOfBursting = 
getPeerNodeStatusSize(PEER_NODE_STATUS_BURSTING);
                Logger.normal(this, "Connected: "+numberOfConnected+"  Routing 
Backed Off: "+numberOfRoutingBackedOff+"  Too New: "+numberOfTooNew+"  Too Old: 
"+numberOfTooOld+"  Disconnected: "+numberOfDisconnected+"  Never Connected: 
"+numberOfNeverConnected+"  Disabled: "+numberOfDisabled+"  Bursting: 
"+numberOfBursting+"  Listening: "+numberOfListening+"  Listen Only: 
"+numberOfListenOnly);
                nextPeerNodeStatusLogTime = now + peerNodeStatusLogInterval;
-         }
+               }
        }

        /**
@@ -2911,4 +2930,34 @@
                return fs;
        }

+       /**
+        * Update the node-wide bandwidth I/O stats if the timer has expired
+        */
+       public void maybeUpdateNodeIOStats(long now) {
+               if(now > nextNodeIOStatsUpdateTime) {
+                       long[] io_stats = IOStatisticCollector.getTotalIO();
+                       synchronized(ioStatSync) {
+                               previous_output_stat = last_output_stat;
+                               previous_input_stat = last_input_stat;
+                               previous_io_stat_time = last_io_stat_time;
+                               last_output_stat = io_stats[ 0 ];
+                               last_input_stat = io_stats[ 1 ];
+                               last_io_stat_time = now;
+                       }
+                       nextNodeIOStatsUpdateTime = now + 
nodeIOStatsUpdateInterval;
+               }
+       }
+
+       public long[] getNodeIOStats() {
+               long[] result = new long[6];
+               synchronized(ioStatSync) {
+                       result[ 0 ] = previous_output_stat;
+                       result[ 1 ] = previous_input_stat;
+                       result[ 2 ] = previous_io_stat_time;
+                       result[ 3 ] = last_output_stat;
+                       result[ 4 ] = last_input_stat;
+                       result[ 5 ] = last_io_stat_time;
+               }
+               return result;
+       }
 }

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-08-16 21:41:34 UTC 
(rev 10140)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-08-16 21:43:51 UTC 
(rev 10141)
@@ -151,6 +151,7 @@
         node.maybeUpdateOldestNeverConnectedPeerAge(now);
         node.maybeStartAReadyARKFetcher(now);
         node.maybeUpdatePeerManagerUserAlertStats(now);
+        node.maybeUpdateNodeIOStats(now);
         long nextActionTime = Long.MAX_VALUE;
         long oldTempNow = now;
         for(int i=0;i<nodes.length;i++) {


Reply via email to