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 2014/02/20 09:37:43 UTC

git commit: CAMEL-7191: Disable load performance statistics by default. Thanks to Preben Asumussen for the patch.

Repository: camel
Updated Branches:
  refs/heads/master 2db5fbf7a -> 62bce5144


CAMEL-7191: Disable load performance statistics by default. Thanks to Preben Asumussen for the patch.


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

Branch: refs/heads/master
Commit: 62bce5144822a02f20463c0f711c1222099caf72
Parents: 2db5fbf
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Feb 20 09:39:10 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 20 09:39:26 2014 +0100

----------------------------------------------------------------------
 .../management/DefaultManagementStrategy.java   |  2 +-
 .../management/mbean/ManagedCamelContext.java   | 26 +++++-
 .../camel/management/mbean/ManagedRoute.java    | 24 ++++-
 .../camel/support/TimerListenerManager.java     |  3 +
 .../impl/MultipleLifecycleStrategyTest.java     |  5 +-
 .../management/ManagedRouteAddRemoveTest.java   | 43 ++++-----
 .../ManagedRouteLoadstatisticsTest.java         | 92 ++++++++++++++++++++
 .../resources/META-INF/spring/camel-context.xml |  2 +-
 8 files changed, 164 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index 11b663b..303718a 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -61,7 +61,7 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem
     private boolean onlyManageProcessorWithCustomId;
     private ManagementAgent managementAgent;
     private ManagementStatisticsLevel statisticsLevel = ManagementStatisticsLevel.All;
-    private boolean loadStatisticsEnabled = true;
+    private boolean loadStatisticsEnabled;
     private CamelContext camelContext;
 
     public DefaultManagementStrategy() {

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 55fd40e..e12de9c 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -170,17 +170,35 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
     public boolean isShutdownNowOnTimeout() {
         return context.getShutdownStrategy().isShutdownNowOnTimeout();
     }
-    
+
     public String getLoad01() {
-        return String.format("%.2f", load.getLoad1());
+        double load1 = load.getLoad1();
+        if (Double.isNaN(load1)) {
+            // empty string if load statistics is disabled
+            return "";
+        } else {
+            return String.format("%.2f", load1);
+        }
     }
 
     public String getLoad05() {
-        return String.format("%.2f", load.getLoad5());
+        double load5 = load.getLoad5();
+        if (Double.isNaN(load5)) {
+            // empty string if load statistics is disabled
+            return "";
+        } else {
+            return String.format("%.2f", load5);
+        }
     }
 
     public String getLoad15() {
-        return String.format("%.2f", load.getLoad15());
+        double load15 = load.getLoad15();
+        if (Double.isNaN(load15)) {
+            // empty string if load statistics is disabled
+            return "";
+        } else {
+            return String.format("%.2f", load15);
+        }
     }
 
     public boolean isUseBreadcrumb() {

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 51ce287..0b026a6 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -145,15 +145,33 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
     }
 
     public String getLoad01() {
-        return String.format("%.2f", load.getLoad1());
+        double load1 = load.getLoad1();
+        if (Double.isNaN(load1)) {
+            // empty string if load statistics is disabled
+            return "";
+        } else {
+            return String.format("%.2f", load1);
+        }
     }
 
     public String getLoad05() {
-        return String.format("%.2f", load.getLoad5());
+        double load5 = load.getLoad5();
+        if (Double.isNaN(load5)) {
+            // empty string if load statistics is disabled
+            return "";
+        } else {
+            return String.format("%.2f", load5);
+        }
     }
 
     public String getLoad15() {
-        return String.format("%.2f", load.getLoad15());
+        double load15 = load.getLoad15();
+        if (Double.isNaN(load15)) {
+            // empty string if load statistics is disabled
+            return "";
+        } else {
+            return String.format("%.2f", load15);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java b/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
index ad7794d..793e9cd 100644
--- a/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
+++ b/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
@@ -36,6 +36,9 @@ import org.slf4j.LoggerFactory;
  * <p/>
  * Also ensure when adding and remove listeners, that they are correctly removed to avoid
  * leaking memory.
+ * <p/>
+ * From Camel 2.13 onwards the {@link TimerListenerManager} is only enabled if
+ * {@link org.apache.camel.spi.ManagementStrategy#isLoadStatisticsEnabled()} is enabled.
  *
  * @see TimerListener
  */

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java b/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
index 5486d77..b863d35 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
@@ -50,9 +50,8 @@ public class MultipleLifecycleStrategyTest extends TestSupport {
         context.removeComponent("log");
         context.stop();
 
-        List<String> expectedEvents = Arrays.asList("onContextStart", "onServiceAdd", "onServiceAdd", "onServiceAdd",
-                "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
-                "onThreadPoolAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop", "onThreadPoolRemove");
+        List<String> expectedEvents = Arrays.asList("onContextStart", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
+                                                    "onServiceAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
         
         assertEquals(expectedEvents, dummy1.getEvents());
         assertEquals(expectedEvents, dummy2.getEvents());

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
index ed1bc29..a58fdbf 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.management;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -58,7 +59,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
         
         log.info("Adding 2nd route");
 
@@ -78,7 +79,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Removing 2nd route");
 
@@ -89,7 +90,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }
@@ -105,7 +106,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
         
         log.info("Adding 2nd route");
 
@@ -125,7 +126,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Removing 2nd route");
 
@@ -136,7 +137,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }
@@ -152,7 +153,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Adding 2nd route");
 
@@ -172,7 +173,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Removing 2nd route");
 
@@ -183,7 +184,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }
@@ -199,7 +200,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Adding 2nd route");
 
@@ -229,7 +230,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         // now stop and remove the 2nd route
         log.info("Stopping 2nd route");
@@ -241,7 +242,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }
@@ -257,7 +258,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Adding 2nd route");
 
@@ -288,7 +289,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         // now stop and remove the 2nd route
         log.info("Stopping 2nd route");
@@ -300,7 +301,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }
@@ -316,7 +317,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Adding 2nd route");
 
@@ -345,7 +346,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         // now stop and remove the 2nd route
         log.info("Stopping 2nd route");
@@ -357,7 +358,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }
@@ -373,7 +374,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // number of services
         Set<ObjectName> names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Adding 2nd route");
 
