00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 module mango.log.Admin;
00019
00020 private import mango.io.Uri;
00021
00022 private import mango.io.model.IWriter;
00023
00024 private import mango.log.Logger,
00025 mango.log.Event,
00026 mango.log.Manager;
00027
00028 private import mango.servlet.Servlet,
00029 mango.servlet.ServletContext,
00030 mango.servlet.ServletProvider;
00031
00032
00033
00034
00035
00036
00037
00038 class AdminServlet : Servlet
00039 {
00040
00041 private Logger log;
00042
00043
00044
00045
00046
00047
00048
00049 this()
00050 {
00051 log = Logger.getLogger ("mango.admin.AdminServlet");
00052 }
00053
00054
00055
00056
00057
00058
00059
00060 void addLogger(IServletRequest request, IServletResponse response)
00061 {
00062 char[] loggerName = request.getParameters.get("logger");
00063 Logger.Level level = cast(Logger.Level) request.getParameters.getInt("level");
00064
00065 Logger loggerToChange = Manager.getLogger(loggerName);
00066 loggerToChange.setLevel(level);
00067 }
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 void setLoggerLevel(IServletRequest request, IServletResponse response, Logger.Level level)
00078 {
00079
00080 char[] loggerName = request.getParameters.get("logger");
00081
00082
00083 Logger loggerToChange;
00084 if (loggerName.length)
00085 loggerToChange = Manager.getLogger(loggerName);
00086 else
00087 loggerToChange = Manager.getRootLogger();
00088
00089
00090 log.info("Setting logger " ~ loggerName ~
00091 " to level " ~ Event.LevelNames[level]);
00092 loggerToChange.setLevel(level);
00093 }
00094
00095
00096
00097
00098
00099
00100
00101
00102 void service (IServletRequest request, IServletResponse response)
00103 {
00104
00105 char[] action = request.getParameters().get("action");
00106
00107
00108 if (action is null)
00109 action = "L";
00110
00111 switch (action[0])
00112 {
00113
00114 case 'A':
00115 addLogger (request, response);
00116 break;
00117
00118
00119 case 'T':
00120 setLoggerLevel (request, response, Logger.Level.Trace);
00121 break;
00122
00123
00124 case 'I':
00125 setLoggerLevel (request, response, Logger.Level.Info);
00126 break;
00127
00128
00129 case 'W':
00130 setLoggerLevel (request, response, Logger.Level.Warn);
00131 break;
00132
00133
00134 case 'E':
00135 setLoggerLevel (request, response, Logger.Level.Error);
00136 break;
00137
00138
00139 case 'F':
00140 setLoggerLevel (request, response, Logger.Level.Fatal);
00141 break;
00142
00143
00144 case 'N':
00145 setLoggerLevel (request, response, Logger.Level.None);
00146 break;
00147
00148 default:
00149 break;
00150 }
00151
00152 Uri uri = request.getUri();
00153
00154 if (action != "L")
00155 response.sendRedirect("/admin/logger");
00156 else
00157
00158 log.trace ("request to logadmin with uri: " ~ uri.toString());
00159
00160
00161 response.setContentType ("text/html");
00162
00163 IWriter writer = response.getWriter();
00164
00165
00166 writer.put ("<html><head><title>LogAdmin</title></head><body>");
00167
00168
00169 writer.put("<h1>Mango Server Console - Logger Administrator</h1>"
00170 "<h2>Existing Loggers</h2><table border='1' cellpadding='3'>")
00171 .cr()
00172 .put("<tr><td>Logger Name</td>"
00173 "<td>Logger Level</td>"
00174 "<td colspan=\"6\">Change Level to:</td></tr>")
00175 .cr();
00176
00177
00178 foreach (Logger l; Manager.getHierarchy())
00179 {
00180 char[] name = l.getName();
00181 char[] label = name;
00182 if (label.length == 0)
00183 label = "ROOT";
00184
00185 int level = l.getLevel();
00186 writer.put("<tr><td><b>" ~ label ~ "</b> </td><td>" ~
00187 Event.LevelNames[level] ~ "</td>");
00188
00189 for (int i = Logger.Level.min; i < Logger.Level.max + 1; i++)
00190 {
00191 writer.put("<td>");
00192 if (i == level)
00193 writer.put("<b>" ~ Event.LevelNames[i] ~ "</b>");
00194 else
00195 writer.put("<a href=\"logger?action=" ~ Event.LevelNames[i] ~
00196 "&logger=" ~ name ~
00197 "\">" ~ Event.LevelNames[i] ~ "</a>");
00198 writer.put("</td>");
00199 }
00200
00201 writer.put("</tr>")
00202 .cr();
00203 }
00204
00205 writer.put("</table>")
00206 .cr()
00207 .put("<h2>Add a new logger</h2>")
00208 .cr()
00209 .put("<form method=\"get\" action=\"logger\">")
00210 .cr()
00211 .put("<input type=\"hidden\" name=\"action\" value=\"ADD\" />")
00212 .cr()
00213 .put("<table><tr><td>Logger Name:</td>" ~
00214 "<td>Level</td></tr><tr>" ~
00215 "<td><input type=\"text\" name=\"logger\" />")
00216 .cr()
00217 .put("</td><td><select name=\"level\">")
00218 .cr();
00219
00220 for (int i = Logger.Level.min; i < Logger.Level.max + 1; i++)
00221 {
00222 char[] levelStr = Event.LevelNames[i];
00223 writer.put("<option value=\"");
00224 writer.put(i);
00225 writer.put("\">" ~ levelStr ~ "</option>")
00226 .cr();
00227 }
00228
00229 writer.put("</select></td></tr></table>"
00230 "<input type=\"submit\" name=\"submit\" value=\"Add Level\" />")
00231 .cr()
00232 .put("</form>")
00233 .cr();
00234
00235
00236 writer.put ("</body></html>");
00237 }
00238 }
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252 class AdminContext : ServletContext
00253 {
00254
00255 this (ServletProvider provider, char[] name)
00256 {
00257 super (name);
00258 provider.addContext (this);
00259 IRegisteredServlet logger = provider.addServlet (new AdminServlet(), "logger", this);
00260 provider.addMapping ("/logger", logger);
00261 }
00262
00263 }
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274 class AdminServer
00275 {
00276
00277 }