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 2016/06/21 06:49:18 UTC
camel git commit: CAMEL-9878 camel-commands - Add command to show top
N inflight exchanges per routes
Repository: camel
Updated Branches:
refs/heads/master ed6056171 -> 384a86005
CAMEL-9878 camel-commands - Add command to show top N inflight exchanges per routes
Added new argument (`route`) to `context-inflight` command. Client can
use the `route` argument to specify the route which inflight exchanges
should be displayed.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/384a8600
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/384a8600
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/384a8600
Branch: refs/heads/master
Commit: 384a86005ea17538f1911bfced81c98a202003fc
Parents: ed60561
Author: Zoran Regvart <zr...@gmail.com>
Authored: Sat Jun 18 18:53:22 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jun 21 08:47:41 2016 +0200
----------------------------------------------------------------------
.../commands/AbstractLocalCamelController.java | 4 +-
.../apache/camel/commands/CamelController.java | 3 +-
.../camel/commands/ContextInflightCommand.java | 6 +-
.../AbstractLocalCamelControllerTest.java | 95 ++++++++++++++++++++
.../jolokia/DefaultJolokiaCamelController.java | 4 +-
.../commands/jolokia/JolokiaRemoteTest.java | 2 +-
.../camel/karaf/commands/ContextInflight.java | 5 +-
7 files changed, 110 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 6d80584..03f82dc 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -174,7 +174,7 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
}
@SuppressWarnings("unchecked")
- public List<Map<String, Object>> browseInflightExchanges(String camelContextName, int limit, boolean sortByLongestDuration) throws Exception {
+ public List<Map<String, Object>> browseInflightExchanges(String camelContextName, String route, int limit, boolean sortByLongestDuration) throws Exception {
CamelContext context = this.getLocalCamelContext(camelContextName);
if (context == null) {
return null;
@@ -187,7 +187,7 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
MBeanServer mBeanServer = agent.getMBeanServer();
ObjectName on = new ObjectName(agent.getMBeanObjectDomainName() + ":type=services,name=DefaultInflightRepository,context=" + context.getManagementName());
if (mBeanServer.isRegistered(on)) {
- TabularData list = (TabularData) mBeanServer.invoke(on, "browse", new Object[]{limit, sortByLongestDuration}, new String[]{"int", "boolean"});
+ TabularData list = (TabularData) mBeanServer.invoke(on, "browse", new Object[]{route, limit, sortByLongestDuration}, new String[]{"java.lang.String", "int", "boolean"});
Collection<CompositeData> values = (Collection<CompositeData>) list.values();
for (CompositeData data : values) {
Map<String, Object> row = new LinkedHashMap<String, Object>();
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
index 65c2139..a13b10f 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
@@ -66,12 +66,13 @@ public interface CamelController {
* Browses the inflight exchanges
*
* @param camelContextName the Camel context.
+ * @param route the Camel route ID
* @param limit maximum number of exchanges to return
* @param sortByLongestDuration <tt>true</tt> to sort by longest duration, <tt>false</tt> to sort by exchange id
* @return a list of key/value pairs with inflight exchange information
* @throws java.lang.Exception can be thrown
*/
- List<Map<String, Object>> browseInflightExchanges(String camelContextName, int limit, boolean sortByLongestDuration) throws Exception;
+ List<Map<String, Object>> browseInflightExchanges(String camelContextName, String route, int limit, boolean sortByLongestDuration) throws Exception;
/**
* Starts the given Camel context.
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInflightCommand.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInflightCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInflightCommand.java
index 896b719..8c78aac 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInflightCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInflightCommand.java
@@ -43,17 +43,19 @@ public class ContextInflightCommand extends AbstractContextCommand {
private static final int MIN_COLUMN_WIDTH = 12;
private int limit;
+ private String route;
private boolean sortByLongestDuration;
- public ContextInflightCommand(String context, int limit, boolean sortByLongestDuration) {
+ public ContextInflightCommand(String context, String route, int limit, boolean sortByLongestDuration) {
super(context);
+ this.route = route;
this.limit = limit;
this.sortByLongestDuration = sortByLongestDuration;
}
@Override
protected Object performContextCommand(CamelController camelController, String contextName, PrintStream out, PrintStream err) throws Exception {
- List<Map<String, Object>> inflight = camelController.browseInflightExchanges(contextName, limit, sortByLongestDuration);
+ List<Map<String, Object>> inflight = camelController.browseInflightExchanges(contextName, route, limit, sortByLongestDuration);
final Map<String, Integer> columnWidths = computeColumnWidths(inflight);
final String headerFormat = buildFormatString(columnWidths, true);
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/AbstractLocalCamelControllerTest.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/AbstractLocalCamelControllerTest.java b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/AbstractLocalCamelControllerTest.java
new file mode 100644
index 0000000..c55be8b
--- /dev/null
+++ b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/AbstractLocalCamelControllerTest.java
@@ -0,0 +1,95 @@
+package org.apache.camel.commands;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.ExplicitCamelContextNameStrategy;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class AbstractLocalCamelControllerTest {
+
+ private final DummyCamelController localCamelController;
+
+ private final CamelContext context;
+
+ public AbstractLocalCamelControllerTest() throws Exception {
+ context = new DefaultCamelContext();
+ context.setNameStrategy(new ExplicitCamelContextNameStrategy("context1"));
+
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start1").id("route1").delay(100).to("mock:result1");
+ from("direct:start2").id("route2").delay(100).to("mock:result2");
+ from("direct:start3").id("route3").delay(100).to("mock:result3");
+ }
+ });
+
+ localCamelController = new DummyCamelController(context);
+ }
+
+ @Before
+ public void startContext() throws Exception {
+ context.start();
+ }
+
+ @After
+ public void stopContext() throws Exception {
+ context.stop();
+ }
+
+ @Test
+ public void testBrowseInflightExchangesWithMoreRoutes() throws Exception {
+ context.createProducerTemplate().asyncSendBody("direct:start1", "Start one");
+ context.createProducerTemplate().asyncSendBody("direct:start2", "Start two");
+ context.createProducerTemplate().asyncSendBody("direct:start3", "Start three");
+
+ // let the exchange proceed
+ Thread.sleep(50);
+
+ final List<Map<String, Object>> inflightExchanges = localCamelController.browseInflightExchanges("context1", null, 0, false);
+
+ assertEquals("Context should contain three inflight exchanges", 3, inflightExchanges.size());
+ }
+
+ @Test
+ public void testBrowseInflightExchangesWithNoRoutes() throws Exception {
+ final List<Map<String, Object>> inflightExchanges = localCamelController.browseInflightExchanges("context1", null, 0, false);
+
+ assertTrue("Context without routes should not have any inflight exchanges", inflightExchanges.isEmpty());
+ }
+
+ @Test
+ public void testBrowseInflightExchangesWithOneRoute() throws Exception {
+ context.createProducerTemplate().asyncSendBody("direct:start1", "Start one");
+
+ // let the exchange proceed
+ Thread.sleep(50);
+
+ final List<Map<String, Object>> inflightExchanges = localCamelController.browseInflightExchanges("context1", null, 0, false);
+
+ assertEquals("Context should contain one inflight exchange", 1, inflightExchanges.size());
+ }
+
+ @Test
+ public void testBrowseInflightExchangesWithSpecificRoute() throws Exception {
+ context.createProducerTemplate().asyncSendBody("direct:start1", "Start one");
+ context.createProducerTemplate().asyncSendBody("direct:start2", "Start two");
+ context.createProducerTemplate().asyncSendBody("direct:start3", "Start three");
+
+ // let the exchanges proceed
+ Thread.sleep(50);
+
+ final List<Map<String, Object>> inflightExchanges = localCamelController.browseInflightExchanges("context1", "route2", 0, false);
+
+ assertEquals("Context should contain one inflight exchange for specific route", 1, inflightExchanges.size());
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
index d550be5..5b02abb 100644
--- a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
+++ b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
@@ -235,7 +235,7 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple
}
@Override
- public List<Map<String, Object>> browseInflightExchanges(String camelContextName, int limit, boolean sortByLongestDuration) throws Exception {
+ public List<Map<String, Object>> browseInflightExchanges(String camelContextName, String route, int limit, boolean sortByLongestDuration) throws Exception {
if (jolokia == null) {
throw new IllegalStateException("Need to connect to remote jolokia first");
}
@@ -246,7 +246,7 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple
if (found != null) {
String pattern = String.format("%s:context=%s,type=services,name=DefaultInflightRepository", found.getDomain(), found.getKeyProperty("context"));
ObjectName on = ObjectName.getInstance(pattern);
- J4pExecResponse er = jolokia.execute(new J4pExecRequest(on, "browse(int,boolean)", limit, sortByLongestDuration));
+ J4pExecResponse er = jolokia.execute(new J4pExecRequest(on, "browse(String,int,boolean)", route, limit, sortByLongestDuration));
if (er != null) {
JSONObject data = er.getValue();
if (data != null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java b/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
index 2b41add..c06eaa4 100644
--- a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
+++ b/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
@@ -218,7 +218,7 @@ public class JolokiaRemoteTest {
controller = new DefaultJolokiaCamelController();
controller.connect(url, null, null);
- List<Map<String, Object>> data = controller.browseInflightExchanges("camel-1", 500, false);
+ List<Map<String, Object>> data = controller.browseInflightExchanges("camel-1", "route1", 500, false);
System.out.println(data);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/384a8600/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
index cba5ca3..1ff5e7f 100644
--- a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
+++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
@@ -31,12 +31,15 @@ public class ContextInflight extends CamelCommandSupport {
required = false, multiValued = false)
int limit = -1;
+ @Argument(index = 1, name = "route", description = "The Camel route ID", required = false, multiValued = false)
+ String route;
+
@Option(name = "--sort", aliases = "-s", description = "true = sort by longest duration, false = sort by exchange id",
required = false, multiValued = false, valueToShowInHelp = "false")
boolean sortByLongestDuration;
protected Object doExecute() throws Exception {
- ContextInflightCommand command = new ContextInflightCommand(name, limit, sortByLongestDuration);
+ ContextInflightCommand command = new ContextInflightCommand(name, route, limit, sortByLongestDuration);
return command.execute(camelController, System.out, System.err);
}