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");
             }
         };
     }