package net.i2p.router.web;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.TreeSet;
import net.i2p.data.DataHelper;
import net.i2p.util.Log;
public class ConfigLoggingHelper extends HelperBase {
public ConfigLoggingHelper() {}
public String getLogFilePattern() {
return _context.logManager().getBaseLogfilename();
}
public String getRecordPattern() {
return new String(_context.logManager().getFormat());
}
public String getDatePattern() {
return _context.logManager().getDateFormatPattern();
}
public String getMaxFileSize() {
int bytes = _context.logManager().getFileSize();
if (bytes <= 0) return "1.00 MB";
// " " comes back in the POST as 0xc2 0xa0
// non-breaking space is U+00A0 which is 0xc2 0xa0 in UTF-8.
// we could figure out where the UTF-8 problem is but why bother.
return DataHelper.formatSize2(bytes).replace(" ", " ") + 'B';
}
public String getLogLevelTable() {
StringBuilder buf = new StringBuilder(32*1024);
Properties limits = _context.logManager().getLimits();
TreeSet<String> sortedLogs = new TreeSet<String>();
for (String prefix : limits.stringPropertyNames()) {
sortedLogs.add(prefix);
}
buf.append("<textarea name=\"levels\" rows=\"4\" cols=\"60\" wrap=\"off\" spellcheck=\"false\">");
for (String prefix : sortedLogs) {
String level = limits.getProperty(prefix);
buf.append(prefix).append('=').append(level).append('\n');
}
buf.append("</textarea><br>\n");
buf.append("<p style=\"margin: 0px 12px\"><i>").append(_t("Add additional logging statements above. Example: net.i2p.router.tunnel=WARN")).append("</i><br>");
buf.append("<i>").append(_t("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN")).append("</i><br>");
buf.append("<i>").append(_t("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT")).append("</i></p>\n");
/****
// this is too big and ugly
if (limits.size() <= 0)
return "";
buf.append("<table>");
for (String prefix : sortedLogs) {
buf.append("<tr><td>").append(prefix).append("</td><td>");
String level = limits.getProperty(prefix);
buf.append(getLogLevelBox("level-" + prefix, level, true)).append("</td></tr>");
}
buf.append("</table>");
****/
return buf.toString();
}
private static String[] levels = { _x("CRIT"), _x("ERROR"), _x("WARN"), _x("INFO"), _x("DEBUG") };
public String getDefaultLogLevelBox() {
String cur = _context.logManager().getDefaultLimit();
return getLogLevelBox("defaultloglevel", cur, false);
}
private String getLogLevelBox(String name, String cur, boolean showRemove) {
StringBuilder buf = new StringBuilder(128);
buf.append("<select name=\"").append(name).append("\">\n");
for (int i = 0; i < levels.length; i++) {
String l = levels[i];
buf.append("<option value=\"").append(l).append('\"');
if (l.equals(cur))
buf.append(" selected=\"selected\"");
buf.append('>').append(_t(l)).append("</option>\n");
}
if (showRemove)
buf.append("<option value=\"remove\">").append(_t("Remove")).append("</option>");
buf.append("</select>\n");
return buf.toString();
}
/**
* All the classes the log manager knows about, except ones that
* already have overrides
* @since 0.8.1
*/
public String getNewClassBox() {
List<Log> logs = _context.logManager().getLogs();
Set<String> limits = _context.logManager().getLimits().stringPropertyNames();
TreeSet<String> sortedLogs = new TreeSet<String>();
for (Log log : logs) {
String name = log.getName();
if (!limits.contains(name))
sortedLogs.add(name);
// add higher classes of length 3 or more
int dots = 0;
int lastdot = -1;
int nextdot = 0;
while ((nextdot = name.indexOf('.', lastdot + 1)) > 0) {
if (++dots >= 3) {
String subst = name.substring(0, nextdot);
if (!limits.contains(subst))
sortedLogs.add(subst);
}
lastdot = nextdot;
}
}
StringBuilder buf = new StringBuilder(65536);
buf.append("<select name=\"newlogclass\">\n" +
"<option value=\"\" selected=\"selected\">")
.append(_t("Select a class to add"))
.append("</option>\n");
for (String l : sortedLogs) {
buf.append("<option value=\"").append(l).append("\">")
.append(l).append("</option>\n");
}
buf.append("</select>\n");
buf.append(getLogLevelBox("newloglevel", "WARN", false));
return buf.toString();
}
}