CAMEL-8526: Add runtime filter count stat to mbean
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/55b3c424 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/55b3c424 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/55b3c424 Branch: refs/heads/master Commit: 55b3c424a1176a51c06e4f8253c3cb7a8b1b954e Parents: b7b463b Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Jul 21 14:12:55 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Jul 21 14:15:49 2015 +0200 ---------------------------------------------------------------------- .../api/management/mbean/ManagedFilterMBean.java | 5 ++++- .../camel/management/mbean/ManagedFilter.java | 11 +++++++++++ .../apache/camel/processor/FilterProcessor.java | 18 ++++++++++++++++++ .../camel/management/ManagedFilterTest.java | 3 +++ 4 files changed, 36 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/55b3c424/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java index f2451c0..9dd63c3 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java @@ -20,7 +20,10 @@ import org.apache.camel.api.management.ManagedAttribute; public interface ManagedFilterMBean extends ManagedProcessorMBean { - @ManagedAttribute(description = "Predicate to determine if the message should be filtered or not.") + @ManagedAttribute(description = "Predicate to determine if the message should be filtered or not") String getFilter(); + @ManagedAttribute(description = "Gets the number of Exchanges that matched the filter predicate and therefore as filtered") + Long getFilteredCount(); + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/55b3c424/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java index c25c36b..fc1afe8 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java @@ -35,7 +35,18 @@ public class ManagedFilter extends ManagedProcessor implements ManagedFilterMBea } @Override + public synchronized void reset() { + processor.reset(); + super.reset(); + } + + @Override public String getFilter() { return processor.getPredicate().toString(); } + + @Override + public Long getFilteredCount() { + return processor.getFilteredCount(); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/55b3c424/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java index 64e9324..31bdf93 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java @@ -36,6 +36,7 @@ public class FilterProcessor extends DelegateAsyncProcessor implements Traceable private static final Logger LOG = LoggerFactory.getLogger(FilterProcessor.class); private String id; private final Predicate predicate; + private transient long filtered; public FilterProcessor(Predicate predicate, Processor processor) { super(processor); @@ -57,6 +58,7 @@ public class FilterProcessor extends DelegateAsyncProcessor implements Traceable exchange.setProperty(Exchange.FILTER_MATCHED, matches); if (matches) { + filtered++; return processor.process(exchange, callback); } else { callback.done(true); @@ -85,9 +87,25 @@ public class FilterProcessor extends DelegateAsyncProcessor implements Traceable return predicate; } + /** + * Gets the number of Exchanges that matched the filter predicate and therefore as filtered. + */ + public long getFilteredCount() { + return filtered; + } + + /** + * Reset counters. + */ + public void reset() { + filtered = 0; + } + @Override protected void doStart() throws Exception { super.doStart(); + // restart counter + reset(); ServiceHelper.startService(predicate); } http://git-wip-us.apache.org/repos/asf/camel/blob/55b3c424/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java index 6591c35..2d66095 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java @@ -58,6 +58,9 @@ public class ManagedFilterTest extends ManagementTestSupport { String state = (String) mbeanServer.getAttribute(on, "State"); assertEquals(ServiceStatus.Started.name(), state); + Long count = (Long) mbeanServer.getAttribute(on, "FilteredCount"); + assertEquals(1, count.longValue()); + String uri = (String) mbeanServer.getAttribute(on, "Filter"); assertEquals("header{header(foo)}", uri);