Repository: camel
Updated Branches:
  refs/heads/master e55b0e8ce -> 3bb5ee21c


CAMEL-9014: Add api for extended JMX information so we can easier know which 
EIPs support that or not.


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

Branch: refs/heads/master
Commit: a3838428ca9806af4d04099c5d1e439699b3de82
Parents: e55b0e8
Author: Claus Ibsen <davscl...@apache.org>
Authored: Sun Jul 26 13:52:50 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sun Jul 26 14:10:28 2015 +0200

----------------------------------------------------------------------
 .../management/mbean/ManagedProcessorMBean.java |  2 +-
 .../mbean/ManagedSendProcessorMBean.java        |  8 ++++-
 .../camel/management/mbean/ManagedChoice.java   |  2 +-
 .../ManagedCircuitBreakerLoadBalancer.java      |  2 +-
 .../management/mbean/ManagedDynamicRouter.java  |  2 +-
 .../camel/management/mbean/ManagedEnricher.java |  2 +-
 .../mbean/ManagedFailoverLoadBalancer.java      |  2 +-
 .../management/mbean/ManagedProcessor.java      |  2 +-
 .../management/mbean/ManagedRecipientList.java  |  2 +-
 .../management/mbean/ManagedRoutingSlip.java    |  2 +-
 .../mbean/ManagedSendDynamicProcessor.java      |  2 +-
 .../management/mbean/ManagedSendProcessor.java  | 37 ++++++++++++++++++++
 .../mbean/ManagedWireTapProcessor.java          |  2 +-
 .../apache/camel/processor/SendProcessor.java   | 11 ++++++
 .../resources/META-INF/spring/camel-context.xml | 13 +++++--
 15 files changed, 76 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
