diff --git a/solr/core/src/java/org/apache/solr/servlet/LogLevelSelection.java b/solr/core/src/java/org/apache/solr/servlet/LogLevelSelection.java deleted file mode 100644 index 5a93d539a68..00000000000 --- a/solr/core/src/java/org/apache/solr/servlet/LogLevelSelection.java +++ /dev/null @@ -1,316 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 org.apache.solr.servlet; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.solr.handler.admin.LogLevelHandler; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.LogManager; -import java.util.logging.Logger; - - -/** - * Admin JDK Logger level report and selection servlet. - * - * @since solr 1.3 - * @deprecated {@link LogLevelHandler} this servlet will be removed before solr 4.0 - */ -public final class LogLevelSelection extends HttpServlet { - @Override - public void init() throws ServletException { - } - - /** - * Processes an HTTP GET request and changes the logging level as - * specified. - */ - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException { - // Output page - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.write("\n"); - out.write("Solr Admin: JDK Log Level Selector\n"); - out.write(""); - out.write("\n"); - out.write("\"Solr\""); - out.write("

JDK Log Level Selector

"); - out.write("

This will be removed before Solr 4.0. See logging

"); - - out.write("

Below is the complete JDK Log hierarchy with " + - "intermediate logger/categories synthesized. " + - "The effective logging level is shown to the " + - "far right. If a logger has unset level, then " + - "the effective level is that of the nearest ancestor " + - "with a level setting. Note that this only shows " + - "JDK Log levels.

\n"); - - out.write("
\n"); - - out.write("\n"); - out.write("\n"); - out.write("

\n"); - - out.write(""); - - out.write("" + - "" + - "" + - ""); - - for (int j = 0; j < LEVELS.length; ++j) { - out.write(""); - } - out.write("\n"); - out.write("\n"); - - Iterator iWrappers = buildWrappers().iterator(); - while (iWrappers.hasNext()) { - - LogWrapper wrapper = (LogWrapper) iWrappers.next(); - - out.write("\n"); - for (int j = 0; j < LEVELS.length; ++j) { - out.write("\n"); - } - out.write("\n"); - } - out.write("
Logger/Category name
" + - "
Level
" + - "(Dark rows don't yet exist.)"); - if (LEVELS[j] != null) out.write(LEVELS[j].toString()); - else out.write("unset"); - out.write("Effective
"); - if ("".equals(wrapper.name)) { - out.write("root"); - } else { - out.write(wrapper.name); - } - out.write(""); - if (!wrapper.name.equals("root") || - (LEVELS[j] != null)) { - out.write("'); - } - out.write(""); - if (wrapper.logger != null) { - out.write(getEffectiveLevel(wrapper.logger).toString()); - } - out.write("
\n"); - - out.write("
\n"); - out.write("\n"); - out.write("\n"); - - out.write("
\n"); - - out.write("\n"); - } - - - @Override - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException { - if (request.getParameter("submit").equals("set")) { - - Map paramMap = request.getParameterMap(); - - Iterator iParams = paramMap.entrySet().iterator(); - while (iParams.hasNext()) { - Map.Entry p = (Map.Entry) iParams.next(); - String name = (String) p.getKey(); - String value = ((String[]) p.getValue())[0]; - - if (name.equals("submit")) continue; - Logger logger; - LogManager logManager = LogManager.getLogManager(); - if ("root".equals(name)) { - logger = logManager.getLogger(""); - } else logger = logManager.getLogger(name); - - if ("unset".equals(value)) { - if ((logger != null) && (logger.getLevel() != null)) { - logger.setLevel(null); - log.info("Unset log level on '" + name + "'."); - } - } else { - Level level = Level.parse(value); - if (logger == null) logger = Logger.getLogger(name); - if (logger.getLevel() != level) { - logger.setLevel(level); - log.info("Set '" + name + "' to " + - level + " level."); - } - } - } - } else { - log.fine("Selection form cancelled"); - } - - // Redirect back to standard get page. - response.sendRedirect(request.getRequestURI()); - } - - - private Collection buildWrappers() { - // Use tree to get sorted results - SortedSet roots = new TreeSet(); - - roots.add(LogWrapper.ROOT); - - LogManager logManager = LogManager.getLogManager(); - - Enumeration loggerNames = logManager.getLoggerNames(); - while (loggerNames.hasMoreElements()) { - String name = loggerNames.nextElement(); - Logger logger = Logger.getLogger(name); - LogWrapper wrapper = new LogWrapper(logger); - roots.remove(wrapper); // Make sure add occurs - roots.add(wrapper); - - while (true) { - int dot = name.lastIndexOf("."); - if (dot < 0) break; - name = name.substring(0, dot); - roots.add(new LogWrapper(name)); // if not already - } - } - - return roots; - } - - private Level getEffectiveLevel(Logger logger) { - Level level = logger.getLevel(); - if (level != null) { - return level; - } - for (Level l : LEVELS) { - if (l == null) { - // avoid NPE - continue; - } - if (logger.isLoggable(l)) { - // return first level loggable - return l; - } - } - return Level.OFF; - } - - private static class LogWrapper - implements Comparable { - public static LogWrapper ROOT = - new LogWrapper(LogManager.getLogManager().getLogger("")); - - public LogWrapper(Logger logger) { - this.logger = logger; - this.name = logger.getName(); - } - - public LogWrapper(String name) { - this.name = name; - } - - - public int compareTo(Object other) { - if (this.equals(other)) return 0; - if (this == ROOT) return -1; - if (other == ROOT) return 1; - - return name.compareTo(((LogWrapper) other).name); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - LogWrapper other = (LogWrapper) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - public Level level() { - if (logger != null) return logger.getLevel(); - return null; - } - - public Logger logger = null; - public String name; - } - - private static Level[] LEVELS = { - null, // aka unset - Level.FINEST, - Level.FINE, - Level.CONFIG, - Level.INFO, - Level.WARNING, - Level.SEVERE, - Level.OFF - // Level.ALL -- ignore. It is useless. - }; - - private Logger log = Logger.getLogger(getClass().getName()); -} diff --git a/solr/core/src/java/org/apache/solr/servlet/RedirectServlet.java b/solr/core/src/java/org/apache/solr/servlet/RedirectServlet.java new file mode 100644 index 00000000000..abbfa85de21 --- /dev/null +++ b/solr/core/src/java/org/apache/solr/servlet/RedirectServlet.java @@ -0,0 +1,67 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.solr.servlet; + +import java.io.IOException; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * A Simple redirection servlet to help us deprecate old UI elements + */ +public class RedirectServlet extends HttpServlet{ + + static final String CONTEXT_KEY = "${context}"; + + String destination; + int code = HttpServletResponse.SC_MOVED_PERMANENTLY; + + public void init(ServletConfig config) throws ServletException { + super.init(config); + + destination = config.getInitParameter("destination"); + if(destination==null) { + throw new ServletException("RedirectServlet missing destination configuration"); + } + if( "false".equals(config.getInitParameter("permanent") )) { + code = HttpServletResponse.SC_MOVED_TEMPORARILY; + } + + // Replace the context key + if(destination.startsWith(CONTEXT_KEY)) { + destination = config.getServletContext().getContextPath() + +destination.substring(CONTEXT_KEY.length()); + } + } + + public void doGet(HttpServletRequest req, HttpServletResponse res) + throws ServletException,IOException { + + res.setStatus(code); + res.setHeader("Location", destination); + } + + public void doPost(HttpServletRequest req, HttpServletResponse res) + throws ServletException,IOException { + doGet(req,res); + } +} \ No newline at end of file diff --git a/solr/webapp/web/WEB-INF/web.xml b/solr/webapp/web/WEB-INF/web.xml index 76ca640e0d7..fe96fd769dc 100644 --- a/solr/webapp/web/WEB-INF/web.xml +++ b/solr/webapp/web/WEB-INF/web.xml @@ -83,11 +83,6 @@ /* - - Logging - org.apache.solr.servlet.LogLevelSelection - - Zookeeper org.apache.solr.servlet.ZookeeperInfoServlet @@ -97,13 +92,54 @@ LoadAdminUI org.apache.solr.servlet.LoadAdminUiServlet - - + + + + + RedirectOldAdminUI + org.apache.solr.servlet.RedirectServlet + + destination + ${context}/#/ + + + + + RedirectOldZookeeper + org.apache.solr.servlet.RedirectServlet + + destination + ${context}/zookeeper + + + + + RedirectLogging + org.apache.solr.servlet.RedirectServlet + + destination + ${context}/#/~logging + + + - Logging + RedirectOldAdminUI + /admin/ + + + RedirectOldAdminUI + /admin + + + RedirectOldZookeeper + /zookeeper.jsp + + + RedirectLogging /logging - + + Zookeeper /zookeeper @@ -113,7 +149,7 @@ LoadAdminUI /admin.html - + .xsl