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);
String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
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("\n" +
"
\n" +
"
\n" +
"\n");
out.write(buf.toString());
buf.setLength(0);
}
buf.append("
" +
"
\n" +
"" +
"")
.append(_("Version"))
.append(": | " +
"")
.append(_helper.getVersion())
.append(" |
\n" +
"" +
"")
.append(_("Uptime"))
.append(": | " +
"")
.append(_helper.getUptime())
.append(" |
\n" +
"
\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("")
.append(ConfigRestartBean.renderStatus(_helper.getRequestURI(), _helper.getAction(), _helper.getConsoleNonce()))
.append("
\n" +
"\n" +
"")
.append(_("Active"))
.append(": | ")
.append(_helper.getActivePeers())
.append(" / ")
.append(_helper.getActiveProfiles())
.append(" |
\n" +
"")
.append(_("Fast"))
.append(": | ")
.append(_helper.getFastPeers())
.append(" |
\n" +
"")
.append(_("High capacity"))
.append(": | ")
.append(_helper.getHighCapacityPeers())
.append(" |
\n" +
"")
.append(_("Integrated"))
.append(": | ")
.append(_helper.getWellIntegratedPeers())
.append(" |
\n" +
"")
.append(_("Known"))
.append(": | ")
.append(_helper.getAllPeers())
.append(" |
\n" +
"
\n");
out.write(buf.toString());
buf.setLength(0);
boolean anotherLine = false;
if (_helper.showFirewallWarning()) {
buf.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");
}
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("
" +
"\n" +
"1s: | ")
.append(_helper.getSecondKBps())
.append("Bps |
\n");
if (_context.router().getUptime() > 6*60*1000) {
buf.append("5m: | ")
.append(_helper.getFiveMinuteKBps())
.append("Bps |
\n");
}
if (_context.router().getUptime() > 2*60*1000) {
buf.append("")
.append(_("Total"))
.append(": | ")
.append(_helper.getLifetimeKBps())
.append("Bps |
\n");
}
buf.append("")
.append(_("Used"))
.append(": | ")
.append(_helper.getInboundTransferred())
.append(" / ")
.append(_helper.getOutboundTransferred())
.append(" |
\n" +
"
" +
"\n" +
"")
.append(_("Exploratory"))
.append(": | ")
.append(_helper.getInboundTunnels() + _helper.getOutboundTunnels())
.append(" |
\n" +
"")
.append(_("Client"))
.append(": | ")
.append(_helper.getInboundClientTunnels() + _helper.getOutboundClientTunnels())
.append(" |
\n" +
"")
.append(_("Participating"))
.append(": | ")
.append(_helper.getParticipatingTunnels())
.append(" |
\n" +
"")
.append(_("Share ratio"))
.append(": | ")
.append(_helper.getShareRatio())
.append(" |
\n" +
"
" +
"\n" +
"")
.append(_("Job lag"))
.append(": | ")
.append(_helper.getJobLag())
.append(" |
\n" +
"")
.append(_("Message delay"))
.append(": | ")
.append(_helper.getMessageDelay())
.append(" |
\n" +
"")
.append(_("Tunnel lag"))
.append(": | ")
.append(_helper.getTunnelLag())
.append(" |
\n" +
"")
.append(_("Backlog"))
.append(": | ")
.append(_helper.getInboundBacklog())
.append(" |
\n" +
"
")
.append(_(_helper.getTunnelStatus()))
.append("
\n")
.append(_helper.getDestinations());
out.write(buf.toString());
}
/** translate a string */
private String _(String s) {
return Messages.getString(s, _context);
}
}