forked from I2P_Developers/i2p.i2p
Console: Split netdb output into pages
This commit is contained in:
@ -5,6 +5,7 @@ import java.util.Locale;
|
||||
|
||||
import net.i2p.crypto.SigType;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.SystemVersion;
|
||||
import net.i2p.router.web.HelperBase;
|
||||
|
||||
public class NetDbHelper extends HelperBase {
|
||||
@ -12,12 +13,16 @@ public class NetDbHelper extends HelperBase {
|
||||
private String _version;
|
||||
private String _country;
|
||||
private String _family, _caps, _ip, _sybil, _mtu, _ssucaps, _ipv6, _transport;
|
||||
private int _full, _port, _cost;
|
||||
private int _full, _port, _cost, _page;
|
||||
private int _limit = DEFAULT_LIMIT;
|
||||
private boolean _lease;
|
||||
private boolean _debug;
|
||||
private boolean _graphical;
|
||||
private SigType _type;
|
||||
|
||||
private static final int DEFAULT_LIMIT = SystemVersion.isARM() ? 250 : 500;
|
||||
private static final int DEFAULT_PAGE = 0;
|
||||
|
||||
private static final String titles[] =
|
||||
{_x("Summary"), // 0
|
||||
_x("Local Router"), // 1
|
||||
@ -147,6 +152,26 @@ public class NetDbHelper extends HelperBase {
|
||||
_lease = _debug || "1".equals(l);
|
||||
}
|
||||
|
||||
/** @since 0.9.36 */
|
||||
public void setLimit(String f) {
|
||||
try {
|
||||
_limit = Integer.parseInt(f);
|
||||
if (_limit <= 0)
|
||||
_limit = Integer.MAX_VALUE;
|
||||
else if (_limit <= 10)
|
||||
_limit = 10;
|
||||
} catch (NumberFormatException nfe) {}
|
||||
}
|
||||
|
||||
/** @since 0.9.36 */
|
||||
public void setPage(String f) {
|
||||
try {
|
||||
_page = Integer.parseInt(f) - 1;
|
||||
if (_page < 0)
|
||||
_page = 0;
|
||||
} catch (NumberFormatException nfe) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* call for non-text-mode browsers
|
||||
* @since 0.9.1
|
||||
@ -166,7 +191,8 @@ public class NetDbHelper extends HelperBase {
|
||||
_family != null || _caps != null || _ip != null || _sybil != null ||
|
||||
_port != 0 || _type != null || _mtu != null || _ipv6 != null ||
|
||||
_ssucaps != null || _transport != null || _cost != 0)
|
||||
renderer.renderRouterInfoHTML(_out, _routerPrefix, _version, _country,
|
||||
renderer.renderRouterInfoHTML(_out, _limit, _page,
|
||||
_routerPrefix, _version, _country,
|
||||
_family, _caps, _ip, _sybil, _port, _type,
|
||||
_mtu, _ipv6, _ssucaps, _transport, _cost);
|
||||
else if (_lease)
|
||||
@ -176,7 +202,7 @@ public class NetDbHelper extends HelperBase {
|
||||
else if (_full == 4)
|
||||
renderLookupForm();
|
||||
else
|
||||
renderer.renderStatusHTML(_out, _full);
|
||||
renderer.renderStatusHTML(_out, _limit, _page, _full);
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
|
@ -86,12 +86,14 @@ class NetDbRenderer {
|
||||
/**
|
||||
* One String must be non-null
|
||||
*
|
||||
* @param page zero-based
|
||||
* @param routerPrefix may be null. "." for our router only
|
||||
* @param version may be null
|
||||
* @param country may be null
|
||||
* @param family may be null
|
||||
*/
|
||||
public void renderRouterInfoHTML(Writer out, String routerPrefix, String version,
|
||||
public void renderRouterInfoHTML(Writer out, int pageSize, int page,
|
||||
String routerPrefix, String version,
|
||||
String country, String family, String caps,
|
||||
String ip, String sybil, int port, SigType type,
|
||||
String mtu, String ipv6, String ssucaps,
|
||||
@ -101,6 +103,44 @@ class NetDbRenderer {
|
||||
if (".".equals(routerPrefix)) {
|
||||
renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
|
||||
} else {
|
||||
StringBuilder ubuf = new StringBuilder();
|
||||
if (routerPrefix != null)
|
||||
ubuf.append("&r=").append(routerPrefix);
|
||||
if (version != null)
|
||||
ubuf.append("&v=").append(version);
|
||||
if (country != null)
|
||||
ubuf.append("&c=").append(country);
|
||||
if (family != null)
|
||||
ubuf.append("&fam=").append(family);
|
||||
if (caps != null)
|
||||
ubuf.append("&caps=").append(caps);
|
||||
if (tr != null)
|
||||
ubuf.append("&tr=").append(tr);
|
||||
if (type != null)
|
||||
ubuf.append("&type=").append(type);
|
||||
if (ip != null)
|
||||
ubuf.append("&ip=").append(ip);
|
||||
if (port != 0)
|
||||
ubuf.append("&port=").append(port);
|
||||
if (mtu != null)
|
||||
ubuf.append("&mtu=").append(mtu);
|
||||
if (ipv6 != null)
|
||||
ubuf.append("&ipv6=").append(ipv6);
|
||||
if (ssucaps != null)
|
||||
ubuf.append("&ssucaps=").append(ssucaps);
|
||||
if (cost != 0)
|
||||
ubuf.append("&cost=").append(cost);
|
||||
if (sybil != null)
|
||||
ubuf.append("&sybil=").append(sybil);
|
||||
if (page > 0) {
|
||||
buf.append("<div class=\"netdbnotfound\">" +
|
||||
"<a href=\"/netdb?pg=").append(page)
|
||||
.append("&ps=").append(pageSize).append(ubuf).append("\">");
|
||||
buf.append(_t("Previous Page"));
|
||||
buf.append("</a> ");
|
||||
buf.append(_t("Page")).append(' ').append(page + 1);
|
||||
buf.append("</div>");
|
||||
}
|
||||
boolean notFound = true;
|
||||
Set<RouterInfo> routers = _context.netDb().getRouters();
|
||||
int ipMode = 0;
|
||||
@ -122,6 +162,11 @@ class NetDbRenderer {
|
||||
}
|
||||
}
|
||||
}
|
||||
int toSkip = pageSize * page;
|
||||
int skipped = 0;
|
||||
int written = 0;
|
||||
boolean morePages = false;
|
||||
outerloop:
|
||||
for (RouterInfo ri : routers) {
|
||||
Hash key = ri.getIdentity().getHash();
|
||||
if ((routerPrefix != null && key.toBase64().startsWith(routerPrefix)) ||
|
||||
@ -131,6 +176,14 @@ class NetDbRenderer {
|
||||
(caps != null && ri.getCapabilities().contains(caps)) ||
|
||||
(tr != null && ri.getTargetAddress(tr) != null) ||
|
||||
(type != null && type == ri.getIdentity().getSigType())) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -139,6 +192,14 @@ class NetDbRenderer {
|
||||
for (RouterAddress ra : ri.getAddresses()) {
|
||||
if (ipMode == 0) {
|
||||
if (ip.equals(ra.getHost())) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -148,6 +209,14 @@ class NetDbRenderer {
|
||||
} else {
|
||||
String host = ra.getHost();
|
||||
if (host != null && host.startsWith(ip)) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -159,6 +228,14 @@ class NetDbRenderer {
|
||||
} else if (port != 0) {
|
||||
for (RouterAddress ra : ri.getAddresses()) {
|
||||
if (port == ra.getPort()) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -169,6 +246,14 @@ class NetDbRenderer {
|
||||
} else if (mtu != null) {
|
||||
for (RouterAddress ra : ri.getAddresses()) {
|
||||
if (mtu.equals(ra.getOption("mtu"))) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -180,6 +265,14 @@ class NetDbRenderer {
|
||||
for (RouterAddress ra : ri.getAddresses()) {
|
||||
String host = ra.getHost();
|
||||
if (host != null && host.startsWith(ipv6)) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -192,6 +285,14 @@ class NetDbRenderer {
|
||||
if (!"SSU".equals(ra.getTransportStyle()))
|
||||
continue;
|
||||
if (ssucaps.equals(ra.getOption("caps"))) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -202,6 +303,14 @@ class NetDbRenderer {
|
||||
} else if (cost != 0) {
|
||||
for (RouterAddress ra : ri.getAddresses()) {
|
||||
if (cost == ra.getCost()) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
break;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break outerloop;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, true);
|
||||
if (sybil != null)
|
||||
sybils.add(key);
|
||||
@ -224,6 +333,22 @@ class NetDbRenderer {
|
||||
buf.append(_t("Family")).append(' ').append(family);
|
||||
buf.append(' ').append(_t("not found in network database"));
|
||||
buf.append("</div>");
|
||||
} else if (page > 0 || morePages) {
|
||||
buf.append("<div class=\"netdbnotfound\">");
|
||||
if (page > 0) {
|
||||
buf.append("<a href=\"/netdb?pg=").append(page)
|
||||
.append("&ps=").append(pageSize).append(ubuf).append("\">");
|
||||
buf.append(_t("Previous Page"));
|
||||
buf.append("</a> ");
|
||||
}
|
||||
buf.append(_t("Page")).append(' ').append(page + 1);
|
||||
if (morePages) {
|
||||
buf.append(" <a href=\"/netdb?pg=").append(page + 2)
|
||||
.append("&ps=").append(pageSize).append(ubuf).append("\">");
|
||||
buf.append(_t("Next Page"));
|
||||
buf.append("</a>");
|
||||
}
|
||||
buf.append("</div>");
|
||||
}
|
||||
}
|
||||
out.write(buf.toString());
|
||||
@ -450,7 +575,7 @@ class NetDbRenderer {
|
||||
/**
|
||||
* @param mode 0: charts only; 1: full routerinfos; 2: abbreviated routerinfos
|
||||
*/
|
||||
public void renderStatusHTML(Writer out, int mode) throws IOException {
|
||||
public void renderStatusHTML(Writer out, int pageSize, int page, int mode) throws IOException {
|
||||
if (!_context.netDb().isInitialized()) {
|
||||
out.write("<div id=\"notinitialized\">");
|
||||
out.write(_t("Not initialized"));
|
||||
@ -466,8 +591,29 @@ class NetDbRenderer {
|
||||
boolean showStats = full || shortStats; // this means show the router infos
|
||||
Hash us = _context.routerHash();
|
||||
|
||||
Set<RouterInfo> routers = new TreeSet<RouterInfo>(new RouterInfoComparator());
|
||||
routers.addAll(_context.netDb().getRouters());
|
||||
int toSkip = pageSize * page;
|
||||
boolean nextpg = routers.size() > toSkip + pageSize;
|
||||
StringBuilder buf = new StringBuilder(8192);
|
||||
if (showStats) {
|
||||
if (showStats && (page > 0 || nextpg)) {
|
||||
buf.append("<div class=\"netdbnotfound\">");
|
||||
if (page > 0) {
|
||||
buf.append("<a href=\"/netdb?f=").append(mode).append("&pg=").append(page)
|
||||
.append("&ps=").append(pageSize).append("\">");
|
||||
buf.append(_t("Previous Page"));
|
||||
buf.append("</a> ");
|
||||
}
|
||||
buf.append(_t("Page")).append(' ').append(page + 1);
|
||||
if (nextpg) {
|
||||
buf.append(" <a href=\"/netdb?f=").append(mode).append("&pg=").append(page + 2)
|
||||
.append("&ps=").append(pageSize).append("\">");
|
||||
buf.append(_t("Next Page"));
|
||||
buf.append("</a>");
|
||||
}
|
||||
buf.append("</div>");
|
||||
}
|
||||
if (showStats && page == 0) {
|
||||
RouterInfo ourInfo = _context.router().getRouterInfo();
|
||||
renderRouterInfo(buf, ourInfo, true, true);
|
||||
out.write(buf.toString());
|
||||
@ -478,13 +624,22 @@ class NetDbRenderer {
|
||||
ObjectCounter<String> countries = new ObjectCounter<String>();
|
||||
int[] transportCount = new int[TNAMES.length];
|
||||
|
||||
Set<RouterInfo> routers = new TreeSet<RouterInfo>(new RouterInfoComparator());
|
||||
routers.addAll(_context.netDb().getRouters());
|
||||
int skipped = 0;
|
||||
int written = 0;
|
||||
boolean morePages = false;
|
||||
for (RouterInfo ri : routers) {
|
||||
Hash key = ri.getIdentity().getHash();
|
||||
boolean isUs = key.equals(us);
|
||||
if (!isUs) {
|
||||
if (showStats) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
if (written++ >= pageSize) {
|
||||
morePages = true;
|
||||
break;
|
||||
}
|
||||
renderRouterInfo(buf, ri, false, full);
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
@ -498,6 +653,21 @@ class NetDbRenderer {
|
||||
transportCount[classifyTransports(ri)]++;
|
||||
}
|
||||
}
|
||||
if (showStats && (page > 0 || morePages)) {
|
||||
buf.append("<div class=\"netdbnotfound\">");
|
||||
if (page > 0) {
|
||||
buf.append("<a href=\"/netdb?f=").append(mode).append("&pg=").append(page).append("&ps=").append(pageSize).append("\">");
|
||||
buf.append(_t("Previous Page"));
|
||||
buf.append("</a> ");
|
||||
}
|
||||
buf.append(_t("Page")).append(' ').append(page + 1);
|
||||
if (morePages) {
|
||||
buf.append(" <a href=\"/netdb?f=").append(mode).append("&pg=").append(page + 2).append("&ps=").append(pageSize).append("\">");
|
||||
buf.append(_t("Next Page"));
|
||||
buf.append("</a>");
|
||||
}
|
||||
buf.append("</div>");
|
||||
}
|
||||
long end = System.currentTimeMillis();
|
||||
if (log.shouldWarn())
|
||||
log.warn("part 1 took " + (end - start));
|
||||
|
@ -36,5 +36,7 @@
|
||||
<jsp:setProperty name="netdbHelper" property="mtu" value="<%=request.getParameter(\"mtu\")%>" />
|
||||
<jsp:setProperty name="netdbHelper" property="ssucaps" value="<%=request.getParameter(\"ssucaps\")%>" />
|
||||
<jsp:setProperty name="netdbHelper" property="transport" value="<%=request.getParameter(\"tr\")%>" />
|
||||
<jsp:setProperty name="netdbHelper" property="limit" value="<%=request.getParameter(\"ps\")%>" />
|
||||
<jsp:setProperty name="netdbHelper" property="page" value="<%=request.getParameter(\"pg\")%>" />
|
||||
<jsp:getProperty name="netdbHelper" property="netDbSummary" />
|
||||
</div></body></html>
|
||||
|
Reference in New Issue
Block a user