From fcb109f46da9ec049d21528ccd6f924f93cb2e9b Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Sat, 31 Jul 2004 23:19:23 +0000 Subject: [PATCH] made the last of the config pages support dynamic updates (w3wt) --- .../i2p/router/web/ConfigLoggingHandler.java | 153 ++++++++++++++++++ .../i2p/router/web/ConfigLoggingHelper.java | 95 +++++------ apps/routerconsole/jsp/configlogging.jsp | 12 +- 3 files changed, 204 insertions(+), 56 deletions(-) create mode 100644 apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java new file mode 100644 index 0000000000..4be78b2e8f --- /dev/null +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java @@ -0,0 +1,153 @@ +package net.i2p.router.web; + +import java.io.ByteArrayInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Properties; +import net.i2p.util.Log; + +/** + * Handler to deal with form submissions from the logging config form and act + * upon the values. + * + */ +public class ConfigLoggingHandler extends FormHandler { + private boolean _shouldSave; + private String _levels; + private String _defaultLevel; + private String _filename; + private String _recordFormat; + private String _dateFormat; + private String _fileSize; + + public void ConfigNetHandler() { + _shouldSave = false; + } + + protected void processForm() { + if (_shouldSave) { + saveChanges(); + } else { + // noop + } + } + + public void setShouldsave(String moo) { _shouldSave = true; } + + public void setLevels(String levels) { + _levels = (levels != null ? levels.trim() : null); + } + public void setDefaultloglevel(String level) { + _defaultLevel = (level != null ? level.trim() : null); + } + public void setFilename(String filename) { + _filename = (filename != null ? filename.trim() : null); + } + public void setRecordformat(String format) { + _recordFormat = (format != null ? format.trim() : null); + } + public void setDateformat(String format) { + _dateFormat = (format != null ? format.trim() : null); + } + public void setFilesize(String size) { + _fileSize = (size != null ? size.trim() : null); + } + + /** + * The user made changes to the config and wants to save them, so + * lets go ahead and do so. + * + */ + private void saveChanges() { + boolean shouldSave = false; + + if (_levels != null) { + try { + Properties props = new Properties(); + props.load(new ByteArrayInputStream(_levels.getBytes())); + _context.logManager().setLimits(props); + shouldSave = true; + addFormNotice("Log limits updated"); + } catch (IOException ioe) { + _context.logManager().getLog(ConfigLoggingHandler.class).error("Error reading from the props?", ioe); + addFormError("Error updating the log limits - levels not valid"); + } + } else { + _context.logManager().setLimits(null); + addFormNotice("Log limits cleared"); + } + + if (_defaultLevel != null) { + String oldDefault = _context.logManager().getDefaultLimit(); + if (_defaultLevel.equals(oldDefault)) { + // noop + } else { + shouldSave = true; + _context.logManager().setDefaultLimit(_defaultLevel); + addFormNotice("Default log level updated from " + oldDefault + " to " + _defaultLevel); + } + } + + if (_dateFormat != null) { + boolean valid = _context.logManager().setDateFormat(_dateFormat); + if (valid) { + shouldSave = true; + addFormNotice("Date format updated"); + } else { + addFormError("Specified date format is not valid (" + _dateFormat + ") - not updated"); + } + } + + if (_fileSize != null) { + int newBytes = _context.logManager().getFileSize(_fileSize); + int oldBytes = _context.logManager().getFileSize(); + if (newBytes > 0) { + if (oldBytes != newBytes) { + _context.logManager().setFileSize(newBytes); + shouldSave = true; + addFormNotice("File size updated"); + } + } else { + addFormError("Specified file size limit is not valid (" + _fileSize + ") - not updated"); + } + } + + if ( (_filename != null) && (_filename.trim().length() > 0) ) { + _filename = _filename.trim(); + String old = _context.logManager().getBaseLogfilename(); + if ( (old != null) && (_filename.equals(old)) ) { + // noop - don't update since its the same + } else { + shouldSave = true; + _context.logManager().setBaseLogfilename(_filename); + addFormNotice("Log file name pattern updated to " + _filename + + " (note: will not take effect until next rotation)"); + } + } + + if ( (_recordFormat != null) && (_recordFormat.trim().length() > 0) ) { + _recordFormat = _recordFormat.trim(); + String old = new String(_context.logManager().getFormat()); + if (_recordFormat.equalsIgnoreCase(old)) { + // noop - no change + } else { + char fmt[] = new char[_recordFormat.length()]; + for (int i = 0; i < fmt.length; i++) + fmt[i] = _recordFormat.charAt(i); + _context.logManager().setFormat(fmt); + shouldSave = true; + addFormNotice("Log record format updated"); + } + } + + if (shouldSave) { + boolean saved = _context.logManager().saveConfig(); + + if (saved) + addFormNotice("Log configuration saved and applied successfully"); + else + addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs"); + } + } +} diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java index 9230d2166e..d526f5b0db 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java @@ -2,9 +2,10 @@ package net.i2p.router.web; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.List; import java.util.Iterator; -import java.util.TreeMap; +import java.util.List; +import java.util.Properties; +import java.util.TreeSet; import net.i2p.util.Log; @@ -49,65 +50,49 @@ public class ConfigLoggingHelper { } public String getLogLevelTable() { StringBuffer buf = new StringBuffer(32*1024); - buf.append("<textarea rows=\"20\" cols=\"80\">"); - List logs = _context.logManager().getLogs(); - TreeMap sortedLogs = new TreeMap(); - for (int i = 0; i < logs.size(); i++) { - Log l = (Log)logs.get(i); - sortedLogs.put(l.getName(), l); + Properties limits = _context.logManager().getLimits(); + TreeSet sortedLogs = new TreeSet(); + for (Iterator iter = limits.keySet().iterator(); iter.hasNext(); ) { + String prefix = (String)iter.next(); + sortedLogs.add(prefix); } - int i = 0; - for (Iterator iter = sortedLogs.values().iterator(); iter.hasNext(); i++) { - Log l = (Log)iter.next(); - buf.append(l.getName()).append('='); - buf.append(Log.toLevelString(l.getMinimumPriority())); - buf.append("\n"); + + buf.append("<textarea name=\"levels\" rows=\"20\" cols=\"70\">"); + for (Iterator iter = sortedLogs.iterator(); iter.hasNext(); ) { + String prefix = (String)iter.next(); + String level = limits.getProperty(prefix); + buf.append(prefix).append('=').append(level).append('\n'); } buf.append("</textarea><br />\n"); buf.append("<i>Valid levels are DEBUG, INFO, WARN, ERROR, CRIT</i>\n"); return buf.toString(); } - public String getLogLevelTableDetail() { - StringBuffer buf = new StringBuffer(8*1024); - buf.append("<table border=\"1\">\n"); - buf.append("<tr><td>Package/class</td><td>Level</td></tr>\n"); - List logs = _context.logManager().getLogs(); - TreeMap sortedLogs = new TreeMap(); - for (int i = 0; i < logs.size(); i++) { - Log l = (Log)logs.get(i); - sortedLogs.put(l.getName(), l); - } - int i = 0; - for (Iterator iter = sortedLogs.values().iterator(); iter.hasNext(); i++) { - Log l = (Log)iter.next(); - buf.append("<tr>\n <td><input size=\"50\" type=\"text\" name=\"logrecord."); - buf.append(i).append(".package\" value=\"").append(l.getName()); - buf.append("\" /></td>\n"); - buf.append("<td><select name=\"logrecord.").append(i); - buf.append(".level\">\n\t"); - buf.append("<option value=\"DEBUG\" "); - if (l.getMinimumPriority() == Log.DEBUG) - buf.append("selected=\"true\" "); - buf.append(">Debug</option>\n\t"); - buf.append("<option value=\"INFO\" "); - if (l.getMinimumPriority() == Log.INFO) - buf.append("selected=\"true\" "); - buf.append(">Info</option>\n\t"); - buf.append("<option value=\"WARN\" "); - if (l.getMinimumPriority() == Log.WARN) - buf.append("selected=\"true\" "); - buf.append(">Warn</option>\n\t"); - buf.append("<option value=\"ERROR\" "); - if (l.getMinimumPriority() == Log.ERROR) - buf.append("selected=\"true\" "); - buf.append(">Error</option>\n\t"); - buf.append("<option value=\"CRIT\" "); - if (l.getMinimumPriority() == Log.CRIT) - buf.append("selected=\"true\" "); - buf.append(">Critical</option>\n\t"); - buf.append("</select></td>\n</tr>\n"); - } - buf.append("</table>\n"); + public String getDefaultLogLevelBox() { + String cur = _context.logManager().getDefaultLimit(); + StringBuffer buf = new StringBuffer(128); + buf.append("<select name=\"defaultloglevel\">\n"); + + buf.append("<option value=\"DEBUG\" "); + if ("DEFAULT".equals(cur)) buf.append(" selected=\"true\" "); + buf.append(">DEBUG</option>\n"); + + buf.append("<option value=\"INFO\" "); + if ("INFO".equals(cur)) buf.append(" selected=\"true\" "); + buf.append(">INFO</option>\n"); + + buf.append("<option value=\"WARN\" "); + if ("WARN".equals(cur)) buf.append(" selected=\"true\" "); + buf.append(">WARN</option>\n"); + + buf.append("<option value=\"ERROR\" "); + if ("WARN".equals(cur)) buf.append(" selected=\"true\" "); + buf.append(">ERROR</option>\n"); + + buf.append("<option value=\"CRIT\" "); + if ("CRIT".equals(cur)) buf.append(" selected=\"true\" "); + buf.append(">CRIT</option>\n"); + + buf.append("</select>\n"); return buf.toString(); } } diff --git a/apps/routerconsole/jsp/configlogging.jsp b/apps/routerconsole/jsp/configlogging.jsp index 0c8fa20556..9a2041e2f0 100644 --- a/apps/routerconsole/jsp/configlogging.jsp +++ b/apps/routerconsole/jsp/configlogging.jsp @@ -14,6 +14,13 @@ <div class="main" id="main"> <%@include file="confignav.jsp" %> + + <jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" /> + <jsp:setProperty name="formhandler" property="*" /> + <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> + <font color="red"><jsp:getProperty name="formhandler" property="errors" /></font> + <i><jsp:getProperty name="formhandler" property="notices" /></i> + <form action="configlogging.jsp" method="POST"> <b>Logging filename:</b> <input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" /><br /> @@ -28,9 +35,12 @@ <input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /><br /> <hr /> <b>Log levels:</b> <br /> + <b>Default log level:</b> + <jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br /> <jsp:getProperty name="logginghelper" property="logLevelTable" /> <hr /> - <input type="submit" value="Apply changes" /> <input type="submit" value="Apply and Save" /> <input type="reset" value="Cancel" /> + <input type="submit" name="shouldsave" value="Save changes" /> + <input type="reset" value="Cancel" /> </form> </div> -- GitLab