View Javadoc

1   /*
2    * Copyright 2010-2013 Capgemini Licensed under the Apache License, Version 2.0 (the
3    * "License"); you may not use this file except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    * http://www.apache.org/licenses/LICENSE-2.0
7    *
8    * Unless required by applicable law or agreed to in writing, software
9    * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
10   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
11   * License for the specific language governing permissions and limitations under
12   * the License.
13   */
14  package net.sf.appstatus.web.pages;
15  
16  import static net.sf.appstatus.web.HtmlUtils.applyLayout;
17  import static net.sf.appstatus.web.HtmlUtils.generateBeginTable;
18  import static net.sf.appstatus.web.HtmlUtils.generateEndTable;
19  import static net.sf.appstatus.web.HtmlUtils.generateHeaders;
20  import static net.sf.appstatus.web.HtmlUtils.generateRow;
21  import static org.apache.commons.lang3.StringUtils.isNotBlank;
22  
23  import java.io.IOException;
24  import java.io.UnsupportedEncodingException;
25  import java.util.HashMap;
26  import java.util.List;
27  import java.util.Map;
28  
29  import javax.servlet.ServletOutputStream;
30  import javax.servlet.http.HttpServletRequest;
31  import javax.servlet.http.HttpServletResponse;
32  
33  import org.apache.commons.lang3.text.StrBuilder;
34  import org.slf4j.Logger;
35  import org.slf4j.LoggerFactory;
36  
37  import net.sf.appstatus.core.loggers.ILoggersManager;
38  import net.sf.appstatus.core.loggers.LoggerConfig;
39  import net.sf.appstatus.web.StatusWebHandler;
40  
41  /**
42   * Display loggers current level and let the user change them.
43   *
44   * @author Romain Gonord
45   *
46   */
47  public class LoggersPage extends AbstractPage {
48  	private static final String ENCODING = "UTF-8";
49  	private static final String LEVEL_ERROR = "ERROR";
50  	private static final String LEVEL_INFO = "INFO";
51  	private static final String LEVEL_TRACE = "TRACE";
52  	private static final String LEVEL_WARN = "WARN";
53  	private static final Logger LOGGER = LoggerFactory.getLogger(LoggersPage.class);
54  	private static final String PAGECONTENTLAYOUT = "logContentLayout.html";
55  
56  	@Override
57  	public void doGet(StatusWebHandler webHandler, HttpServletRequest req, HttpServletResponse resp)
58  			throws UnsupportedEncodingException, IOException {
59  		LOGGER.debug("doGet");
60  		if (isNotBlank(req.getParameter("name")) && isNotBlank(req.getParameter("level"))) {
61  			LoggerConfig logger2Change = new LoggerConfig(req.getParameter("name"), req.getParameter("level"));
62  			LOGGER.debug("Change log level : {} - {}", logger2Change.getName(), logger2Change.getLevel());
63  			webHandler.getAppStatus().getLoggersManager().update(logger2Change);
64  		}
65  		setup(resp, "text/html");
66  		ServletOutputStream os = resp.getOutputStream();
67  		Map<String, String> valuesMap = new HashMap<String, String>();
68  		// build sbLoggersTable
69  		StrBuilder sbLoggersTable = new StrBuilder();
70  		List<LoggerConfig> loggers = webHandler.getAppStatus().getLoggersManager().getLoggers();
71  		if (generateBeginTable(sbLoggersTable, loggers.size())) {
72  			generateHeaders(sbLoggersTable, "", "Name", "Levels", "", "", "", "");
73  			for (LoggerConfig logger : loggers) {
74  				generateRow(sbLoggersTable, Resources.STATUS_PROP, logger.getName(), getButton(LEVEL_TRACE, logger),
75  						getButton(ILoggersManager.LEVEL_DEBUG, logger), getButton(LEVEL_INFO, logger),
76  						getButton(LEVEL_WARN, logger), getButton(LEVEL_ERROR, logger));
77  			}
78  			generateEndTable(sbLoggersTable, loggers.size());
79  		}
80  		// generating content
81  		valuesMap.put("loggersTable", sbLoggersTable.toString());
82  		valuesMap.put("loggerCount", String.valueOf(loggers.size()));
83  		String content = applyLayout(valuesMap, PAGECONTENTLAYOUT);
84  		valuesMap.clear();
85  		valuesMap.put("content", content);
86  		// generating page
87  		os.write(getPage(webHandler, valuesMap).getBytes(ENCODING));
88  	}
89  
90  	@Override
91  	public void doPost(StatusWebHandler webHandler, HttpServletRequest req, HttpServletResponse resp) {
92  		// nothing to do
93  	}
94  
95  	private String getButton(String level, LoggerConfig logger) {
96  		String buttonTypeTmp = "";
97  		if (level.equals(logger.getLevel())) {
98  			if (LEVEL_TRACE.equals(level)) {
99  				buttonTypeTmp = "btn-info";
100 			} else if (ILoggersManager.LEVEL_DEBUG.equals(level)) {
101 				buttonTypeTmp = "btn-primary";
102 			} else if (LEVEL_INFO.equals(level)) {
103 				buttonTypeTmp = "btn-success";
104 			} else if (LEVEL_WARN.equals(level)) {
105 				buttonTypeTmp = "btn-warning";
106 			} else if (LEVEL_ERROR.equals(level)) {
107 				buttonTypeTmp = "btn-danger";
108 			}
109 		}
110 		return "<a class='btn btn-mini " + buttonTypeTmp + "' href='?p=loggers&level=" + level + "&name="
111 				+ logger.getName() + "'>" + level + "</a>";
112 	}
113 
114 	@Override
115 	public String getId() {
116 		return "loggers";
117 	}
118 
119 	@Override
120 	public String getName() {
121 		return "Loggers";
122 	}
123 }