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 > to consume from any stock queues --> + <from uri="activemq:queue:stock.>"/> <delay> <constant>100</constant> </delay>