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/03/19 13:55:38 UTC
svn commit: r1458259 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/api/management/mbean/
main/java/org/apache/camel/management/mbean/
main/java/org/apache/camel/processor/interceptor/
test/java/org/apache/camel/management/
Author: davsclaus
Date: Tue Mar 19 12:55:38 2013
New Revision: 1458259
URL: http://svn.apache.org/r1458259
Log:
CAMEL-6148: More options on BacklogTracer
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTracerBacklogMBean.java
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTracerBacklogMBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTracerBacklogMBean.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTracerBacklogMBean.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTracerBacklogMBean.java Tue Mar 19 12:55:38 2013
@@ -35,6 +35,12 @@ public interface ManagedTracerBacklogMBe
@ManagedAttribute(description = "Number of traced messages to keep in the backlog (FIFO queue)")
void setBacklogSize(int backlogSize);
+ @ManagedAttribute(description = "Whether to remove traced message from backlog when dumping trace messages")
+ boolean isRemoveOnDump();
+
+ @ManagedAttribute(description = "Whether to remove traced message from backlog when dumping trace messages")
+ void setRemoveOnDump(boolean removeOnDump);
+
@ManagedAttribute(description = "To filter tracing by nodes (pattern)")
void setTracePattern(String pattern);
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java Tue Mar 19 12:55:38 2013
@@ -70,6 +70,14 @@ public class ManagedBacklogTracer implem
backlogTracer.setBacklogSize(backlogSize);
}
+ public boolean isRemoveOnDump() {
+ return backlogTracer.isRemoveOnDump();
+ }
+
+ public void setRemoveOnDump(boolean removeOnDump) {
+ backlogTracer.setRemoveOnDump(removeOnDump);
+ }
+
public void setTracePattern(String pattern) {
backlogTracer.setTracePattern(pattern);
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java Tue Mar 19 12:55:38 2013
@@ -44,13 +44,16 @@ import org.apache.camel.util.EndpointHel
*/
public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
+ // lets limit the tracer to 1000 messages per node
+ public static final int MAX_BACKLOG_SIZE = 1000;
private final CamelContext camelContext;
private boolean enabled;
private final AtomicLong traceCounter = new AtomicLong(0);
// use a queue with a upper limit to avoid storing too many messages
- private final Queue<DefaultBacklogTracerEventMessage> queue = new ArrayBlockingQueue<DefaultBacklogTracerEventMessage>(1000);
+ private final Queue<DefaultBacklogTracerEventMessage> queue = new ArrayBlockingQueue<DefaultBacklogTracerEventMessage>(MAX_BACKLOG_SIZE);
// how many of the last messages per node to keep in the backlog
- private int backlogSize = 10;
+ private int backlogSize = MAX_BACKLOG_SIZE;
+ private boolean removeOnDump = true;
// a pattern to filter tracing nodes
private String tracePattern;
private String[] patterns;
@@ -154,9 +157,20 @@ public class BacklogTracer extends Servi
if (backlogSize <= 0) {
throw new IllegalArgumentException("The backlog size must be a positive number, was: " + backlogSize);
}
+ if (backlogSize > MAX_BACKLOG_SIZE) {
+ throw new IllegalArgumentException("The backlog size cannot be greater than the max size of " + MAX_BACKLOG_SIZE + ", was: " + backlogSize);
+ }
this.backlogSize = backlogSize;
}
+ public boolean isRemoveOnDump() {
+ return removeOnDump;
+ }
+
+ public void setRemoveOnDump(boolean removeOnDump) {
+ this.removeOnDump = removeOnDump;
+ }
+
public String getTracePattern() {
return tracePattern;
}
@@ -188,6 +202,11 @@ public class BacklogTracer extends Servi
}
}
}
+
+ if (removeOnDump) {
+ queue.removeAll(answer);
+ }
+
return answer;
}
@@ -206,7 +225,9 @@ public class BacklogTracer extends Servi
public List<BacklogTracerEventMessage> dumpAllTracedMessages() {
List<BacklogTracerEventMessage> answer = new ArrayList<BacklogTracerEventMessage>();
answer.addAll(queue);
- queue.clear();
+ if (isRemoveOnDump()) {
+ queue.clear();
+ }
return answer;
}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java Tue Mar 19 12:55:38 2013
@@ -44,7 +44,7 @@ public class BacklogTracerIdOnAllNodesTe
assertEquals("Should not be enabled", Boolean.FALSE, enabled);
Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
- assertEquals("Should be 10", 10, size.intValue());
+ assertEquals("Should be 1000", 1000, size.intValue());
// enable it
mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java Tue Mar 19 12:55:38 2013
@@ -37,7 +37,7 @@ public class BacklogTracerPatternRouteTe
assertEquals("Should not be enabled", Boolean.FALSE, enabled);
Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
- assertEquals("Should be 10", 10, size.intValue());
+ assertEquals("Should be 1000", 1000, size.intValue());
// set the pattern to match only coolRoute
mbeanServer.setAttribute(on, new Attribute("TracePattern", "coolRoute"));
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java Tue Mar 19 12:55:38 2013
@@ -38,7 +38,7 @@ public class BacklogTracerPatternTest ex
assertEquals("Should not be enabled", Boolean.FALSE, enabled);
Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
- assertEquals("Should be 10", 10, size.intValue());
+ assertEquals("Should be 1000", 1000, size.intValue());
// set the pattern to match only foo*
mbeanServer.setAttribute(on, new Attribute("TracePattern", "foo*"));
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerTest.java?rev=1458259&r1=1458258&r2=1458259&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/BacklogTracerTest.java Tue Mar 19 12:55:38 2013
@@ -41,7 +41,10 @@ public class BacklogTracerTest extends M
assertEquals("Should not be enabled", Boolean.FALSE, enabled);
Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
- assertEquals("Should be 10", 10, size.intValue());
+ assertEquals("Should be 1000", 1000, size.intValue());
+
+ Boolean removeOnDump = (Boolean) mbeanServer.getAttribute(on, "RemoveOnDump");
+ assertEquals(Boolean.TRUE, removeOnDump);
// enable it
mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
@@ -86,7 +89,7 @@ public class BacklogTracerTest extends M
assertEquals("Should not be enabled", Boolean.FALSE, enabled);
Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
- assertEquals("Should be 10", 10, size.intValue());
+ assertEquals("Should be 1000", 1000, size.intValue());
// enable it
mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
@@ -219,6 +222,118 @@ public class BacklogTracerTest extends M
assertEquals(6, list.getLength());
}
+ @SuppressWarnings("unchecked")
+ public void testBacklogTracerNotRemoveOnDump() throws Exception {
+ MBeanServer mbeanServer = getMBeanServer();
+ ObjectName on = new ObjectName("org.apache.camel:context=localhost/camel-1,type=tracer,name=BacklogTracer");
+ assertNotNull(on);
+ mbeanServer.isRegistered(on);
+
+ Boolean removeOnDump = (Boolean) mbeanServer.getAttribute(on, "RemoveOnDump");
+ assertEquals(Boolean.TRUE, removeOnDump);
+ // disable it
+ mbeanServer.setAttribute(on, new Attribute("RemoveOnDump", Boolean.FALSE));
+
+ Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
+ assertEquals("Should not be enabled", Boolean.FALSE, enabled);
+
+ // enable it
+ mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+
+ getMockEndpoint("mock:foo").expectedMessageCount(2);
+ getMockEndpoint("mock:bar").expectedMessageCount(2);
+
+ template.sendBody("direct:start", "Hello World");
+ template.sendBody("direct:start", "Bye World");
+
+ assertMockEndpointsSatisfied();
+
+ List<BacklogTracerEventMessage> events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpAllTracedMessages", null, null);
+
+ assertNotNull(events);
+ assertEquals(6, events.size());
+
+ // and if we get again they are still there
+ events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpAllTracedMessages", null, null);
+ assertNotNull(events);
+ assertEquals(6, events.size());
+
+ // send in another message
+ resetMocks();
+
+ getMockEndpoint("mock:foo").expectedMessageCount(1);
+ getMockEndpoint("mock:bar").expectedMessageCount(1);
+
+ template.sendBody("direct:start", "Hi World");
+
+ assertMockEndpointsSatisfied();
+
+ // and now we should have 3 more messages
+ events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpAllTracedMessages", null, null);
+ assertNotNull(events);
+ assertEquals(9, events.size());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testBacklogTracerNotRemoveOnDumpPattern() throws Exception {
+ MBeanServer mbeanServer = getMBeanServer();
+ ObjectName on = new ObjectName("org.apache.camel:context=localhost/camel-1,type=tracer,name=BacklogTracer");
+ assertNotNull(on);
+ mbeanServer.isRegistered(on);
+
+ Boolean removeOnDump = (Boolean) mbeanServer.getAttribute(on, "RemoveOnDump");
+ assertEquals(Boolean.TRUE, removeOnDump);
+ // disable it
+ mbeanServer.setAttribute(on, new Attribute("RemoveOnDump", Boolean.FALSE));
+
+ Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
+ assertEquals("Should not be enabled", Boolean.FALSE, enabled);
+
+ // enable it
+ mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+
+ getMockEndpoint("mock:foo").expectedMessageCount(2);
+ getMockEndpoint("mock:bar").expectedMessageCount(2);
+
+ template.sendBody("direct:start", "Hello World");
+ template.sendBody("direct:start", "Bye World");
+
+ assertMockEndpointsSatisfied();
+
+ List<BacklogTracerEventMessage> events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpTracedMessages",
+ new Object[]{"foo"}, new String[]{"java.lang.String"});
+
+ assertNotNull(events);
+ assertEquals(2, events.size());
+
+ // and if we get again they are still there
+ events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpTracedMessages",
+ new Object[]{"foo"}, new String[]{"java.lang.String"});
+ assertEquals(2, events.size());
+
+ // send in another message
+ resetMocks();
+
+ getMockEndpoint("mock:foo").expectedMessageCount(1);
+ getMockEndpoint("mock:bar").expectedMessageCount(1);
+
+ template.sendBody("direct:start", "Hi World");
+
+ assertMockEndpointsSatisfied();
+
+ // and now we should have 3 more messages
+ events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpTracedMessages",
+ new Object[]{"foo"}, new String[]{"java.lang.String"});
+ assertNotNull(events);
+ assertEquals(3, events.size());
+
+ // and bar should also have 3 traced messages
+ events = (List<BacklogTracerEventMessage>) mbeanServer.invoke(on, "dumpTracedMessages",
+ new Object[]{"bar"}, new String[]{"java.lang.String"});
+ assertNotNull(events);
+ assertEquals(3, events.size());
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {