Nice, but not entirely meaningful as we don't know what the normal range
of requests' target locations is ... does SNMP work at the moment? Could
we use it to plot a frequency distribution graph in MRTG?
Oh and misrouting has one S. :) And variables should start with a lower
case letter.
On Sat, Jun 24, 2006 at 11:17:44PM +0000, odonata at freenetproject.org wrote:
> Author: odonata
> Date: 2006-06-24 23:17:41 +0000 (Sat, 24 Jun 2006)
> New Revision: 9379
>
> Modified:
> trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
> trunk/freenet/src/freenet/node/Node.java
> trunk/freenet/src/freenet/node/PeerManager.java
> Log:
> Add metrics to allow us to judge how much miss routing
> backoff we are experiencing and to track the percentage of nodes
> backedoff when routing. Stats are only updated in advanced mode.
>
>
> Modified:
> trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
> ===================================================================
> --- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
> 2006-06-24 02:28:48 UTC (rev 9378)
> +++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
> 2006-06-24 23:17:41 UTC (rev 9379)
> @@ -7,6 +7,7 @@
> import java.net.URI;
> import java.net.URL;
> import java.net.URLConnection;
> +import java.text.DecimalFormat;
> import java.util.Arrays;
> import java.util.Comparator;
> import java.util.Enumeration;
> @@ -99,6 +100,10 @@
> int bwlimitDelayTime = (int) node.getBwlimitDelayTime();
> int nodeAveragePingTime = (int) node.getNodeAveragePingTime();
> int networkSizeEstimate = (int) node.getNetworkSizeEstimate( 0
> );
> + DecimalFormat fix4 = new DecimalFormat("0.0000");
> + double missRoutingDistance =
> node.MissRoutingDistance.currentValue();
> + DecimalFormat fix1 = new DecimalFormat("##0.0%");
> + double backedoffPercent = node.BackedoffPercent.currentValue();
> String nodeUptimeString = timeIntervalToString(( now -
> node.startupTime ) / 1000);
>
> buf.append("<table class=\"column\"><tr><td class=\"first\">");
> @@ -113,6 +118,8 @@
>
> buf.append("<li>nodeAveragePingTime: ").append(nodeAveragePingTime).append("ms</li>");
>
> buf.append("<li>networkSizeEstimate: ").append(networkSizeEstimate).append(" nodes</li>");
>
> buf.append("<li>nodeUptime: ").append(nodeUptimeString).append("</li>");
> +
> buf.append("<li>missRoutingDistance: ").append(fix4.format(missRoutingDistance)).append("</li>");
> +
> buf.append("<li>backedoffPercent: ").append(fix1.format(backedoffPercent)).append("</li>");
> buf.append("</ul></div>");
> buf.append("</div>\n");
> buf.append("</td><td>");
>
> Modified: trunk/freenet/src/freenet/node/Node.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/Node.java 2006-06-24 02:28:48 UTC (rev
> 9378)
> +++ trunk/freenet/src/freenet/node/Node.java 2006-06-24 23:17:41 UTC (rev
> 9379)
> @@ -639,6 +639,10 @@
>
> // Debugging stuff
> private static final boolean USE_RAM_PUBKEYS_CACHE = true;
> +
> + // various metrics
> + public RunningAverage MissRoutingDistance = new
> BootstrappingDecayingRunningAverage(0.0, 0.0, 1.0, 500);
> + public RunningAverage BackedoffPercent = new
> BootstrappingDecayingRunningAverage(0.0, 0.0, 1.0, 500);
>
> /**
> * Read all storable settings (identity etc) from the node file.
>
> Modified: trunk/freenet/src/freenet/node/PeerManager.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PeerManager.java 2006-06-24 02:28:48 UTC
> (rev 9378)
> +++ trunk/freenet/src/freenet/node/PeerManager.java 2006-06-24 23:17:41 UTC
> (rev 9379)
> @@ -377,10 +377,29 @@
> }
>
> /**
> + * FIXME
> + * This scans the same array 4 times. It would be better to scan once
> and execute 4 callbacks...
> + * For this reason the metrics are only updated if advanced mode is
> enabled
> + */
> + public PeerNode closerPeer(PeerNode pn, HashSet routedTo, HashSet
> notIgnored, double loc, boolean ignoreSelf) {
> + PeerNode best = _closerPeer(pn, routedTo, notIgnored, loc, ignoreSelf,
> false);
> + if (node.getToadletContainer().isAdvancedDarknetEnabled()) {
> + PeerNode nbo = _closerPeer(pn, routedTo, notIgnored, loc,
> ignoreSelf, true);
> + node.MissRoutingDistance.report(distance(best,
> nbo.getLocation().getValue()));
> + int numberOfConnected =
> node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_CONNECTED);
> + int numberOfRoutingBackedOff =
> node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF);
> + if (numberOfRoutingBackedOff + numberOfConnected > 0 ) {
> + node.BackedoffPercent.report((double)
> numberOfRoutingBackedOff / (double) (numberOfRoutingBackedOff +
> numberOfConnected));
> + }
> + }
> + return best;
> + }
> +
> + /**
> * Find the peer, if any, which is closer to the target location
> * than we are, and is not included in the provided set.
> */
> - public PeerNode closerPeer(PeerNode pn, HashSet routedTo, HashSet
> notIgnored, double loc, boolean ignoreSelf) {
> + private PeerNode _closerPeer(PeerNode pn, HashSet routedTo, HashSet
> notIgnored, double loc, boolean ignoreSelf, boolean ignoreBackedOff) {
> PeerNode[] peers = connectedPeers;
> // No locking necessary. We won't modify it, and if another method
> does, it will copy-and-assign.
> Logger.minor(this, "Choosing closest peer:
> connectedPeers="+peers.length);
> @@ -405,7 +424,7 @@
> Logger.minor(this, "Skipping (not connected): "+p.getPeer());
> continue;
> }
> - if(p.isRoutingBackedOff()) {
> + if((!ignoreBackedOff) && p.isRoutingBackedOff()) {
> Logger.minor(this, "Skipping (routing backed off):
> "+p.getPeer());
> continue;
> }
--
Matthew J Toseland - toad at amphibian.dyndns.org
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20060626/c5f0bbf3/attachment.pgp>