Added header to enable overriding histogram value in the URI.

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3fe1d6c6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3fe1d6c6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3fe1d6c6

Branch: refs/heads/master
Commit: 3fe1d6c6f3acc5a62c6894d33f2efa11694743c3
Parents: e6cd8d5
Author: Lauri Kimmel <lauri.kim...@gmx.com>
Authored: Mon May 26 22:14:58 2014 +1000
Committer: Lauri Kimmel <lauri.kim...@gmx.com>
Committed: Mon May 26 22:14:58 2014 +1000

----------------------------------------------------------------------
 README.md                                       | 14 ++++++
 .../apache/camel/metrics/MetricsComponent.java  |  1 +
 .../metrics/histogram/HistogramProducer.java    |  7 ++-
 .../histogram/HistogramProducerTest.java        | 33 ++++++++++++++
 .../metrics/histogram/HistogramRouteTest.java   | 47 ++++++++++++++++----
 5 files changed, 92 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3fe1d6c6/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index f961937..296b2f3 100644
--- a/README.md
+++ b/README.md
@@ -189,6 +189,20 @@ from("direct:in")
     .to("direct:out")
 ```
 
+### Headers
+
+| Name                       | Description
+|----------------------------|---------------------------------|
+| CamelMetricsHistogramValue | Override increment value in URI |
+
+```java
+// adds value 992 to simple.histogram
+from("direct:in")
+    .setHeader(MetricsComponent.HEADER_HISTOGRAM_VALUE, constant(992L))
+    .to("metric:histogram:simple.histogram?value=700")
+    .to("direct:out")
+```
+
 ## Metrics type timer
 
 ```

http://git-wip-us.apache.org/repos/asf/camel/blob/3fe1d6c6/src/main/java/org/apache/camel/metrics/MetricsComponent.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/MetricsComponent.java 
b/src/main/java/org/apache/camel/metrics/MetricsComponent.java
index cc6a64b..c129c07 100644
--- a/src/main/java/org/apache/camel/metrics/MetricsComponent.java
+++ b/src/main/java/org/apache/camel/metrics/MetricsComponent.java
@@ -29,6 +29,7 @@ public class MetricsComponent extends DefaultComponent {
     public static final String HEADER_METRIC_NAME = "CamelMetricsName";
     public static final String HEADER_COUNTER_INCREMENT = 
"CamelMetricsCounterIncrement";
     public static final String HEADER_COUNTER_DECREMENT = 
"CamelMetricsCounterDecrement";
+    public static final String HEADER_HISTOGRAM_VALUE = 
"CamelMetricsHistogramValue";
 
     private static final Logger LOG = 
LoggerFactory.getLogger(MetricsComponent.class);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/3fe1d6c6/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java 
b/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
index 41b5cf7..bd701c0 100644
--- a/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
+++ b/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
@@ -1,5 +1,7 @@
 package org.apache.camel.metrics.histogram;
 
+import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultProducer;
@@ -24,8 +26,9 @@ public class HistogramProducer extends DefaultProducer {
         String metricsName = endpoint.getMetricsName(exchange);
         Histogram histogram = registry.histogram(metricsName);
         Long value = endpoint.getValue();
-        if (value != null) {
-            histogram.update(value);
+        Long finalValue = endpoint.getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, value);
+        if (finalValue != null) {
+            histogram.update(finalValue);
         }
         else {
             LOG.warn("Cannot update histogram \"{}\" with null value", 
metricsName);

http://git-wip-us.apache.org/repos/asf/camel/blob/3fe1d6c6/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
index 8662e9d..5cb5529 100644
--- 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
+++ 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
@@ -1,5 +1,6 @@
 package org.apache.camel.metrics.histogram;
 
+import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.times;
@@ -56,11 +57,13 @@ public class HistogramProducerTest {
     @Test
     public void testProcessValueSet() throws Exception {
         when(endpoint.getValue()).thenReturn(VALUE);
+        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
VALUE)).thenReturn(VALUE);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
+        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, VALUE);
         inOrder.verify(histogram, times(1)).update(VALUE);
         inOrder.verifyNoMoreInteractions();
     }
@@ -68,11 +71,41 @@ public class HistogramProducerTest {
     @Test
     public void testProcessValueNotSet() throws Exception {
         when(endpoint.getValue()).thenReturn(null);
+        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
null)).thenReturn(null);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
+        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, null);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testProcessOverrideValue() throws Exception {
+        when(endpoint.getValue()).thenReturn(VALUE);
+        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
VALUE)).thenReturn(VALUE + 3);
+        producer.process(exchange);
+        inOrder.verify(endpoint, times(1)).getRegistry();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
+        inOrder.verify(endpoint, times(1)).getValue();
+        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, VALUE);
+        inOrder.verify(histogram, times(1)).update(VALUE + 3);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testProcessOverrideUriValueNotSet() throws Exception {
+        when(endpoint.getValue()).thenReturn(null);
+        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
null)).thenReturn(VALUE + 2);
+        producer.process(exchange);
+        inOrder.verify(endpoint, times(1)).getRegistry();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
+        inOrder.verify(endpoint, times(1)).getValue();
+        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, null);
+        inOrder.verify(histogram, times(1)).update(VALUE + 2);
         inOrder.verifyNoMoreInteractions();
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/3fe1d6c6/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
index e8646cb..cc01a1d 100644
--- a/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
+++ b/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
@@ -1,5 +1,9 @@
 package org.apache.camel.metrics.histogram;
 
+import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
+import static org.apache.camel.metrics.MetricsComponent.HEADER_METRIC_NAME;
+import static org.apache.camel.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
@@ -8,11 +12,12 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.metrics.MetricsComponent;
 import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.CamelSpringDelegatingTestContextLoader;
 import org.apache.camel.test.spring.CamelSpringJUnit4ClassRunner;
 import org.apache.camel.test.spring.MockEndpoints;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InOrder;
@@ -37,6 +42,12 @@ public class HistogramRouteTest {
     @Produce(uri = "direct:in")
     private ProducerTemplate producer;
 
+    private MetricRegistry mockRegistry;
+
+    private Histogram mockHistogram;
+
+    private InOrder inOrder;
+
     @Configuration
     public static class TestConfig extends SingleRouteCamelConfiguration {
 
@@ -54,25 +65,45 @@ public class HistogramRouteTest {
             };
         }
 
-        @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
+        @Bean(name = METRIC_REGISTRY_NAME)
         public MetricRegistry getMetricRegistry() {
             return Mockito.mock(MetricRegistry.class);
         }
     }
 
+    @Before
+    public void setup() {
+        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
+        mockRegistry = 
endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRIC_REGISTRY_NAME,
 MetricRegistry.class);
+        mockHistogram = Mockito.mock(Histogram.class);
+        inOrder = Mockito.inOrder(mockRegistry, mockHistogram);
+    }
+
+    @After
+    public void tearDown() {
+        endpoint.reset();
+        reset(mockRegistry);
+    }
+
     @Test
     public void testOverrideMetricsName() throws Exception {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        MetricRegistry mockRegistry = 
endpoint.getCamelContext().getRegistry().lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME,
 MetricRegistry.class);
-        Histogram mockHistogram = Mockito.mock(Histogram.class);
-        InOrder inOrder = Mockito.inOrder(mockRegistry, mockHistogram);
         when(mockRegistry.histogram("B")).thenReturn(mockHistogram);
-
         endpoint.expectedMessageCount(1);
-        producer.sendBodyAndHeader(new Object(), 
MetricsComponent.HEADER_METRIC_NAME, "B");
+        producer.sendBodyAndHeader(new Object(), HEADER_METRIC_NAME, "B");
         endpoint.assertIsSatisfied();
         inOrder.verify(mockRegistry, times(1)).histogram("B");
         inOrder.verify(mockHistogram, times(1)).update(332491L);
         inOrder.verifyNoMoreInteractions();
     }
+
+    @Test
+    public void testOverrideValue() throws Exception {
+        when(mockRegistry.histogram("A")).thenReturn(mockHistogram);
+        endpoint.expectedMessageCount(1);
+        producer.sendBodyAndHeader(new Object(), HEADER_HISTOGRAM_VALUE, 181L);
+        endpoint.assertIsSatisfied();
+        inOrder.verify(mockRegistry, times(1)).histogram("A");
+        inOrder.verify(mockHistogram, times(1)).update(181L);
+        inOrder.verifyNoMoreInteractions();
+    }
 }

Reply via email to