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++) {