index bc5753d..daf7df5 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
@@ -42,7 +42,7 @@ public interface ManagedProcessorMBean extends 
ManagedPerformanceCounterMBean {
     Integer getIndex();
 
     @ManagedAttribute(description = "Whether this processor supports extended 
JMX information")
-    Boolean isSupportExtendedInformation();
+    Boolean getSupportExtendedInformation();
 
     @ManagedOperation(description = "Start Processor")
     void start() throws Exception;

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
index b164592..7950f6c 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
@@ -16,9 +16,12 @@
  */
 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 ManagedSendProcessorMBean extends ManagedProcessorMBean {
+public interface ManagedSendProcessorMBean extends ManagedProcessorMBean, 
ManagedExtendedInformation {
 
     @ManagedAttribute(description = "Destination as Endpoint URI", mask = true)
     String getDestination();
@@ -33,4 +36,7 @@ public interface ManagedSendProcessorMBean extends 
ManagedProcessorMBean {
     @ManagedAttribute(description = "Message Exchange Pattern")
     String getMessageExchangePattern();
 
+    @ManagedOperation(description = "Statistics of the endpoint which has been 
sent to")
+    TabularData extendedInformation();
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
index a9e0e2f..e3acb65 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
@@ -58,7 +58,7 @@ public class ManagedChoice extends ManagedProcessor 
implements ManagedChoiceMBea
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCircuitBreakerLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCircuitBreakerLoadBalancer.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCircuitBreakerLoadBalancer.java
index 3fbf7b3..ec499fa 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCircuitBreakerLoadBalancer.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCircuitBreakerLoadBalancer.java
@@ -49,7 +49,7 @@ public class ManagedCircuitBreakerLoadBalancer extends 
ManagedProcessor implemen
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
index 704a2c8..21bfdc1 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
@@ -72,7 +72,7 @@ public class ManagedDynamicRouter extends ManagedProcessor 
implements ManagedDyn
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEnricher.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEnricher.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEnricher.java
index 68081d67..657b4f9 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEnricher.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEnricher.java
@@ -66,7 +66,7 @@ public class ManagedEnricher extends ManagedProcessor 
implements ManagedEnricher
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
index 58a39ee..51e305d 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
@@ -60,7 +60,7 @@ public class ManagedFailoverLoadBalancer extends 
ManagedProcessor implements Man
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
index 4043299..4374f2f 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
@@ -90,7 +90,7 @@ public class ManagedProcessor extends 
ManagedPerformanceCounter implements Manag
         return definition.getIndex();
     }
 
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
index 23dfd5f..775e318 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
@@ -67,7 +67,7 @@ public class ManagedRecipientList extends ManagedProcessor 
implements ManagedRec
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
index 9f77530..bbc7a13 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
@@ -67,7 +67,7 @@ public class ManagedRoutingSlip extends ManagedProcessor 
implements ManagedRouti
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendDynamicProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendDynamicProcessor.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendDynamicProcessor.java
index 47709ae..deecd72 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendDynamicProcessor.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendDynamicProcessor.java
@@ -67,7 +67,7 @@ public class ManagedSendDynamicProcessor extends 
ManagedProcessor implements Man
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
index 43f74e7..b762cea 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
@@ -16,12 +16,20 @@
  */
 package org.apache.camel.management.mbean;
 
+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.CamelContext;
 import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedSendProcessorMBean;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.SendProcessor;
 import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 
 /**
@@ -47,6 +55,17 @@ public class ManagedSendProcessor extends ManagedProcessor 
implements ManagedSen
         }
     }
 
+    @Override
+    public Boolean getSupportExtendedInformation() {
+        return true;
+    }
+
+    @Override
+    public synchronized void reset() {
+        super.reset();
+        processor.reset();
+    }
+
     public SendProcessor getProcessor() {
         return processor;
     }
@@ -67,4 +86,22 @@ public class ManagedSendProcessor extends ManagedProcessor 
implements ManagedSen
         }
     }
 
+    @Override
+    public TabularData extendedInformation() {
+        try {
+            TabularData answer = new 
TabularDataSupport(CamelOpenMBeanTypes.endpointsUtilizationTabularType());
+
+            // we only have 1 endpoint
+
+            CompositeType ct = 
CamelOpenMBeanTypes.endpointsUtilizationCompositeType();
+            String url = getDestination();
+            Long hits = processor.getCounter();
+
+            CompositeData data = new CompositeDataSupport(ct, new 
String[]{"url", "hits"}, new Object[]{url, hits});
+            answer.put(data);
+            return answer;
+        } catch (Exception e) {
+            throw ObjectHelper.wrapRuntimeCamelException(e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedWireTapProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedWireTapProcessor.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedWireTapProcessor.java
index e64fe71..55639ed 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedWireTapProcessor.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedWireTapProcessor.java
@@ -67,7 +67,7 @@ public class ManagedWireTapProcessor extends ManagedProcessor 
implements Managed
     }
 
     @Override
-    public Boolean isSupportExtendedInformation() {
+    public Boolean getSupportExtendedInformation() {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java 
b/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
index a8637ae..889d5b8 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
@@ -59,6 +59,7 @@ public class SendProcessor extends ServiceSupport implements 
AsyncProcessor, Tra
     protected Endpoint destination;
     protected ExchangePattern destinationExchangePattern;
     protected String id;
+    protected volatile long counter;
 
     public SendProcessor(Endpoint destination) {
         this(destination, null);
@@ -122,6 +123,8 @@ public class SendProcessor extends ServiceSupport 
implements AsyncProcessor, Tra
         // if you want to permanently to change the MEP then use 
.setExchangePattern in the DSL
         final ExchangePattern existingPattern = exchange.getPattern();
 
+        counter++;
+
         // if we have a producer then use that as its optimized
         if (producer != null) {
 
@@ -195,6 +198,14 @@ public class SendProcessor extends ServiceSupport 
implements AsyncProcessor, Tra
         return exchange;
     }
 
+    public long getCounter() {
+        return counter;
+    }
+
+    public void reset() {
+        counter = 0;
+    }
+
     protected void doStart() throws Exception {
         if (producerCache == null) {
             // use a single producer cache as we need to only hold reference 
for one destination

http://git-wip-us.apache.org/repos/asf/camel/blob/a3838428/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
----------------------------------------------------------------------
diff --git 
a/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
 
b/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
index 56e1f7e..251d73e 100644
--- 
a/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
+++ 
b/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
@@ -29,7 +29,8 @@
   <!-- create a CamelContext -->
   <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"; 
depends-on="broker">
     <!-- Default JMX connector url: 
"service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel" -->
-    <jmxAgent id="agent" createConnector="true" loadStatisticsEnabled="true"/>
+    <!-- lets include extended information -->
+    <jmxAgent id="agent" createConnector="true" loadStatisticsEnabled="true" 
statisticsLevel="Extended"/>
 
     <route>
       <description>Route that creates input files</description>
@@ -46,14 +47,20 @@
         <!-- throttle 10 msg/sec being send the the ActiveMQ queue -->
         <throttle>
           <constant>10</constant>
-          <to uri="activemq:queue:stock"/>
+          <!-- store the stock symbol as a header -->
+          <setHeader headerName="symbol">
+            <xpath>/stock/symbol/text()</xpath>
+          </setHeader>
+          <!-- send the message to a dynamic to, with the stock symbol as the 
name of the queue -->
+          <toD uri="activemq:queue:stock.${header.symbol}"/>
         </throttle>
       </split>
     </route>
 
     <route>
       <description>Route that process stock prices and logs</description>
-      <from uri="activemq:queue:stock"/>
+      <!-- use ActiveMQ wildcard with &gt; to consume from any stock queues -->
+      <from uri="activemq:queue:stock.>"/>
       <delay>
         <constant>100</constant>
       </delay>

Reply via email to