package net.i2p.router.web; import java.io.File; import java.io.IOException; import java.io.Writer; import net.i2p.router.RouterContext; /** * Refactored from summarynoframe.jsp to save ~100KB * */ public class SummaryBarRenderer { private RouterContext _context; private SummaryHelper _helper; public SummaryBarRenderer(RouterContext context, SummaryHelper helper) { _context = context; _helper = helper; } /** * Note - ensure all links in here are absolute, as the summary bar may be displayed * on lower-level directory errors. */ public void renderSummaryHTML(Writer out) throws IOException { StringBuilder buf = new StringBuilder(8*1024); buf.append("\"")
"); File lpath = new File(_context.getBaseDir(), "docs/toolbar.html"); // you better have target="_top" for the links in there... if (lpath.exists()) { ContentHelper linkhelper = new ContentHelper(); linkhelper.setPage(lpath.getAbsolutePath()); linkhelper.setMaxLines("100"); buf.append(linkhelper.getContent()); } else { buf.append("

") .append(_("I2P Services")) .append("

\n" + "
" + "
") .append(_("Addressbook")) .append("\n" + "") .append(_("Torrents")) .append("\n" + "") .append(_("Webmail")) .append("\n" + "") .append(_("Webserver")) .append("") .append(NavHelper.getClientAppLinks(_context)) .append("
\n" + "

") .append(_("I2P Internals")) .append("


\n" + "
\n" + "") .append(_("Tunnels")) .append("\n" + "") .append(_("Peers")) .append("\n" + "") .append(_("Profiles")) .append("\n" + "") .append(_("NetDB")) .append("\n" + "") .append(_("Logs")) .append("\n" + // "") // .append(_("Jobs")) // .append("\n" + "") .append(_("Graphs")) .append("\n" + "") .append(_("Stats")) .append("\n" + "") .append(_("I2PTunnel")) .append("
\n"); out.write(buf.toString()); buf.setLength(0); } buf.append("

") .append(_("General")) .append("


" + "

") .append(_("Local Identity")) .append("


\n" + "" + "\n" + "" + "" + "
" + "") .append(_("Version")) .append(":") .append(_helper.getVersion()) .append("
") .append(_("Uptime")) .append(":") .append(_helper.getUptime()) .append("
\n" + "

") .append(_helper.getReachability()) .append("


\n"); // display all the time so we display the final failure message, and plugin update messages too buf.append(UpdateHandler.getStatus()); if (_helper.updateAvailable() || _helper.unsignedUpdateAvailable()) { if ("true".equals(System.getProperty(UpdateHandler.PROP_UPDATE_IN_PROGRESS))) { // nothing } else if( // isDone() is always false for now, see UpdateHandler // ((!update.isDone()) && _helper.getAction() == null && _helper.getUpdateNonce() == null && ConfigRestartBean.getRestartTimeRemaining() > 12*60*1000) { long nonce = _context.random().nextLong(); String prev = System.getProperty("net.i2p.router.web.UpdateHandler.nonce"); if (prev != null) System.setProperty("net.i2p.router.web.UpdateHandler.noncePrev", prev); System.setProperty("net.i2p.router.web.UpdateHandler.nonce", nonce+""); String uri = _helper.getRequestURI(); buf.append("

\n"); buf.append("\n"); if (_helper.updateAvailable()) { buf.append("\n"); } if (_helper.unsignedUpdateAvailable()) { buf.append("\n"); } buf.append("
\n"); } } buf.append("

") .append(ConfigRestartBean.renderStatus(_helper.getRequestURI(), _helper.getAction(), _helper.getConsoleNonce())) .append("


") .append(_("Peers")) .append("


\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "
") .append(_("Active")) .append(":") .append(_helper.getActivePeers()) .append(" / ") .append(_helper.getActiveProfiles()) .append("
") .append(_("Fast")) .append(":") .append(_helper.getFastPeers()) .append("
") .append(_("High capacity")) .append(":") .append(_helper.getHighCapacityPeers()) .append("
") .append(_("Integrated")) .append(":") .append(_helper.getWellIntegratedPeers()) .append("
") .append(_("Known")) .append(":") .append(_helper.getAllPeers()) .append("

\n"); out.write(buf.toString()); buf.setLength(0); boolean anotherLine = false; if (_helper.showFirewallWarning()) { buf.append("

") .append(_("Check NAT/firewall")) .append("

"); anotherLine = true; } boolean reseedInProgress = Boolean.valueOf(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress")).booleanValue(); // If showing the reseed link is allowed if (_helper.allowReseed()) { if (reseedInProgress) { // While reseed occurring, show status message instead buf.append("").append(System.getProperty("net.i2p.router.web.ReseedHandler.statusMessage","")).append("
"); } else { // While no reseed occurring, show reseed link long nonce = _context.random().nextLong(); String prev = System.getProperty("net.i2p.router.web.ReseedHandler.nonce"); if (prev != null) System.setProperty("net.i2p.router.web.ReseedHandler.noncePrev", prev); System.setProperty("net.i2p.router.web.ReseedHandler.nonce", nonce+""); String uri = _helper.getRequestURI(); buf.append("

\n"); buf.append("\n"); buf.append("

\n"); } anotherLine = true; } // If a new reseed ain't running, and the last reseed had errors, show error message if (!reseedInProgress) { String reseedErrorMessage = System.getProperty("net.i2p.router.web.ReseedHandler.errorMessage",""); if (reseedErrorMessage.length() > 0) { buf.append("").append(reseedErrorMessage).append("
"); anotherLine = true; } } if (anotherLine) buf.append("
"); buf.append("

") .append(_("Bandwidth in/out")) .append("


" + "\n" + "\n"); if (_context.router().getUptime() > 6*60*1000) { buf.append("\n"); } if (_context.router().getUptime() > 2*60*1000) { buf.append("\n"); } buf.append("
1s:") .append(_helper.getSecondKBps()) .append("Bps
5m:") .append(_helper.getFiveMinuteKBps()) .append("Bps
") .append(_("Total")) .append(":") .append(_helper.getLifetimeKBps()) .append("Bps
") .append(_("Used")) .append(":") .append(_helper.getInboundTransferred()) .append(" / ") .append(_helper.getOutboundTransferred()) .append("
\n" + "

") .append(_("Tunnels")) .append("


" + "\n" + "\n" + "\n" + "\n" + "\n" + "
") .append(_("Exploratory")) .append(":") .append(_helper.getInboundTunnels() + _helper.getOutboundTunnels()) .append("
") .append(_("Client")) .append(":") .append(_helper.getInboundClientTunnels() + _helper.getOutboundClientTunnels()) .append("
") .append(_("Participating")) .append(":") .append(_helper.getParticipatingTunnels()) .append("
") .append(_("Share ratio")) .append(":") .append(_helper.getShareRatio()) .append("

") .append(_("Congestion")) .append("


" + "\n" + "\n" + "\n" + "\n" + "\n" + "
") .append(_("Job lag")) .append(":") .append(_helper.getJobLag()) .append("
") .append(_("Message delay")) .append(":") .append(_helper.getMessageDelay()) .append("
") .append(_("Tunnel lag")) .append(":") .append(_helper.getTunnelLag()) .append("
") .append(_("Backlog")) .append(":") .append(_helper.getInboundBacklog()) .append("

") .append(_(_helper.getTunnelStatus())) .append("


\n") .append(_helper.getDestinations()); out.write(buf.toString()); } /** translate a string */ private String _(String s) { return Messages.getString(s, _context); } }