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"/>