diff options
Diffstat (limited to 'qpid/java')
10 files changed, 129 insertions, 38 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java index 24a62de61c..f65688fea7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java @@ -123,6 +123,12 @@ public class ConfiguredAutomatedAttribute<C extends ConfiguredObject, T> extend return _annotation.persist(); } + @Override + public boolean isOversized() + { + return _annotation.oversize(); + } + public String getDescription() { return _annotation.description(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java index 9495c1ff84..9a53553c86 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java @@ -54,6 +54,12 @@ public class ConfiguredDerivedAttribute<C extends ConfiguredObject, T> extends return _annotation.persist(); } + @Override + public boolean isOversized() + { + return _annotation.oversize(); + } + public String getDescription() { return _annotation.description(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java index 1d1c736cd3..f03a036191 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java @@ -43,6 +43,8 @@ public abstract class ConfiguredObjectAttribute<C extends ConfiguredObject, T> e public abstract boolean isPersisted(); + public abstract boolean isOversized(); + public abstract String getDescription(); public T convert(final Object value, C object) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java index 57fc5b365e..e5c17a17e4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java @@ -31,5 +31,5 @@ public @interface DerivedAttribute boolean secure() default false; boolean persist() default false; String description() default ""; - + boolean oversize() default false; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java index d8b36f487c..75c349d9c0 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java @@ -35,4 +35,5 @@ public @interface ManagedAttribute String defaultValue() default ""; String description() default ""; String[] validValues() default {}; + boolean oversize() default false; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java index 483ddd478d..66a5508ec6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java @@ -37,4 +37,6 @@ public @interface ManagedObject String type() default ""; String validChildTypes() default ""; boolean register() default true; + String description() default ""; + boolean deprecated() default false; } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 7d86bd3c8c..24fb272186 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -54,23 +54,16 @@ public class ConfiguredObjectToMapConverter Class<? extends ConfiguredObject> clazz, int depth, final boolean useActualValues, - final boolean includeSystemContext, - final boolean extractAsConfig) - { - return convertObjectToMap(confObject, clazz, depth, useActualValues, false, includeSystemContext, extractAsConfig); - } - - public Map<String, Object> convertObjectToMap(final ConfiguredObject<?> confObject, - Class<? extends ConfiguredObject> clazz, - int depth, - final boolean useActualValues, final boolean inheritedActuals, final boolean includeSystemContext, - final boolean extractAsConfig) + final boolean extractAsConfig, + final int oversizeThreshold + ) { Map<String, Object> object = new LinkedHashMap<>(); - incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext, extractAsConfig); + incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext, + extractAsConfig, oversizeThreshold); if(!extractAsConfig) { incorporateStatisticsIntoMap(confObject, object); @@ -78,7 +71,8 @@ public class ConfiguredObjectToMapConverter if(depth > 0) { - incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals, includeSystemContext, extractAsConfig); + incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals, + includeSystemContext, extractAsConfig, oversizeThreshold); } return object; } @@ -90,7 +84,8 @@ public class ConfiguredObjectToMapConverter final boolean useActualValues, final boolean inheritedActuals, final boolean includeSystemContext, - final boolean extractAsConfig) + final boolean extractAsConfig, + final int oversizeThreshold) { // if extracting as config add a fake attribute for each secondary parent if(extractAsConfig && confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1) @@ -160,7 +155,26 @@ public class ConfiguredObjectToMapConverter } else if (value != null) { - object.put(name, value); + ConfiguredObjectAttribute<?, ?> attribute = confObject.getModel() + .getTypeRegistry() + .getAttributeTypes(confObject.getClass()) + .get(name); + if(attribute.isOversized() && !extractAsConfig) + { + String valueString = String.valueOf(value); + if(valueString.length() > oversizeThreshold) + { + object.put(name, String.valueOf(value).substring(0,oversizeThreshold-4) + "..."); + } + else + { + object.put(name, value); + } + } + else + { + object.put(name, value); + } } else if (extractAsConfig) { @@ -220,7 +234,8 @@ public class ConfiguredObjectToMapConverter final boolean useActualValues, final boolean inheritedActuals, final boolean includeSystemContext, - final boolean extractAsConfig) + final boolean extractAsConfig, + final int oversizeThreshold) { List<Class<? extends ConfiguredObject>> childTypes = new ArrayList<>(confObject.getModel().getChildTypes(clazz)); @@ -262,7 +277,8 @@ public class ConfiguredObjectToMapConverter useActualValues, inheritedActuals, includeSystemContext, - extractAsConfig)); + extractAsConfig, + oversizeThreshold)); } } 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 01dd873aa5..9b384cd36f 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 @@ -43,6 +43,7 @@ import org.apache.qpid.server.model.ConfiguredAutomatedAttribute; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectAttribute; import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Model; public class MetaDataServlet extends AbstractServlet @@ -103,6 +104,18 @@ public class MetaDataServlet extends AbstractServlet typeDetails.put("attributes", processAttributes(type)); typeDetails.put("managedInterfaces", getManagedInterfaces(type)); typeDetails.put("validChildTypes", getValidChildTypes(type)); + ManagedObject annotation = type.getAnnotation(ManagedObject.class); + if(annotation != null) + { + if(annotation.deprecated()) + { + typeDetails.put("deprecated",true); + } + if(!"".equals(annotation.description() ) ) + { + typeDetails.put("description", annotation.description()); + } + } return typeDetails; } 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 71ec6e786f..1ed0741a8e 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 @@ -56,6 +56,7 @@ public class RestServlet extends AbstractServlet private static final String HIERARCHY_INIT_PARAMETER = "hierarchy"; public static final String DEPTH_PARAM = "depth"; + public static final String OVERSIZE_PARAM = "oversize"; public static final String ACTUALS_PARAM = "actuals"; public static final String SORT_PARAM = "sort"; public static final String INCLUDE_SYS_CONTEXT_PARAM = "includeSysContext"; @@ -71,6 +72,7 @@ public class RestServlet extends AbstractServlet public static final Set<String> RESERVED_PARAMS = new HashSet<>(Arrays.asList(DEPTH_PARAM, SORT_PARAM, + OVERSIZE_PARAM, ACTUALS_PARAM, INCLUDE_SYS_CONTEXT_PARAM, EXTRACT_INITIAL_CONFIG_PARAM, @@ -345,17 +347,20 @@ public class RestServlet extends AbstractServlet boolean actuals; boolean includeSystemContext; boolean inheritedActuals; + int oversizeThreshold; if(extractInitialConfig) { depth = Integer.MAX_VALUE; + oversizeThreshold = Integer.MAX_VALUE; actuals = true; includeSystemContext = false; inheritedActuals = false; } else { - depth = getDepthParameterFromRequest(request); + depth = getIntParameterFromRequest(request, DEPTH_PARAM, 1); + oversizeThreshold = getIntParameterFromRequest(request, OVERSIZE_PARAM, 120); actuals = getBooleanParameterFromRequest(request, ACTUALS_PARAM); includeSystemContext = getBooleanParameterFromRequest(request, INCLUDE_SYS_CONTEXT_PARAM); inheritedActuals = getBooleanParameterFromRequest(request, INHERITED_ACTUALS_PARAM); @@ -364,8 +369,9 @@ public class RestServlet extends AbstractServlet List<Map<String, Object>> output = new ArrayList<>(); for(ConfiguredObject configuredObject : allObjects) { + output.add(_objectConverter.convertObjectToMap(configuredObject, getConfiguredClass(), - depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig)); + depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig, oversizeThreshold)); } @@ -679,22 +685,24 @@ public class RestServlet extends AbstractServlet response.setDateHeader ("Expires", 0); } - private int getDepthParameterFromRequest(HttpServletRequest request) + private int getIntParameterFromRequest(final HttpServletRequest request, + final String paramName, + final int defaultValue) { - int depth = 1; - final String depthString = request.getParameter(DEPTH_PARAM); - if(depthString!=null) + int intValue = defaultValue; + final String stringValue = request.getParameter(paramName); + if(stringValue!=null) { try { - depth = Integer.parseInt(depthString); + intValue = Integer.parseInt(stringValue); } catch (NumberFormatException e) { - LOGGER.warn("Could not parse " + depthString + " as integer"); + LOGGER.warn("Could not parse " + stringValue + " as integer for parameter " + paramName); } } - return depth; + return intValue; } private boolean getBooleanParameterFromRequest(HttpServletRequest request, final String paramName) diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index ac595154bb..f22135ef61 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -57,8 +57,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase when(_configuredObject.getStatistics()).thenReturn(Collections.singletonMap(statisticName, (Number) statisticValue)); - Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0, - false, false, false); + Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 0, + false, + false, + false, + false, + 120); Map<String, Object> statsAsMap = (Map<String, Object>) resultMap.get(STATISTICS_MAP_KEY); assertNotNull("Statistics should be part of map", statsAsMap); assertEquals("Unexpected number of statistics", 1, statsAsMap.size()); @@ -71,8 +77,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase final String attributeValue = "value"; configureMockToReturnOneAttribute(_configuredObject, attributeName, attributeValue); - Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0, - false, false, false); + Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 0, + false, + false, + false, + false, + 120); assertEquals("Unexpected number of attributes", 1, resultMap.size()); assertEquals("Unexpected attribute value", attributeValue, resultMap.get(attributeName)); } @@ -89,8 +101,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase configureMockToReturnOneAttribute(_configuredObject, attributeName, attributeValue); - Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0, - false, false, false); + Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 0, + false, + false, + false, + false, + 120); assertEquals("Unexpected number of attributes", 1, resultMap.size()); assertEquals("Unexpected attribute value", "attributeConfiguredObjectName", resultMap.get(attributeName)); } @@ -108,8 +126,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase configureMockToReturnOneAttribute(mockChild, childAttributeName, childAttributeValue); when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild)); - Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 1, - false, false, false); + Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 120); assertEquals("Unexpected parent map size", 1, resultMap.size()); final List<Map<String, Object>> childList = (List<Map<String, Object>>) resultMap.get("testchilds"); @@ -146,8 +170,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild)); - Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 1, true, - false, false); + Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + true, + false, + false, + false, + 120); assertEquals("Unexpected parent map size", 2, resultMap.size()); assertEquals("Incorrect context", resultMap.get(ConfiguredObject.CONTEXT), actualContext); List<Map<String, Object>> childList = (List<Map<String, Object>>) resultMap.get("testchilds"); @@ -158,7 +188,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase assertEquals("Unexpected child attribute value", childActualAttributeValue, childMap.get(childAttributeName)); - resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 1, false, false, false); + resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 120); assertEquals("Unexpected parent map size", 2, resultMap.size()); Map<String, Object> inheritedContext = new HashMap<>(); inheritedContext.put("key","value"); |
