I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit fcb109f4 authored by jrandom's avatar jrandom Committed by zzz
Browse files

made the last of the config pages support dynamic updates (w3wt)

parent f30823e4
No related branches found
No related tags found
No related merge requests found
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");
}
}
}
......@@ -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();
}
}
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment