/*
* Copyright 2010-2013 Capgemini Licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.sf.appstatus.web.pages;
import static net.sf.appstatus.web.HtmlUtils.applyLayout;
import static net.sf.appstatus.web.HtmlUtils.generateBeginTable;
import static net.sf.appstatus.web.HtmlUtils.generateEndTable;
import static net.sf.appstatus.web.HtmlUtils.generateHeaders;
import static net.sf.appstatus.web.HtmlUtils.generateRow;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.text.StrBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.appstatus.core.loggers.ILoggersManager;
import net.sf.appstatus.core.loggers.LoggerConfig;
import net.sf.appstatus.web.StatusWebHandler;
/**
* Display loggers current level and let the user change them.
*
* @author Romain Gonord
*
*/
public class LoggersPage extends AbstractPage {
private static final String ENCODING = "UTF-8";
private static final String LEVEL_ERROR = "ERROR";
private static final String LEVEL_INFO = "INFO";
private static final String LEVEL_TRACE = "TRACE";
private static final String LEVEL_WARN = "WARN";
private static final Logger LOGGER = LoggerFactory.getLogger(LoggersPage.class);
private static final String PAGECONTENTLAYOUT = "logContentLayout.html";
@Override
public void doGet(StatusWebHandler webHandler, HttpServletRequest req, HttpServletResponse resp)
throws UnsupportedEncodingException, IOException {
LOGGER.debug("doGet");
if (isNotBlank(req.getParameter("name")) && isNotBlank(req.getParameter("level"))) {
LoggerConfig logger2Change = new LoggerConfig(req.getParameter("name"), req.getParameter("level"));
LOGGER.debug("Change log level : {} - {}", logger2Change.getName(), logger2Change.getLevel());
webHandler.getAppStatus().getLoggersManager().update(logger2Change);
}
setup(resp, "text/html");
ServletOutputStream os = resp.getOutputStream();
Map<String, String> valuesMap = new HashMap<String, String>();
// build sbLoggersTable
StrBuilder sbLoggersTable = new StrBuilder();
List<LoggerConfig> loggers = webHandler.getAppStatus().getLoggersManager().getLoggers();
if (generateBeginTable(sbLoggersTable, loggers.size())) {
generateHeaders(sbLoggersTable, "", "Name", "Levels", "", "", "", "");
for (LoggerConfig logger : loggers) {
generateRow(sbLoggersTable, Resources.STATUS_PROP, logger.getName(), getButton(LEVEL_TRACE, logger),
getButton(ILoggersManager.LEVEL_DEBUG, logger), getButton(LEVEL_INFO, logger),
getButton(LEVEL_WARN, logger), getButton(LEVEL_ERROR, logger));
}
generateEndTable(sbLoggersTable, loggers.size());
}
// generating content
valuesMap.put("loggersTable", sbLoggersTable.toString());
valuesMap.put("loggerCount", String.valueOf(loggers.size()));
String content = applyLayout(valuesMap, PAGECONTENTLAYOUT);
valuesMap.clear();
valuesMap.put("content", content);
// generating page
os.write(getPage(webHandler, valuesMap).getBytes(ENCODING));
}
@Override
public void doPost(StatusWebHandler webHandler, HttpServletRequest req, HttpServletResponse resp) {
// nothing to do
}
private String getButton(String level, LoggerConfig logger) {
String buttonTypeTmp = "";
if (level.equals(logger.getLevel())) {
if (LEVEL_TRACE.equals(level)) {
buttonTypeTmp = "btn-info";
} else if (ILoggersManager.LEVEL_DEBUG.equals(level)) {
buttonTypeTmp = "btn-primary";
} else if (LEVEL_INFO.equals(level)) {
buttonTypeTmp = "btn-success";
} else if (LEVEL_WARN.equals(level)) {
buttonTypeTmp = "btn-warning";
} else if (LEVEL_ERROR.equals(level)) {
buttonTypeTmp = "btn-danger";
}
}
return "<a class='btn btn-mini " + buttonTypeTmp + "' href='?p=loggers&level=" + level + "&name="
+ logger.getName() + "'>" + level + "</a>";
}
@Override
public String getId() {
return "loggers";
}
@Override
public String getName() {
return "Loggers";
}
}