@@ -403,7 +404,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         // now stop and remove the 2nd route
         log.info("Stopping 2nd route");
@@ -415,7 +416,7 @@ public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
 
         // there should still be the same number of services
         names = mbeanServer.queryNames(on, null);
-        assertEquals(8, names.size());
+        assertEquals(7, names.size());
 
         log.info("Shutting down...");
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/camel-core/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java
new file mode 100644
index 0000000..1b683c5
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java
@@ -0,0 +1,92 @@
+/**
+ * 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 org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version 
+ */
+public class ManagedRouteLoadStatisticsTest extends ManagementTestSupport {
+
+    public void testLoadStatisticsAreDisabledByDefault() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        assertFalse(context.getManagementStrategy().isLoadStatisticsEnabled());
+        // get the stats for the route
+        MBeanServer mbeanServer = getMBeanServer();
+        ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=routes,name=\"route1\"");
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.asyncSendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+
+        String load01 = (String)mbeanServer.getAttribute(on, "Load01");
+        String load05 = (String)mbeanServer.getAttribute(on, "Load05");
+        String load15 = (String)mbeanServer.getAttribute(on, "Load15");
+        assertEquals("", load01);
+        assertEquals("", load05);
+        assertEquals("", load15);
+    }
+
+    public void testEnableLoadStatistics() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+        context.getManagementStrategy().setLoadStatisticsEnabled(true);
+        context.stop();
+        context.start();
+        // get the stats for the route
+        MBeanServer mbeanServer = getMBeanServer();
+        ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=routes,name=\"route1\"");
+
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.asyncSendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+        Thread.sleep(2000);
+        String load01 = (String)mbeanServer.getAttribute(on, "Load01");
+        String load05 = (String)mbeanServer.getAttribute(on, "Load05");
+        String load15 = (String)mbeanServer.getAttribute(on, "Load15");
+        assertNotNull(load01);
+        assertNotNull(load05);
+        assertNotNull(load15);
+        assertTrue(Double.parseDouble(load01.replace(',', '.')) >= 0);
+        assertTrue(Double.parseDouble(load05.replace(',', '.')) >= 0);
+        assertTrue(Double.parseDouble(load15.replace(',', '.')) >= 0);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("log:foo").delay(2000).to("mock:result");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/62bce514/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 18aba39..66a9c6d 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,7 @@
   <!-- 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"/>
+    <jmxAgent id="agent" createConnector="true" loadStatisticsEnabled="true"/>
 
     <route>
       <from uri="timer://inbox?period=5000"/>