You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/07/25 13:55:34 UTC
[7/7] camel git commit: CAMEL-9014: Option to turn on extended JMX
statistics for EIPs to track fine grained utilization statistics such as
which and how often they send to dynamic endpoints.
CAMEL-9014: Option to turn on extended JMX statistics for EIPs to track fine grained utilization statistics such as which and how often they send to dynamic endpoints.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c330b8aa
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c330b8aa
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c330b8aa
Branch: refs/heads/master
Commit: c330b8aad66941eda38e8197d0de76d9f9faad0b
Parents: 1a576fa
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Jul 25 13:46:31 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Jul 25 13:59:39 2015 +0200
----------------------------------------------------------------------
.../management/mbean/ManagedEnricherMBean.java | 6 +++
.../camel/management/mbean/ManagedEnricher.java | 43 +++++++++++++++++++-
.../org/apache/camel/processor/Enricher.java | 5 +++
.../camel/management/ManagedEnricherTest.java | 23 ++++++++++-
4 files changed, 74 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/c330b8aa/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEnricherMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEnricherMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEnricherMBean.java
index 58666dd..f6bd8be 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEnricherMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEnricherMBean.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 ManagedEnricherMBean extends ManagedProcessorMBean {
@@ -38,4 +41,7 @@ public interface ManagedEnricherMBean extends ManagedProcessorMBean {
@ManagedAttribute(description = "Whether to aggregate when there was an exception thrown during calling the resource endpoint")
Boolean isAggregateOnException();
+ @ManagedOperation(description = "Statistics of the endpoints that has been enriched from")
+ TabularData endpointStatistics();
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/c330b8aa/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 12451ac..a357774 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
@@ -16,12 +16,22 @@
*/
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.CamelContext;
import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
import org.apache.camel.api.management.mbean.ManagedEnricherMBean;
import org.apache.camel.model.EnrichDefinition;
import org.apache.camel.processor.Enricher;
+import org.apache.camel.spi.EndpointUtilizationStatistics;
import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.URISupport;
/**
@@ -31,6 +41,7 @@ import org.apache.camel.util.URISupport;
public class ManagedEnricher extends ManagedProcessor implements ManagedEnricherMBean {
private final Enricher processor;
private String uri;
+ private boolean sanitize;
public ManagedEnricher(CamelContext context, Enricher processor, EnrichDefinition definition) {
super(context, processor, definition);
@@ -39,7 +50,7 @@ public class ManagedEnricher extends ManagedProcessor implements ManagedEnricher
public void init(ManagementStrategy strategy) {
super.init(strategy);
- boolean sanitize = strategy.getManagementAgent().getMask() != null ? strategy.getManagementAgent().getMask() : false;
+ sanitize = strategy.getManagementAgent().getMask() != null ? strategy.getManagementAgent().getMask() : false;
uri = getDefinition().getExpression().getExpression();
if (sanitize) {
uri = URISupport.sanitizeUri(uri);
@@ -85,4 +96,34 @@ public class ManagedEnricher extends ManagedProcessor implements ManagedEnricher
public Boolean isAggregateOnException() {
return processor.isAggregateOnException();
}
+
+ @Override
+ public TabularData endpointStatistics() {
+ try {
+ TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.endpointsUtilizationTabularType());
+
+ EndpointUtilizationStatistics stats = processor.getEndpointUtilizationStatistics();
+ if (stats != null) {
+ for (Map.Entry<String, Long> entry : stats.getStatistics().entrySet()) {
+ CompositeType ct = CamelOpenMBeanTypes.endpointsUtilizationCompositeType();
+ String url = entry.getKey();
+ if (sanitize) {
+ url = URISupport.sanitizeUri(url);
+ }
+
+ Long hits = entry.getValue();
+ if (hits == null) {
+ hits = 0L;
+ }
+
+ 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/c330b8aa/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/Enricher.java b/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
index 99a81ba..eef072f 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
@@ -30,6 +30,7 @@ import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.impl.EmptyProducerCache;
import org.apache.camel.impl.ProducerCache;
import org.apache.camel.processor.aggregate.AggregationStrategy;
+import org.apache.camel.spi.EndpointUtilizationStatistics;
import org.apache.camel.spi.IdAware;
import org.apache.camel.support.ServiceSupport;
import org.apache.camel.util.AsyncProcessorConverterHelper;
@@ -92,6 +93,10 @@ public class Enricher extends ServiceSupport implements AsyncProcessor, IdAware,
return expression;
}
+ public EndpointUtilizationStatistics getEndpointUtilizationStatistics() {
+ return producerCache.getEndpointUtilizationStatistics();
+ }
+
public void setAggregationStrategy(AggregationStrategy aggregationStrategy) {
this.aggregationStrategy = aggregationStrategy;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/c330b8aa/camel-core/src/test/java/org/apache/camel/management/ManagedEnricherTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedEnricherTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedEnricherTest.java
index 782e899..99724b4 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedEnricherTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedEnricherTest.java
@@ -20,6 +20,7 @@ import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.openmbean.TabularData;
+import org.apache.camel.CamelContext;
import org.apache.camel.ServiceStatus;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
@@ -29,6 +30,13 @@ import org.apache.camel.component.mock.MockEndpoint;
*/
public class ManagedEnricherTest extends ManagementTestSupport {
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ context.getManagementStrategy().setExtendedStatisticsEnabled(true);
+ return context;
+ }
+
public void testManageEnricher() throws Exception {
// JMX tests dont work well on AIX CI servers (hangs them)
if (isPlatform("aix")) {
@@ -36,9 +44,14 @@ public class ManagedEnricherTest extends ManagementTestSupport {
}
MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedMessageCount(1);
+ foo.expectedMessageCount(2);
+
+ MockEndpoint bar = getMockEndpoint("mock:bar");
+ bar.expectedMessageCount(1);
template.sendBodyAndHeader("direct:start", "Hello World", "whereto", "foo");
+ template.sendBodyAndHeader("direct:start", "Bye World", "whereto", "foo");
+ template.sendBodyAndHeader("direct:start", "Hi World", "whereto", "bar");
assertMockEndpointsSatisfied();
@@ -64,7 +77,11 @@ public class ManagedEnricherTest extends ManagementTestSupport {
String uri = (String) mbeanServer.getAttribute(on, "Expression");
assertEquals("direct:${header.whereto}", uri);
- TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new Object[]{false}, new String[]{"boolean"});
+ TabularData data = (TabularData) mbeanServer.invoke(on, "endpointStatistics", null, null);
+ assertNotNull(data);
+ assertEquals(2, data.size());
+
+ data = (TabularData) mbeanServer.invoke(on, "explain", new Object[]{false}, new String[]{"boolean"});
assertNotNull(data);
assertEquals(2, data.size());
@@ -86,6 +103,8 @@ public class ManagedEnricherTest extends ManagementTestSupport {
.enrich().simple("direct:${header.whereto}").id("mysend");
from("direct:foo").to("mock:foo");
+
+ from("direct:bar").to("mock:bar");
}
};
}