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:&nbsp;").append(nodeAveragePingTime).append("ms</li>");
>                       
> buf.append("<li>networkSizeEstimate:&nbsp;").append(networkSizeEstimate).append("&nbsp;nodes</li>");
>                       
> buf.append("<li>nodeUptime:&nbsp;").append(nodeUptimeString).append("</li>");
> +                     
> buf.append("<li>missRoutingDistance:&nbsp;").append(fix4.format(missRoutingDistance)).append("</li>");
> +                     
> buf.append("<li>backedoffPercent:&nbsp;").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>

Reply via email to