I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit ae0bcc49 authored by zzz's avatar zzz
Browse files

* netdb.jsp: Don't show stats by default

    * RebuildRouterInfoJob: Don't run it
    * PublishLocalRouterInfoJob:
      - Delay for 5m at startup
      - Run every 20m (was 7.5m)
parent d8298c63
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,7 @@ public class NetDbHelper { ...@@ -11,6 +11,7 @@ public class NetDbHelper {
private RouterContext _context; private RouterContext _context;
private Writer _out; private Writer _out;
private String _routerPrefix; private String _routerPrefix;
private boolean _full = false;
/** /**
* Configure this bean to query a particular router context * Configure this bean to query a particular router context
...@@ -30,6 +31,7 @@ public class NetDbHelper { ...@@ -30,6 +31,7 @@ public class NetDbHelper {
public void setWriter(Writer writer) { _out = writer; } public void setWriter(Writer writer) { _out = writer; }
public void setRouter(String r) { _routerPrefix = r; } public void setRouter(String r) { _routerPrefix = r; }
public void setFull(String f) { _full = "1".equals(f); };
public String getNetDbSummary() { public String getNetDbSummary() {
try { try {
...@@ -37,14 +39,14 @@ public class NetDbHelper { ...@@ -37,14 +39,14 @@ public class NetDbHelper {
if (_routerPrefix != null) if (_routerPrefix != null)
_context.netDb().renderRouterInfoHTML(_out, _routerPrefix); _context.netDb().renderRouterInfoHTML(_out, _routerPrefix);
else else
_context.netDb().renderStatusHTML(_out); _context.netDb().renderStatusHTML(_out, _full);
return ""; return "";
} else { } else {
ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024); ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024);
if (_routerPrefix != null) if (_routerPrefix != null)
_context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix); _context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix);
else else
_context.netDb().renderStatusHTML(new OutputStreamWriter(baos)); _context.netDb().renderStatusHTML(new OutputStreamWriter(baos), _full);
return new String(baos.toByteArray()); return new String(baos.toByteArray());
} }
} catch (IOException ioe) { } catch (IOException ioe) {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />
<jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="netdbHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="netdbHelper" property="writer" value="<%=out%>" />
<jsp:setProperty name="netdbHelper" property="full" value="<%=request.getParameter("f")%>" />
<jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter("r")%>" /> <jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter("r")%>" />
<jsp:getProperty name="netdbHelper" property="netDbSummary" /> <jsp:getProperty name="netdbHelper" property="netDbSummary" />
</div> </div>
......
...@@ -62,4 +62,5 @@ public abstract class NetworkDatabaseFacade implements Service { ...@@ -62,4 +62,5 @@ public abstract class NetworkDatabaseFacade implements Service {
public int getKnownRouters() { return 0; } public int getKnownRouters() { return 0; }
public int getKnownLeaseSets() { return 0; } public int getKnownLeaseSets() { return 0; }
public void renderRouterInfoHTML(Writer out, String s) throws IOException {} public void renderRouterInfoHTML(Writer out, String s) throws IOException {}
public void renderStatusHTML(Writer out, boolean b) throws IOException {}
} }
...@@ -20,12 +20,12 @@ import net.i2p.router.RouterContext; ...@@ -20,12 +20,12 @@ import net.i2p.router.RouterContext;
import net.i2p.util.Log; import net.i2p.util.Log;
/** /**
* Publish the local router's RouterInfo every 5 to 10 minutes * Publish the local router's RouterInfo periodically
* *
*/ */
public class PublishLocalRouterInfoJob extends JobImpl { public class PublishLocalRouterInfoJob extends JobImpl {
private Log _log; private Log _log;
final static long PUBLISH_DELAY = 5*60*1000; // every 5 to 10 minutes (since we randomize) final static long PUBLISH_DELAY = 20*60*1000;
public PublishLocalRouterInfoJob(RouterContext ctx) { public PublishLocalRouterInfoJob(RouterContext ctx) {
super(ctx); super(ctx);
...@@ -67,6 +67,6 @@ public class PublishLocalRouterInfoJob extends JobImpl { ...@@ -67,6 +67,6 @@ public class PublishLocalRouterInfoJob extends JobImpl {
} catch (DataFormatException dfe) { } catch (DataFormatException dfe) {
_log.error("Error signing the updated local router info!", dfe); _log.error("Error signing the updated local router info!", dfe);
} }
requeue(PUBLISH_DELAY + getContext().random().nextInt((int)PUBLISH_DELAY)); requeue((PUBLISH_DELAY/2) + getContext().random().nextInt((int)PUBLISH_DELAY));
} }
} }
...@@ -125,6 +125,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -125,6 +125,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
private final static long ROUTER_INFO_EXPIRATION_SHORT = 90*60*1000l; private final static long ROUTER_INFO_EXPIRATION_SHORT = 90*60*1000l;
private final static long EXPLORE_JOB_DELAY = 10*60*1000l; private final static long EXPLORE_JOB_DELAY = 10*60*1000l;
private final static long PUBLISH_JOB_DELAY = 5*60*1000l;
public KademliaNetworkDatabaseFacade(RouterContext context) { public KademliaNetworkDatabaseFacade(RouterContext context) {
_context = context; _context = context;
...@@ -326,7 +327,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -326,7 +327,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
} }
// periodically update and resign the router's 'published date', which basically // periodically update and resign the router's 'published date', which basically
// serves as a version // serves as a version
_context.jobQueue().addJob(new PublishLocalRouterInfoJob(_context)); Job plrij = new PublishLocalRouterInfoJob(_context);
plrij.getTiming().setStartAfter(_context.clock().now() + PUBLISH_JOB_DELAY);
_context.jobQueue().addJob(plrij);
try { try {
publish(ri); publish(ri);
} catch (IllegalArgumentException iae) { } catch (IllegalArgumentException iae) {
...@@ -970,7 +973,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -970,7 +973,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
StringBuffer buf = new StringBuffer(4*1024); StringBuffer buf = new StringBuffer(4*1024);
buf.append("<h2>Network Database RouterInfo Lookup</h2>\n"); buf.append("<h2>Network Database RouterInfo Lookup</h2>\n");
if (".".equals(routerPrefix)) { if (".".equals(routerPrefix)) {
renderRouterInfo(buf, _context.router().getRouterInfo(), true); renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
} else { } else {
boolean notFound = true; boolean notFound = true;
Set routers = getRouters(); Set routers = getRouters();
...@@ -978,7 +981,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -978,7 +981,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
RouterInfo ri = (RouterInfo)iter.next(); RouterInfo ri = (RouterInfo)iter.next();
Hash key = ri.getIdentity().getHash(); Hash key = ri.getIdentity().getHash();
if (key.toBase64().startsWith(routerPrefix)) { if (key.toBase64().startsWith(routerPrefix)) {
renderRouterInfo(buf, ri, false); renderRouterInfo(buf, ri, false, true);
notFound = false; notFound = false;
} }
} }
...@@ -990,7 +993,14 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -990,7 +993,14 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
} }
public void renderStatusHTML(Writer out) throws IOException { public void renderStatusHTML(Writer out) throws IOException {
StringBuffer buf = new StringBuffer(getKnownRouters() * 2048); renderStatusHTML(out, true);
}
public void renderStatusHTML(Writer out, boolean full) throws IOException {
int size = getKnownRouters() * 512;
if (full)
size *= 4;
StringBuffer buf = new StringBuffer(size);
buf.append("<h2>Network Database Contents</h2>\n"); buf.append("<h2>Network Database Contents</h2>\n");
if (!_initialized) { if (!_initialized) {
buf.append("<i>Not initialized</i>\n"); buf.append("<i>Not initialized</i>\n");
...@@ -1044,10 +1054,15 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -1044,10 +1054,15 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
} }
Hash us = _context.routerHash(); Hash us = _context.routerHash();
out.write("<h3>Routers</h3>\n"); out.write("<a name=\"routers\" /><h3>Routers (<a href=\"netdb.jsp");
if (full)
out.write("#routers\" >view without");
else
out.write("?f=1#routers\" >view with");
out.write(" stats</a>)</h3>\n");
RouterInfo ourInfo = _context.router().getRouterInfo(); RouterInfo ourInfo = _context.router().getRouterInfo();
renderRouterInfo(buf, ourInfo, true); renderRouterInfo(buf, ourInfo, true, true);
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
...@@ -1061,7 +1076,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -1061,7 +1076,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
Hash key = ri.getIdentity().getHash(); Hash key = ri.getIdentity().getHash();
boolean isUs = key.equals(us); boolean isUs = key.equals(us);
if (!isUs) { if (!isUs) {
renderRouterInfo(buf, ri, false); renderRouterInfo(buf, ri, false, full);
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
String coreVersion = ri.getOption("coreVersion"); String coreVersion = ri.getOption("coreVersion");
...@@ -1102,7 +1117,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -1102,7 +1117,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
out.flush(); out.flush();
} }
private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs) { private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs, boolean full) {
String hash = info.getIdentity().getHash().toBase64(); String hash = info.getIdentity().getHash().toBase64();
buf.append("<a name=\"").append(hash.substring(0, 6)).append("\" />"); buf.append("<a name=\"").append(hash.substring(0, 6)).append("\" />");
if (isUs) { if (isUs) {
...@@ -1129,13 +1144,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { ...@@ -1129,13 +1144,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
} }
} }
buf.append("</i><br />\n"); buf.append("</i><br />\n");
buf.append("Stats: <br /><i><code>\n"); if (full) {
for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) { buf.append("Stats: <br /><i><code>\n");
String key = (String)iter.next(); for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
String val = info.getOption(key); String key = (String)iter.next();
buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br />\n"); String val = info.getOption(key);
buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br />\n");
}
buf.append("</code></i>\n");
} else {
buf.append("<a href=\"netdb.jsp?r=").append(hash.substring(0, 6)).append("\" >Full entry</a>\n");
} }
buf.append("</code></i><hr />\n"); buf.append("<hr />\n");
} }
} }
...@@ -28,6 +28,13 @@ import net.i2p.router.RouterContext; ...@@ -28,6 +28,13 @@ import net.i2p.router.RouterContext;
import net.i2p.util.Log; import net.i2p.util.Log;
/** /**
* This used be called from StartAcceptingClientsJob but is now disabled.
* It is still called once from LoadRouterInfoJob (but not run as a Job).
*
* The following comments appear to be incorrect...
* it rebuilds if the router.info file does not exist.
* There is no check for a router.info.rebuild file.
*
* If the file router.info.rebuild exists, rebuild the router info and republish. * If the file router.info.rebuild exists, rebuild the router info and republish.
* This is useful for dhcp or other situations where the router addresses change - * This is useful for dhcp or other situations where the router addresses change -
* simply create the router.info.rebuild file after modifying router.config and within * simply create the router.info.rebuild file after modifying router.config and within
......
...@@ -28,7 +28,8 @@ public class StartAcceptingClientsJob extends JobImpl { ...@@ -28,7 +28,8 @@ public class StartAcceptingClientsJob extends JobImpl {
getContext().clientManager().startup(); getContext().clientManager().startup();
getContext().jobQueue().addJob(new ReadConfigJob(getContext())); getContext().jobQueue().addJob(new ReadConfigJob(getContext()));
getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext())); // pointless
//getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
getContext().jobQueue().allowParallelOperation(); getContext().jobQueue().allowParallelOperation();
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment