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);
 

Reply via email to