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 2013/04/22 12:04:33 UTC
svn commit: r1470426 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/api/management/mbean/
camel-core/src/main/java/org/apache/camel/management/mbean/
camel-core/src/test/java/org/apache/camel/management/
platforms/karaf/commands/src/main/...
Author: davsclaus
Date: Mon Apr 22 10:04:32 2013
New Revision: 1470426
URL: http://svn.apache.org/r1470426
Log:
CAMEL-6301: Added reset method to context and routes mbean, to easily reset the children as well.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeProcessorsTest.java
- copied, changed from r1470423, camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeRoutesTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java?rev=1470426&r1=1470425&r2=1470426&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java Mon Apr 22 10:04:32 2013
@@ -171,4 +171,13 @@ public interface ManagedCamelContextMBea
@ManagedOperation(description = "Find all Camel components available in the classpath")
Map<String, Properties> findComponents() throws Exception;
+ /**
+ * Resets all the performance counters.
+ *
+ * @param includeRoutes whether to reset all routes as well.
+ * @throws Exception is thrown if error occurred
+ */
+ @ManagedOperation(description = "Reset counters")
+ void reset(boolean includeRoutes) throws Exception;
+
}
\ No newline at end of file
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java?rev=1470426&r1=1470425&r2=1470426&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java Mon Apr 22 10:04:32 2013
@@ -95,4 +95,7 @@ public interface ManagedRouteMBean exten
@ManagedOperation(description = "Dumps the routes stats as XML")
String dumpRouteStatsAsXml(boolean fullStats, boolean includeProcessors) throws Exception;
+ @ManagedOperation(description = "Reset counters")
+ void reset(boolean includeProcessors) throws Exception;
+
}
\ No newline at end of file
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java?rev=1470426&r1=1470425&r2=1470426&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java Mon Apr 22 10:04:32 2013
@@ -336,4 +336,21 @@ public class ManagedCamelContext extends
return CamelContextHelper.findComponents(context);
}
+ public void reset(boolean includeRoutes) throws Exception {
+ reset();
+
+ // and now reset all processors for this route
+ if (includeRoutes) {
+ MBeanServer server = getContext().getManagementStrategy().getManagementAgent().getMBeanServer();
+ if (server != null) {
+ // get all the routes mbeans and sort them accordingly to their index
+ ObjectName query = ObjectName.getInstance("org.apache.camel:context=*/" + getContext().getManagementName() + ",type=routes,*");
+ Set<ObjectName> names = server.queryNames(query, null);
+ for (ObjectName name : names) {
+ server.invoke(name, "reset", new Object[]{true}, new String[]{"boolean"});
+ }
+ }
+ }
+ }
+
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java?rev=1470426&r1=1470425&r2=1470426&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java Mon Apr 22 10:04:32 2013
@@ -24,9 +24,13 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import javax.management.AttributeValueExp;
import javax.management.MBeanServer;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
+import javax.management.Query;
+import javax.management.QueryExp;
+import javax.management.StringValueExp;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
@@ -295,6 +299,24 @@ public class ManagedRoute extends Manage
return answer.toString();
}
+ public void reset(boolean includeProcessors) throws Exception {
+ reset();
+
+ // and now reset all processors for this route
+ if (includeProcessors) {
+ MBeanServer server = getContext().getManagementStrategy().getManagementAgent().getMBeanServer();
+ if (server != null) {
+ // get all the processor mbeans and sort them accordingly to their index
+ ObjectName query = ObjectName.getInstance("org.apache.camel:context=*/" + getContext().getManagementName() + ",type=processors,*");
+ QueryExp queryExp = Query.match(new AttributeValueExp("RouteId"), new StringValueExp(getRouteId()));
+ Set<ObjectName> names = server.queryNames(query, queryExp);
+ for (ObjectName name : names) {
+ server.invoke(name, "reset", null, null);
+ }
+ }
+ }
+ }
+
@Override
public boolean equals(Object o) {
return this == o || (o != null && getClass() == o.getClass() && route.equals(((ManagedRoute)o).route));
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeProcessorsTest.java (from r1470423, camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeProcessorsTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeProcessorsTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsTest.java&r1=1470423&r2=1470426&rev=1470426&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeProcessorsTest.java Mon Apr 22 10:04:32 2013
@@ -17,33 +17,29 @@
package org.apache.camel.management;
import java.util.Set;
+import javax.management.AttributeValueExp;
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import javax.management.Query;
+import javax.management.QueryExp;
+import javax.management.StringValueExp;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
/**
* @version
*/
-public class ManagedStatisticsTest extends ManagementTestSupport {
+public class ManagedResetIncludeProcessorsTest extends ManagementTestSupport {
- public void testManageStatistics() throws Exception {
+ public void testReset() throws Exception {
// get the stats for the route
MBeanServer mbeanServer = getMBeanServer();
- Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
+ QueryExp queryExp = Query.match(new AttributeValueExp("RouteId"), new StringValueExp("first"));
+ Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), queryExp);
assertEquals(1, set.size());
-
ObjectName on = set.iterator().next();
- // use route to get the total time
- Long completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
- assertEquals(0, completed.longValue());
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedMessageCount(5);
-
// send in 5 messages
template.sendBody("direct:start", "A");
template.sendBody("direct:start", "B");
@@ -51,32 +47,54 @@ public class ManagedStatisticsTest exten
template.sendBody("direct:start", "D");
template.sendBody("direct:start", "E");
+ // and 1 for the 2nd route
+ template.sendBody("direct:baz", "F");
+
assertMockEndpointsSatisfied();
// should be 5 on the route
- completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
+ Long completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
assertEquals(5, completed.longValue());
-
- String first = (String) mbeanServer.getAttribute(on, "FirstExchangeCompletedExchangeId");
- assertEquals(result.getReceivedExchanges().get(0).getExchangeId(), first);
- String firstFail = (String) mbeanServer.getAttribute(on, "FirstExchangeFailureExchangeId");
- assertNull(firstFail);
+ // and on the processors as well
+ set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), queryExp);
+ assertEquals(3, set.size());
+ for (ObjectName name : set) {
+ completed = (Long) mbeanServer.getAttribute(name, "ExchangesCompleted");
+ assertEquals(5, completed.longValue());
+ }
- String last = (String) mbeanServer.getAttribute(on, "LastExchangeCompletedExchangeId");
- assertEquals(result.getReceivedExchanges().get(4).getExchangeId(), last);
+ // reset which should reset all processors also
+ mbeanServer.invoke(on, "reset", new Object[]{true}, new String[]{"boolean"});
- String lastFail = (String) mbeanServer.getAttribute(on, "LastExchangeFailureExchangeId");
- assertNull(lastFail);
+ // should be 0 on the route
+ completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
+ assertEquals(0, completed.longValue());
- // should be 5 on the processors
- ObjectName foo = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=processors,name=\"foo\"");
- completed = (Long) mbeanServer.getAttribute(foo, "ExchangesCompleted");
- assertEquals(5, completed.longValue());
+ // and on the processors as well
+ set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), queryExp);
+ assertEquals(3, set.size());
+ for (ObjectName name : set) {
+ completed = (Long) mbeanServer.getAttribute(name, "ExchangesCompleted");
+ assertEquals(0, completed.longValue());
+ }
+
+ // test that the 2nd route is untouched, as we only reset the first route
+ queryExp = Query.match(new AttributeValueExp("RouteId"), new StringValueExp("second"));
+ set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), queryExp);
+ assertEquals(1, set.size());
+ on = set.iterator().next();
- ObjectName mock = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=processors,name=\"mock\"");
- completed = (Long) mbeanServer.getAttribute(mock, "ExchangesCompleted");
- assertEquals(5, completed.longValue());
+ completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
+ assertEquals(1, completed.longValue());
+
+ // and on the processors as well
+ set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), queryExp);
+ assertEquals(1, set.size());
+ for (ObjectName name : set) {
+ completed = (Long) mbeanServer.getAttribute(name, "ExchangesCompleted");
+ assertEquals(1, completed.longValue());
+ }
}
@Override
@@ -84,10 +102,13 @@ public class ManagedStatisticsTest exten
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("direct:start")
+ from("direct:start").routeId("first")
.to("log:foo").id("foo")
.to("log:bar").id("bar")
.to("mock:result").id("mock");
+
+ from("direct:baz").routeId("second")
+ .to("mock:baz").id("baz");
}
};
}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeRoutesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeRoutesTest.java?rev=1470426&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeRoutesTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedResetIncludeRoutesTest.java Mon Apr 22 10:04:32 2013
@@ -0,0 +1,117 @@
+/**
+ * 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 java.util.Set;
+import javax.management.AttributeValueExp;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.Query;
+import javax.management.QueryExp;
+import javax.management.StringValueExp;
+
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version
+ */
+public class ManagedResetIncludeRoutesTest extends ManagementTestSupport {
+
+ public void testReset() throws Exception {
+ // get the stats for the route
+ MBeanServer mbeanServer = getMBeanServer();
+
+ QueryExp queryExp = Query.match(new AttributeValueExp("RouteId"), new StringValueExp("first"));
+ Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), queryExp);
+ assertEquals(1, set.size());
+ ObjectName on = set.iterator().next();
+
+ // send in 5 messages
+ template.sendBody("direct:start", "A");
+ template.sendBody("direct:start", "B");
+ template.sendBody("direct:start", "C");
+ template.sendBody("direct:start", "D");
+ template.sendBody("direct:start", "E");
+
+ // and 1 for the 2nd route
+ template.sendBody("direct:baz", "F");
+
+ assertMockEndpointsSatisfied();
+
+ // should be 5 on the route
+ Long completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
+ assertEquals(5, completed.longValue());
+
+ // and on the processors as well
+ set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), queryExp);
+ assertEquals(3, set.size());
+ for (ObjectName name : set) {
+ completed = (Long) mbeanServer.getAttribute(name, "ExchangesCompleted");
+ assertEquals(5, completed.longValue());
+ }
+
+ // reset which should reset all routes also
+ ObjectName ctx = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=context,name=\"camel-1\"");
+ mbeanServer.invoke(ctx, "reset", new Object[]{true}, new String[]{"boolean"});
+
+ // should be 0 on the route
+ completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
+ assertEquals(0, completed.longValue());
+
+ // and on the processors as well
+ set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), queryExp);
+ assertEquals(3, set.size());
+ for (ObjectName name : set) {
+ completed = (Long) mbeanServer.getAttribute(name, "ExchangesCompleted");
+ assertEquals(0, completed.longValue());
+ }
+
+ // test that the 2nd route is also reset
+ queryExp = Query.match(new AttributeValueExp("RouteId"), new StringValueExp("second"));
+ set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), queryExp);
+ assertEquals(1, set.size());
+ on = set.iterator().next();
+
+ completed = (Long) mbeanServer.getAttribute(on, "ExchangesCompleted");
+ assertEquals(0, completed.longValue());
+
+ // and on the processors as well
+ set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), queryExp);
+ assertEquals(1, set.size());
+ for (ObjectName name : set) {
+ completed = (Long) mbeanServer.getAttribute(name, "ExchangesCompleted");
+ assertEquals(0, completed.longValue());
+ }
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").routeId("first")
+ .to("log:foo").id("foo")
+ .to("log:bar").id("bar")
+ .to("mock:result").id("mock");
+
+ from("direct:baz").routeId("second")
+ .to("mock:baz").id("baz");
+ }
+ };
+ }
+
+}
\ No newline at end of file
Modified: camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
URL: http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java?rev=1470426&r1=1470425&r2=1470426&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java (original)
+++ camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java Mon Apr 22 10:04:32 2013
@@ -16,7 +16,6 @@
*/
package org.apache.camel.karaf.commands;
-import java.util.Iterator;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -34,8 +33,6 @@ public class RouteResetStats extends Abs
@Override
public void executeOnRoute(CamelContext camelContext, Route camelRoute) throws Exception {
- String id = camelRoute.getId();
-
ManagementAgent agent = camelContext.getManagementStrategy().getManagementAgent();
if (agent != null) {
MBeanServer mBeanServer = agent.getMBeanServer();
@@ -43,27 +40,10 @@ public class RouteResetStats extends Abs
// reset route mbeans
ObjectName query = ObjectName.getInstance(agent.getMBeanObjectDomainName() + ":type=routes,*");
Set<ObjectName> set = mBeanServer.queryNames(query, null);
- Iterator<ObjectName> iterator = set.iterator();
- while (iterator.hasNext()) {
- ObjectName routeMBean = iterator.next();
-
+ for (ObjectName routeMBean : set) {
String camelId = (String) mBeanServer.getAttribute(routeMBean, "CamelId");
if (camelId != null && camelId.equals(camelContext.getName())) {
- mBeanServer.invoke(routeMBean, "reset", null, null);
- }
- }
-
- // reset processor mbeans that belongs to the given route
- query = ObjectName.getInstance(agent.getMBeanObjectDomainName() + ":type=processors,*");
- set = mBeanServer.queryNames(query, null);
- iterator = set.iterator();
- while (iterator.hasNext()) {
- ObjectName processorMBean = iterator.next();
- // must belong to this camel context and match the route id
- String camelId = (String) mBeanServer.getAttribute(processorMBean, "CamelId");
- String routeId = (String) mBeanServer.getAttribute(processorMBean, "RouteId");
- if (camelId != null && camelId.equals(camelContext.getName()) && routeId != null && routeId.equals(id)) {
- mBeanServer.invoke(processorMBean, "reset", null, null);
+ mBeanServer.invoke(routeMBean, "reset", new Object[]{true}, new String[]{"boolean"});
}
}
}