Add mbean operation to explain endpoint options

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e501b5ef
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e501b5ef
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e501b5ef

Branch: refs/heads/master
Commit: e501b5efda28263f0a0e3258329771b73effc696
Parents: bea785f
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Nov 6 12:17:43 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Nov 7 13:25:18 2014 +0100

----------------------------------------------------------------------
 .../management/mbean/CamelOpenMBeanTypes.java   | 11 ++++
 .../mbean/ManagedCamelContextMBean.java         |  2 -
 .../management/mbean/ManagedEndpointMBean.java  |  6 ++
 .../camel/management/mbean/ManagedEndpoint.java | 42 +++++++++++++
 .../management/ManagedEndpointExplainTest.java  | 64 ++++++++++++++++++++
 .../camel/management/ManagedEndpointTest.java   |  4 +-
 6 files changed, 125 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e501b5ef/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
index 52eee75..f728aea 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
@@ -64,4 +64,15 @@ public final class CamelOpenMBeanTypes {
                 new OpenType[]{SimpleType.STRING});
     }
 
+    public static TabularType explainEndpointTabularType() throws 
OpenDataException {
+        CompositeType ct = explainEndpointsCompositeType();
+        return new TabularType("explainEndpoint", "Explain how this endpoint 
is configured", ct, new String[]{"option", "value", "description"});
+    }
+
+    public static CompositeType explainEndpointsCompositeType() throws 
OpenDataException {
+        return new CompositeType("endpoint", "Explain Endpoint", new 
String[]{"option", "value", "description"},
+                new String[]{"Option", "Value", "Description"},
+                new OpenType[]{SimpleType.STRING, SimpleType.STRING, 
SimpleType.STRING});
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e501b5ef/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
index 441e301..0050b32 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
@@ -221,7 +221,6 @@ public interface ManagedCamelContextMBean extends 
ManagedPerformanceCounterMBean
     @ManagedOperation(description = "Find all Camel components names available 
in the classpath")
     List<String> findComponentNames() throws Exception;
 
-
     /**
      * Returns the JSON schema representation of the endpoint parameters for 
the given component name
      *
@@ -240,7 +239,6 @@ public interface ManagedCamelContextMBean extends 
ManagedPerformanceCounterMBean
     @ManagedOperation(description = "Reset counters")
     void reset(boolean includeRoutes) throws Exception;
 
-
     /**
      * Helper method for tooling which returns the completion list of the 
endpoint path
      * from the given endpoint name, properties and current path expression.

http://git-wip-us.apache.org/repos/asf/camel/blob/e501b5ef/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
index 69206b6..fecaf8e 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
@@ -16,7 +16,10 @@
  */
 package org.apache.camel.api.management.mbean;
 
+import javax.management.openmbean.TabularData;
+
 import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
 
 public interface ManagedEndpointMBean {
 
@@ -35,4 +38,7 @@ public interface ManagedEndpointMBean {
     @ManagedAttribute(description = "Endpoint State")
     String getState();
 
+    @ManagedOperation(description = "Explain how this endpoint is configured 
(option, value, description)")
+    TabularData explain();
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/e501b5ef/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
index deffddf..d9d569b 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
@@ -16,13 +16,23 @@
  */
 package org.apache.camel.management.mbean;
 
+import java.util.Map;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.TabularData;
+import javax.management.openmbean.TabularDataSupport;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.ManagedInstance;
 import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedEndpointMBean;
 import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
 
 @ManagedResource(description = "Managed Endpoint")
 public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean {
@@ -73,6 +83,38 @@ public class ManagedEndpoint implements ManagedInstance, 
ManagedEndpointMBean {
     }
 
     @Override
+    public TabularData explain() {
+        try {
+            TabularData answer = new 
TabularDataSupport(CamelOpenMBeanTypes.explainEndpointTabularType());
+
+            Map<String, Object> options = 
URISupport.parseParameters(endpoint.getEndpointConfiguration().getURI());
+            for (Map.Entry<String, Object> entry : options.entrySet()) {
+
+                CompositeType ct = 
CamelOpenMBeanTypes.explainEndpointsCompositeType();
+
+                String option = entry.getKey();
+
+                String value = "";
+                if (entry.getValue() != null) {
+                    value = entry.getValue().toString();
+                }
+                value = URISupport.sanitizePath(value);
+
+                // TODO: get from json schema
+                String description = "";
+
+                CompositeData data = new CompositeDataSupport(ct, new String[]
+                        {"option", "value", "description"},
+                        new Object[]{option, value, description});
+                answer.put(data);
+            }
+            return answer;
+        } catch (Exception e) {
+            throw ObjectHelper.wrapRuntimeCamelException(e);
+        }
+    }
+
+    @Override
     public Endpoint getInstance() {
         return endpoint;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/e501b5ef/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointExplainTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointExplainTest.java
 
b/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointExplainTest.java
new file mode 100644
index 0000000..d1042b5
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointExplainTest.java
@@ -0,0 +1,64 @@
+/**
+ * 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.camel.management;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
+
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version 
+ */
+public class ManagedEndpointExplainTest extends ManagementTestSupport {
+
+    public void testManageEndpointExplain() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        MBeanServer mbeanServer = getMBeanServer();
+
+        ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=endpoints,name=\"seda://test\"");
+        assertTrue(mbeanServer.isRegistered(on));
+
+        on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=endpoints,name=\"mock://result\"");
+        assertTrue(mbeanServer.isRegistered(on));
+
+        on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=endpoints,name=\"log://foo\\?maxChars=50&showExchangeId=true\"");
+        assertTrue(mbeanServer.isRegistered(on));
+
+        // there should be 2 options
+        TabularData data = (TabularData) mbeanServer.invoke(on, "explain", 
null, null);
+        assertEquals(2, data.size());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("seda:test")
+                    .to("log:foo?showExchangeId=true&maxChars=50")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/e501b5ef/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointTest.java 
b/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointTest.java
index b24889b..8a7645e 100644
--- 
a/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedEndpointTest.java
@@ -36,10 +36,10 @@ public class ManagedEndpointTest extends 
ManagementTestSupport {
         MBeanServer mbeanServer = getMBeanServer();
 
         ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=endpoints,name=\"seda://test\"");
-        mbeanServer.isRegistered(on);
+        assertTrue(mbeanServer.isRegistered(on));
 
         on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=endpoints,name=\"mock://result\"");
-        mbeanServer.isRegistered(on);
+        assertTrue(mbeanServer.isRegistered(on));
     }
 
     @Override

Reply via email to