* 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)
This commit is contained in:
@ -11,6 +11,7 @@ public class NetDbHelper {
|
||||
private RouterContext _context;
|
||||
private Writer _out;
|
||||
private String _routerPrefix;
|
||||
private boolean _full = false;
|
||||
|
||||
/**
|
||||
* Configure this bean to query a particular router context
|
||||
@ -30,6 +31,7 @@ public class NetDbHelper {
|
||||
|
||||
public void setWriter(Writer writer) { _out = writer; }
|
||||
public void setRouter(String r) { _routerPrefix = r; }
|
||||
public void setFull(String f) { _full = "1".equals(f); };
|
||||
|
||||
public String getNetDbSummary() {
|
||||
try {
|
||||
@ -37,14 +39,14 @@ public class NetDbHelper {
|
||||
if (_routerPrefix != null)
|
||||
_context.netDb().renderRouterInfoHTML(_out, _routerPrefix);
|
||||
else
|
||||
_context.netDb().renderStatusHTML(_out);
|
||||
_context.netDb().renderStatusHTML(_out, _full);
|
||||
return "";
|
||||
} else {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024);
|
||||
if (_routerPrefix != null)
|
||||
_context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix);
|
||||
else
|
||||
_context.netDb().renderStatusHTML(new OutputStreamWriter(baos));
|
||||
_context.netDb().renderStatusHTML(new OutputStreamWriter(baos), _full);
|
||||
return new String(baos.toByteArray());
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
|
@ -14,6 +14,7 @@
|
||||
<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="writer" value="<%=out%>" />
|
||||
<jsp:setProperty name="netdbHelper" property="full" value="<%=request.getParameter("f")%>" />
|
||||
<jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter("r")%>" />
|
||||
<jsp:getProperty name="netdbHelper" property="netDbSummary" />
|
||||
</div>
|
||||
|
@ -62,4 +62,5 @@ public abstract class NetworkDatabaseFacade implements Service {
|
||||
public int getKnownRouters() { return 0; }
|
||||
public int getKnownLeaseSets() { return 0; }
|
||||
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;
|
||||
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 {
|
||||
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) {
|
||||
super(ctx);
|
||||
@ -67,6 +67,6 @@ public class PublishLocalRouterInfoJob extends JobImpl {
|
||||
} catch (DataFormatException 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 {
|
||||
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 PUBLISH_JOB_DELAY = 5*60*1000l;
|
||||
|
||||
public KademliaNetworkDatabaseFacade(RouterContext context) {
|
||||
_context = context;
|
||||
@ -326,7 +327,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
}
|
||||
// periodically update and resign the router's 'published date', which basically
|
||||
// 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 {
|
||||
publish(ri);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
@ -970,7 +973,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
StringBuffer buf = new StringBuffer(4*1024);
|
||||
buf.append("<h2>Network Database RouterInfo Lookup</h2>\n");
|
||||
if (".".equals(routerPrefix)) {
|
||||
renderRouterInfo(buf, _context.router().getRouterInfo(), true);
|
||||
renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
|
||||
} else {
|
||||
boolean notFound = true;
|
||||
Set routers = getRouters();
|
||||
@ -978,7 +981,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
RouterInfo ri = (RouterInfo)iter.next();
|
||||
Hash key = ri.getIdentity().getHash();
|
||||
if (key.toBase64().startsWith(routerPrefix)) {
|
||||
renderRouterInfo(buf, ri, false);
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
notFound = false;
|
||||
}
|
||||
}
|
||||
@ -990,7 +993,14 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
}
|
||||
|
||||
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");
|
||||
if (!_initialized) {
|
||||
buf.append("<i>Not initialized</i>\n");
|
||||
@ -1044,10 +1054,15 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
}
|
||||
|
||||
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();
|
||||
renderRouterInfo(buf, ourInfo, true);
|
||||
renderRouterInfo(buf, ourInfo, true, true);
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
|
||||
@ -1061,7 +1076,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
Hash key = ri.getIdentity().getHash();
|
||||
boolean isUs = key.equals(us);
|
||||
if (!isUs) {
|
||||
renderRouterInfo(buf, ri, false);
|
||||
renderRouterInfo(buf, ri, false, full);
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
String coreVersion = ri.getOption("coreVersion");
|
||||
@ -1102,7 +1117,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
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();
|
||||
buf.append("<a name=\"").append(hash.substring(0, 6)).append("\" />");
|
||||
if (isUs) {
|
||||
@ -1129,13 +1144,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
|
||||
}
|
||||
}
|
||||
buf.append("</i><br />\n");
|
||||
if (full) {
|
||||
buf.append("Stats: <br /><i><code>\n");
|
||||
for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
|
||||
String key = (String)iter.next();
|
||||
String val = info.getOption(key);
|
||||
buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br />\n");
|
||||
}
|
||||
buf.append("</code></i><hr />\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("<hr />\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,6 +28,13 @@ import net.i2p.router.RouterContext;
|
||||
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.
|
||||
* 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
|
||||
|
@ -28,7 +28,8 @@ public class StartAcceptingClientsJob extends JobImpl {
|
||||
getContext().clientManager().startup();
|
||||
|
||||
getContext().jobQueue().addJob(new ReadConfigJob(getContext()));
|
||||
getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
|
||||
// pointless
|
||||
//getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
|
||||
getContext().jobQueue().allowParallelOperation();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user