diff options
Diffstat (limited to 'qpid/java/broker-plugins/management-http')
24 files changed, 196 insertions, 81 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index 613218f2fc..d29144f09b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -111,6 +111,9 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem @ManagedAttributeField private int _sessionTimeout; + @ManagedAttributeField + private boolean _compressResponses; + private boolean _allowPortActivation; @ManagedObjectFactoryConstructor @@ -477,6 +480,12 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem } @Override + public boolean isCompressResponses() + { + return _compressResponses; + } + + @Override public AuthenticationProvider getAuthenticationProvider(SocketAddress localAddress) { return getBroker().getAuthenticationProvider(localAddress); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java index aff9f3a7e2..9eef1a6e5c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java @@ -29,6 +29,7 @@ import org.apache.qpid.server.model.Plugin; public interface HttpManagementConfiguration<X extends HttpManagementConfiguration<X>> extends Plugin<X> { + @ManagedAttribute( defaultValue = "true" ) boolean isHttpsSaslAuthenticationEnabled(); @@ -44,6 +45,13 @@ public interface HttpManagementConfiguration<X extends HttpManagementConfigurati @ManagedAttribute( defaultValue = "600" ) public int getSessionTimeout(); + String HTTP_MANAGEMENT_COMPRESS_RESPONSES = "httpManagement.compressResponses"; + @ManagedContextDefault(name = HTTP_MANAGEMENT_COMPRESS_RESPONSES) + boolean DEFAULT_COMPRESS_RESPONSES = false; + + @ManagedAttribute( defaultValue = "${"+HTTP_MANAGEMENT_COMPRESS_RESPONSES+"}" ) + public boolean isCompressResponses(); + String MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME = "maxHttpFileUploadSize"; @ManagedContextDefault( name = MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME) static final long DEFAULT_MAX_UPLOAD_SIZE = 100 * 1024; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java index ef0a68a42b..847ada3407 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java @@ -20,17 +20,24 @@ */ package org.apache.qpid.server.management.plugin; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.security.Principal; import java.security.PrivilegedAction; import java.security.cert.X509Certificate; import java.util.Collections; +import java.util.zip.GZIPOutputStream; import javax.security.auth.Subject; import javax.security.auth.x500.X500Principal; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.codec.binary.Base64; @@ -71,6 +78,10 @@ public class HttpManagementUtil private static final String ATTR_SUBJECT = "Qpid.subject"; private static final String ATTR_LOG_ACTOR = "Qpid.logActor"; + private static final String ACCEPT_ENCODING_HEADER = "Accept-Encoding"; + private static final String CONTENT_ENCODING_HEADER = "Content-Encoding"; + private static final String GZIP_CONTENT_ENCODING = "gzip"; + public static Broker<?> getBroker(ServletContext servletContext) { return (Broker<?>) servletContext.getAttribute(ATTR_BROKER); @@ -219,5 +230,42 @@ public class HttpManagementUtil return null; } + public static Writer getOutputWriter(final HttpServletRequest request, final HttpServletResponse response) + throws IOException + { + return getOutputWriter(request, response, getManagementConfiguration(request.getServletContext())); + } + + public static Writer getOutputWriter(final HttpServletRequest request, final HttpServletResponse response, HttpManagementConfiguration managementConfiguration) + throws IOException + { + Writer writer; + writer = new BufferedWriter(new OutputStreamWriter(getOutputStream(request,response, managementConfiguration))); + return writer; + } + + public static OutputStream getOutputStream(final HttpServletRequest request, final HttpServletResponse response) + throws IOException + { + return getOutputStream(request, response, getManagementConfiguration(request.getServletContext())); + } + + public static OutputStream getOutputStream(final HttpServletRequest request, final HttpServletResponse response, HttpManagementConfiguration managementConfiguration) + throws IOException + { + OutputStream outputStream; + if(managementConfiguration.isCompressResponses() + && Collections.list(request.getHeaderNames()).contains(ACCEPT_ENCODING_HEADER) + && request.getHeader(ACCEPT_ENCODING_HEADER).contains(GZIP_CONTENT_ENCODING)) + { + outputStream = new GZIPOutputStream(response.getOutputStream()); + response.setHeader(CONTENT_ENCODING_HEADER, GZIP_CONTENT_ENCODING); + } + else + { + outputStream = response.getOutputStream(); + } + return outputStream; + } } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/DefinedFileServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/DefinedFileServlet.java index e6ae47dcff..d8f8e4e4b0 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/DefinedFileServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/DefinedFileServlet.java @@ -18,14 +18,16 @@ package org.apache.qpid.server.management.plugin.servlet; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import javax.servlet.ServletConfig; import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.qpid.server.management.plugin.HttpManagementUtil; + public class DefinedFileServlet extends HttpServlet { @@ -57,23 +59,25 @@ public class DefinedFileServlet extends HttpServlet @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - final ServletOutputStream output = response.getOutputStream(); - InputStream fileInput = getClass().getResourceAsStream("/resources/"+_filename); - - if(fileInput != null) + try (OutputStream output = HttpManagementUtil.getOutputStream(request, response)) { - byte[] buffer = new byte[1024]; - response.setStatus(HttpServletResponse.SC_OK); - int read = 0; + InputStream fileInput = getClass().getResourceAsStream("/resources/" + _filename); - while((read = fileInput.read(buffer)) > 0) + if (fileInput != null) { - output.write(buffer, 0, read); + byte[] buffer = new byte[1024]; + response.setStatus(HttpServletResponse.SC_OK); + int read = 0; + + while ((read = fileInput.read(buffer)) > 0) + { + output.write(buffer, 0, read); + } + } + else + { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "unknown file: " + _filename); } - } - else - { - response.sendError(HttpServletResponse.SC_NOT_FOUND, "unknown file: "+ _filename); } } } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/FileServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/FileServlet.java index 618aaed319..3eab80dbd8 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/FileServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/FileServlet.java @@ -22,17 +22,19 @@ package org.apache.qpid.server.management.plugin.servlet; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.net.URL; import java.util.Collections; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.qpid.server.management.plugin.HttpManagementUtil; + public class FileServlet extends HttpServlet { private static final String RESOURCES_PREFIX = "/resources"; @@ -97,7 +99,7 @@ public class FileServlet extends HttpServlet { byte[] buffer = new byte[1024]; int read = 0; - ServletOutputStream output = response.getOutputStream(); + OutputStream output = HttpManagementUtil.getOutputStream(request, response); try { while((read = fileInput.read(buffer)) != -1) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java index a9e80db3bf..c05814bb9c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java @@ -21,7 +21,8 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.io.IOException; -import java.io.PrintWriter; +import java.io.OutputStream; +import java.io.Writer; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; @@ -32,16 +33,18 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.apache.log4j.Logger; -import org.apache.qpid.server.management.plugin.HttpManagementConfiguration; -import org.apache.qpid.server.management.plugin.HttpManagementUtil; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; +import org.apache.qpid.server.management.plugin.HttpManagementConfiguration; +import org.apache.qpid.server.management.plugin.HttpManagementUtil; +import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.util.ConnectionScopedRuntimeException; + public abstract class AbstractServlet extends HttpServlet { private static final Logger LOGGER = Logger.getLogger(AbstractServlet.class); @@ -137,6 +140,18 @@ public abstract class AbstractServlet extends HttpServlet ); } + public Writer getOutputWriter(final HttpServletRequest request, final HttpServletResponse response) + throws IOException + { + return HttpManagementUtil.getOutputWriter(request, response, _managementConfiguration); + } + + public OutputStream getOutputStream(final HttpServletRequest request, final HttpServletResponse response) + throws IOException + { + return HttpManagementUtil.getOutputStream(request, response, _managementConfiguration); + } + /** * Performs the PUT action as the logged-in {@link Subject}. * Subclasses commonly override this method @@ -247,7 +262,7 @@ public abstract class AbstractServlet extends HttpServlet } } - protected void sendJsonResponse(Object object, HttpServletResponse response) throws IOException, + protected void sendJsonResponse(Object object, HttpServletRequest request, HttpServletResponse response) throws IOException, JsonGenerationException, JsonMappingException { response.setStatus(HttpServletResponse.SC_OK); @@ -257,7 +272,7 @@ public abstract class AbstractServlet extends HttpServlet response.setDateHeader ("Expires", 0); response.setContentType("application/json"); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, object); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java index 367ed5a2a9..cb41fd9203 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.management.plugin.servlet.rest; -import java.io.BufferedWriter; import java.io.IOException; import java.io.Writer; import java.util.Enumeration; @@ -31,14 +30,15 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig; + import org.apache.qpid.server.management.plugin.servlet.rest.action.ListAccessControlProviderAttributes; import org.apache.qpid.server.management.plugin.servlet.rest.action.ListAuthenticationProviderAttributes; import org.apache.qpid.server.management.plugin.servlet.rest.action.ListBrokerAttribute; import org.apache.qpid.server.management.plugin.servlet.rest.action.ListGroupProviderAttributes; import org.apache.qpid.server.management.plugin.servlet.rest.action.ListTimeZones; import org.apache.qpid.server.model.Broker; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; public class HelperServlet extends AbstractServlet { @@ -122,7 +122,7 @@ public class HelperServlet extends AbstractServlet return; } response.setContentType("application/json"); - final Writer writer = new BufferedWriter(response.getWriter()); + final Writer writer = getOutputWriter(request, response); _mapper.writeValue(writer, output); response.setStatus(HttpServletResponse.SC_OK); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogFileListingServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogFileListingServlet.java index 8b88e51e9c..a7889e4890 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogFileListingServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogFileListingServlet.java @@ -18,7 +18,7 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.io.IOException; -import java.io.PrintWriter; +import java.io.Writer; import java.util.Collections; import java.util.List; @@ -27,11 +27,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.LogManager; -import org.apache.qpid.server.management.plugin.log.LogFileDetails; -import org.apache.qpid.server.management.plugin.log.LogFileHelper; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; +import org.apache.qpid.server.management.plugin.log.LogFileDetails; +import org.apache.qpid.server.management.plugin.log.LogFileHelper; + public class LogFileListingServlet extends AbstractServlet { private static final long serialVersionUID = 1L; @@ -56,7 +57,7 @@ public class LogFileListingServlet extends AbstractServlet response.setContentType("application/json"); response.setStatus(HttpServletResponse.SC_OK); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, logFiles); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogRecordsServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogRecordsServlet.java index 35523ddf0f..b9d58c8868 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogRecordsServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogRecordsServlet.java @@ -17,18 +17,21 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.io.IOException; -import java.io.PrintWriter; +import java.io.Writer; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; + import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.qpid.server.logging.LogRecorder; + import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; +import org.apache.qpid.server.logging.LogRecorder; + public class LogRecordsServlet extends AbstractServlet { private static final long serialVersionUID = 2L; @@ -77,7 +80,7 @@ public class LogRecordsServlet extends AbstractServlet } } - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request,response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, logRecords); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LoggedOnUserPreferencesServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LoggedOnUserPreferencesServlet.java index 29cc881be7..25d109ba29 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LoggedOnUserPreferencesServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LoggedOnUserPreferencesServlet.java @@ -33,11 +33,12 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.codehaus.jackson.map.ObjectMapper; + import org.apache.qpid.server.management.plugin.HttpManagementUtil; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.PreferencesProvider; import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; -import org.codehaus.jackson.map.ObjectMapper; public class LoggedOnUserPreferencesServlet extends AbstractServlet { @@ -59,7 +60,7 @@ public class LoggedOnUserPreferencesServlet extends AbstractServlet { preferences = Collections.<String, Object>emptyMap(); } - sendJsonResponse(preferences, response); + sendJsonResponse(preferences, request, response); } /* @@ -88,7 +89,7 @@ public class LoggedOnUserPreferencesServlet extends AbstractServlet { preferences = Collections.<String, Object>emptyMap(); } - sendJsonResponse(preferences, response); + sendJsonResponse(preferences, request, response); } /* @@ -115,7 +116,7 @@ public class LoggedOnUserPreferencesServlet extends AbstractServlet { preferences = Collections.<String, Object>emptyMap(); } - sendJsonResponse(preferences, response); + sendJsonResponse(preferences, request, response); } private String getAuthenticatedUserName(HttpServletRequest request) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java index ef33a240a9..db58e49eeb 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java @@ -60,7 +60,7 @@ public class MessageContentServlet extends AbstractServlet { response.setContentType(finder.getMimeType()); response.setContentLength((int) finder.getSize()); - response.getOutputStream().write(finder.getContent()); + getOutputStream(request, response).write(finder.getContent()); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java index 8c77876e1a..8de74d189b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java @@ -18,7 +18,7 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.io.IOException; -import java.io.PrintWriter; +import java.io.Writer; import java.security.AccessControlException; import java.util.ArrayList; import java.util.HashMap; @@ -85,7 +85,7 @@ public class MessageServlet extends AbstractServlet response.setDateHeader ("Expires", 0); response.setContentType("application/json"); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request,response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, messageFinder.getMessageObject()); @@ -119,7 +119,7 @@ public class MessageServlet extends AbstractServlet response.setHeader("Pragma","no-cache"); response.setDateHeader ("Expires", 0); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request,response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, messages); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java index 55c2bf6901..c84eb3200b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.management.plugin.servlet.rest; -import java.io.BufferedWriter; import java.io.IOException; import java.io.Writer; import java.util.Collection; @@ -69,7 +68,7 @@ public class MetaDataServlet extends AbstractServlet classToDataMap.put(clazz.getSimpleName(), processCategory(clazz)); } - final Writer writer = new BufferedWriter(response.getWriter()); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, classToDataMap); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java index 57b3df8050..d96802cc8b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java @@ -16,7 +16,6 @@ */ package org.apache.qpid.server.management.plugin.servlet.rest; -import java.io.BufferedWriter; import java.io.IOException; import java.io.Writer; import java.security.AccessControlException; @@ -327,7 +326,7 @@ public class RestServlet extends AbstractServlet depth, actuals, includeSystemContext)); } - final Writer writer = new BufferedWriter(response.getWriter()); + Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, output); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java index 81d67caf96..3dcd4a3978 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java @@ -21,7 +21,7 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.io.IOException; -import java.io.PrintWriter; +import java.io.Writer; import java.net.SocketAddress; import java.security.Principal; import java.security.SecureRandom; @@ -100,7 +100,7 @@ public class SaslServlet extends AbstractServlet outputObject.put("mechanisms", (Object) mechanisms); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); @@ -268,7 +268,7 @@ public class SaslServlet extends AbstractServlet Map<String, Object> outputObject = new LinkedHashMap<String, Object>(); outputObject.put("challenge", new String(Base64.encodeBase64(challenge))); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); @@ -290,7 +290,7 @@ public class SaslServlet extends AbstractServlet outputObject.put("id", id); outputObject.put("challenge", new String(Base64.encodeBase64(challenge))); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/StructureServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/StructureServlet.java index 907610c8d2..7508aa2d0b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/StructureServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/StructureServlet.java @@ -17,7 +17,7 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import java.io.IOException; -import java.io.PrintWriter; +import java.io.Writer; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; @@ -55,7 +55,7 @@ public class StructureServlet extends AbstractServlet Map<String,Object> structure = generateStructure(getBroker(), Broker.class); - final PrintWriter writer = response.getWriter(); + final Writer writer = getOutputWriter(request, response); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(writer, structure); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java index 01657b131d..b782022986 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java @@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; + import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.PreferencesProvider; @@ -53,15 +54,15 @@ public class UserPreferencesServlet extends AbstractServlet String[] pathElements = getPathInfoElements(request); if (pathElements != null && pathElements.length > 1) { - getUserPreferences(pathElements[0], pathElements[1], response); + getUserPreferences(pathElements[0], pathElements[1], request, response); } else { - getUserList(pathElements, response); + getUserList(pathElements, request, response); } } - private void getUserPreferences(String authenticationProviderName, String userId, HttpServletResponse response) + private void getUserPreferences(String authenticationProviderName, String userId, HttpServletRequest request, HttpServletResponse response) throws IOException { try @@ -83,10 +84,10 @@ public class UserPreferencesServlet extends AbstractServlet } preferences = preferencesProvider.getPreferences(userId); - sendJsonResponse(preferences, response); + sendJsonResponse(preferences, request, response); } - private void getUserList(String[] pathElements, HttpServletResponse response) throws IOException + private void getUserList(String[] pathElements, HttpServletRequest request, HttpServletResponse response) throws IOException { List<Map<String, Object>> users = null; try @@ -98,7 +99,7 @@ public class UserPreferencesServlet extends AbstractServlet LOGGER.debug("Bad preferences request", e); response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage()); } - sendJsonResponse(users, response); + sendJsonResponse(users, request, response); } private PreferencesProvider getPreferencesProvider(String authenticationProviderName) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js index 8cc3e76b58..51a6c761f1 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js @@ -349,10 +349,14 @@ define(["dojo/_base/xhr", gotoButton: true, maxPageStep: 4, position: "bottom" - }, - indirectSelection: true + } }}; + function isActiveVH(item) + { + return item && item.virtualhosts && item.virtualhosts[0].state=="ACTIVE"; + } + that.vhostsGrid = new UpdatableStore(that.brokerData.virtualhostnodes, query(".broker-virtualhosts")[0], [ @@ -373,20 +377,27 @@ define(["dojo/_base/xhr", formatter: function(item){ return item && item.virtualhosts? item.virtualhosts[0].type: "N/A"; } - }, - { name: "Connections", field: "_item", width: "10%", + }, + { name: "Connections", field: "_item", width: "8%", formatter: function(item){ - return item && item.virtualhosts? item.virtualhosts[0].statistics.connectionCount: 0; + return isActiveVH(item)? item.virtualhosts[0].statistics.connectionCount: "N/A"; } }, - { name: "Queues", field: "_item", width: "10%", + { name: "Queues", field: "_item", width: "8%", formatter: function(item){ - return item && item.virtualhosts? item.virtualhosts[0].statistics.queueCount: 0; + return isActiveVH(item)? item.virtualhosts[0].statistics.queueCount: "N/A"; } }, - { name: "Exchanges", field: "_item", width: "10%", + { name: "Exchanges", field: "_item", width: "8%", formatter: function(item){ - return item && item.virtualhosts? item.virtualhosts[0].statistics.exchangeCount: 0; + return isActiveVH(item)? item.virtualhosts[0].statistics.exchangeCount: "N/A"; + } + }, + { + name: "Default", field: "_item", width: "6%", + formatter: function(item){ + var val = item && item.virtualhosts? item.virtualhosts[0].name: null; + return "<input type='radio' disabled='disabled' "+(val == that.brokerData.defaultVirtualHost ? "checked='checked'": "")+" />"; } } ], function(obj) { @@ -424,6 +435,7 @@ define(["dojo/_base/xhr", if (data.length == 1) { that.showVirtualHost(data[0], brokerObj); + that.vhostsGrid.grid.selection.clear(); } }); @@ -434,6 +446,7 @@ define(["dojo/_base/xhr", { var item = data[0]; that.controller.show("virtualhostnode", item.name, brokerObj, item.id); + that.vhostsGrid.grid.selection.clear(); } } ); @@ -457,6 +470,7 @@ define(["dojo/_base/xhr", var item = data[0]; util.sendRequest("api/latest/virtualhostnode/" + encodeURIComponent(item.name), "PUT", {desiredState: "ACTIVE"}); + that.vhostsGrid.grid.selection.clear(); } }); @@ -473,6 +487,7 @@ define(["dojo/_base/xhr", { util.sendRequest("api/latest/virtualhostnode/" + encodeURIComponent(item.name), "PUT", {desiredState: "STOPPED"}); + that.vhostsGrid.grid.selection.clear(); } } }); @@ -486,6 +501,7 @@ define(["dojo/_base/xhr", var host = item.virtualhosts[0]; util.sendRequest("api/latest/virtualhost/" + encodeURIComponent(item.name) + "/" + encodeURIComponent(host.name), "PUT", {desiredState: "ACTIVE"}); + that.vhostsGrid.grid.selection.clear(); } }); @@ -501,11 +517,12 @@ define(["dojo/_base/xhr", { util.sendRequest("api/latest/virtualhost/" + encodeURIComponent(item.name) + "/" + encodeURIComponent(host.name), "PUT", {desiredState: "STOPPED"}); + that.vhostsGrid.grid.selection.clear(); } } }); - - gridProperties.selectionMode="extended"; + gridProperties.selectionMode = "extended"; + gridProperties.plugins.indirectSelection = true; that.portsGrid = new UpdatableStore(that.brokerData.ports, query(".broker-ports")[0], diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js index efe6f4eeff..07c5c25171 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js @@ -123,7 +123,16 @@ define(["dojo/_base/xhr", name: "sessionTimeout" }); } + }, { + name: "compressResponses", + createWidget: function(plugin) { + return new dijit.form.CheckBox({ + required: false, + checked: plugin.compressResponses, + label: "Compress responses:", + name: "compressResponses"}); } + } ]; var data = this.managementHttpUpdater.pluginData; util.showSetAttributesDialog( @@ -143,6 +152,8 @@ define(["dojo/_base/xhr", this.sessionTimeout = query(".sessionTimeout", node)[0]; this.httpsSaslAuthenticationEnabled = query(".httpsSaslAuthenticationEnabled", node)[0]; this.httpSaslAuthenticationEnabled = query(".httpSaslAuthenticationEnabled", node)[0]; + this.compressResponses = query(".compressResponses", node)[0]; + } ManagementHttpUpdater.prototype.update = function(syncRequest) @@ -161,6 +172,7 @@ define(["dojo/_base/xhr", that.httpsBasicAuthenticationEnabled.innerHTML = showBoolean(that.pluginData.httpsBasicAuthenticationEnabled); that.httpsSaslAuthenticationEnabled.innerHTML = showBoolean(that.pluginData.httpsSaslAuthenticationEnabled); that.httpSaslAuthenticationEnabled.innerHTML = showBoolean(that.pluginData.httpSaslAuthenticationEnabled); + that.compressResponses.innerHTML = showBoolean(that.pluginData.compressResponses); that.sessionTimeout.innerHTML = that.pluginData.sessionTimeout; }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/plugin/showManagementHttp.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/plugin/showManagementHttp.html index e91120e43b..b12869981d 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/plugin/showManagementHttp.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/plugin/showManagementHttp.html @@ -40,6 +40,10 @@ <div class="formLabel-labelCell">Session timeout (s):</div> <div class="sessionTimeout"></div> </div> + <div class="clear"> + <div class="formLabel-labelCell">Compress content:</div> + <div class="compressResponses"></div> + </div> </div> <br/> <div class="dijitDialogPaneActionBar"> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/add.html index 7cf789e520..88ca0b3807 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/add.html @@ -19,15 +19,13 @@ <div> <div class="clear"> - <div class="formLabel-labelCell tableContainer-labelCell">Message store path*:</div> + <div class="formLabel-labelCell tableContainer-labelCell">Message store path:</div> <div class="formLabel-controlCell tableContainer-valueCell"> <input type="text" id="addVirtualHost.storePath" data-dojo-type="dijit/form/ValidationTextBox" data-dojo-props=" name: 'storePath', placeHolder: 'path/to/store', - required: true, - missingMessage: 'Store path must be supplied', title: 'Enter message store path'" /> </div> </div> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/edit.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/edit.html index 9e240a83c4..60b8faef56 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/edit.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhost/sizemonitoring/edit.html @@ -20,15 +20,13 @@ <div> <div class="clear"> - <div class="formLabel-labelCell tableContainer-labelCell">Message store path*:</div> + <div class="formLabel-labelCell tableContainer-labelCell">Message store path:</div> <div class="formLabel-controlCell tableContainer-valueCell"> <input type="text" id="editVirtualHost.storePath" data-dojo-type="dijit/form/ValidationTextBox" data-dojo-props=" name: 'storePath', placeHolder: 'path/to/store', - required: true, - missingMessage: 'Store path must be supplied', disabled: true, title: 'Enter message store path'" /> </div> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/filebased/edit.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/filebased/edit.html index a132444268..2f0d72fe9a 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/filebased/edit.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/filebased/edit.html @@ -20,15 +20,13 @@ <div> <div class="clear"> - <div class="formLabel-labelCell tableContainer-labelCell">Configuration store path*:</div> + <div class="formLabel-labelCell tableContainer-labelCell">Configuration store path:</div> <div class="formLabel-controlCell tableContainer-valueCell"> <input type="text" id="editVirtualHostNode.storePath" data-dojo-type="dijit/form/ValidationTextBox" data-dojo-props=" name: 'storePath', placeHolder: 'path/to/store', - required: true, - missingMessage: 'Store path must be supplied', title: 'Enter configuration store path'" /> </div> </div> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/json/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/json/add.html index 622eb17b63..ec3ef79fa0 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/json/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/virtualhostnode/json/add.html @@ -20,15 +20,13 @@ --> <div> <div class="clear"> - <div class="formLabel-labelCell tableContainer-labelCell">Store path*:</div> + <div class="formLabel-labelCell tableContainer-labelCell">Store path:</div> <div class="formLabel-controlCell tableContainer-valueCell"> <input type="text" id="addVirtualHostNode.jsonStorePath" data-dojo-type="dijit/form/ValidationTextBox" data-dojo-props=" name: 'storePath', placeHolder: 'path/to/store', - required: true, - missingMessage: 'Store path must be supplied', title: 'Enter store path'" /> </div> </div> |