From 5f12688a9058f8aa3b789d4158a7ec08ec1ddea4 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 18 Jan 2010 14:57:03 +0000 Subject: [PATCH] * Console: Add a tunnel share ratio estimate --- .../i2p/router/web/SummaryBarRenderer.java | 6 +++++ .../src/net/i2p/router/web/SummaryHelper.java | 9 ++++++++ apps/routerconsole/jsp/help.jsp | 7 +++++- .../i2p/router/DummyTunnelManagerFacade.java | 1 + .../net/i2p/router/TunnelManagerFacade.java | 1 + .../router/tunnel/pool/TunnelPoolManager.java | 23 +++++++++++++++++++ 6 files changed, 46 insertions(+), 1 deletion(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java index 89922dec81..af3323571d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java @@ -378,6 +378,12 @@ public class SummaryBarRenderer { .append(_("Participating")) .append(":</b></td><td align=\"right\">") .append(_helper.getParticipatingTunnels()) + .append("</td></tr>\n" + + + "<tr><td align=\"left\"><b>") + .append(_("Share ratio")) + .append(":</b></td><td align=\"right\">") + .append(_helper.getShareRatio()) .append("</td></tr>\n" + "</table><hr><h3><a href=\"/jobs.jsp\" target=\"_top\" title=\"") diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index d1e8cb7fda..fdf2b46ac8 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -499,6 +499,15 @@ public class SummaryHelper extends HelperBase { return _context.tunnelManager().getParticipatingCount(); } + /** @since 0.7.10 */ + public String getShareRatio() { + if (_context == null) + return "0"; + double sr = _context.tunnelManager().getShareRatio(); + DecimalFormat fmt = new DecimalFormat("##0.00"); + return fmt.format(sr); + } + /** * How lagged our job queue is over the last minute (pretty printed with * the units attached) diff --git a/apps/routerconsole/jsp/help.jsp b/apps/routerconsole/jsp/help.jsp index 50c430f02d..86acd6dace 100644 --- a/apps/routerconsole/jsp/help.jsp +++ b/apps/routerconsole/jsp/help.jsp @@ -92,7 +92,12 @@ shared bandwidth, and amount of locally-generated traffic. The recommended method for limiting participating tunnels is to change your share percentage on the <a href="config.jsp#help">configuration page</a>. You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on -the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</ul> +the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>. +<li class="tidylist"><b>Share ratio:</b> +The number of participating tunnels you route for others, divided by the total number of hops in +all your exploratory and client tunnels. +A number greater than 1.00 means you are contributing more tunnels to the network than you are using. +</ul> <h3>Congestion</h3><div align="justify"> Some basic indications of router overload:</div><ul> diff --git a/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java b/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java index 4b8fb486e4..2adc9ac338 100644 --- a/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java +++ b/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java @@ -35,6 +35,7 @@ class DummyTunnelManagerFacade implements TunnelManagerFacade { public int getFreeTunnelCount() { return 0; } public int getOutboundTunnelCount() { return 0; } public int getInboundClientTunnelCount() { return 0; } + public double getShareRatio() { return 0d; } public int getOutboundClientTunnelCount() { return 0; } public long getLastParticipatingExpiration() { return -1; } public void buildTunnels(Destination client, ClientTunnelSettings settings) {} diff --git a/router/java/src/net/i2p/router/TunnelManagerFacade.java b/router/java/src/net/i2p/router/TunnelManagerFacade.java index 148499a43d..b1cfd5c289 100644 --- a/router/java/src/net/i2p/router/TunnelManagerFacade.java +++ b/router/java/src/net/i2p/router/TunnelManagerFacade.java @@ -51,6 +51,7 @@ public interface TunnelManagerFacade extends Service { public int getInboundClientTunnelCount(); /** how many outbound client tunnels do we have available? */ public int getOutboundClientTunnelCount(); + public double getShareRatio(); /** When does the last tunnel we are participating in expire? */ public long getLastParticipatingExpiration(); diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index bbee14a484..fbb2bc77f0 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -193,6 +193,29 @@ public class TunnelPoolManager implements TunnelManagerFacade { public int getParticipatingCount() { return _context.tunnelDispatcher().getParticipatingCount(); } public long getLastParticipatingExpiration() { return _context.tunnelDispatcher().getLastParticipatingExpiration(); } + /** + * @return (number of part. tunnels) / (estimated total number of hops in our expl.+client tunnels) + * 100 max. + * We just use length setting, not variance, for speed + * @since 0.7.10 + */ + public double getShareRatio() { + int part = getParticipatingCount(); + if (part <= 0) + return 0d; + List<TunnelPool> pools = new ArrayList(); + listPools(pools); + int count = 0; + for (int i = 0; i < pools.size(); i++) { + TunnelPool pool = pools.get(i); + count += pool.size() * pool.getSettings().getLength(); + } + if (count <= 0) + return 100d; + return Math.min(part / (double) count, 100d); + } + + public boolean isValidTunnel(Hash client, TunnelInfo tunnel) { if (tunnel.getExpiration() < _context.clock().now()) return false; -- GitLab