Updated Branches:
  refs/heads/master 66939043e -> 811bfdb59

Added headers for specifying cloudwatch metric dimensions


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

Branch: refs/heads/master
Commit: 811bfdb59d5ea3315a71fb37799174f62e2343c1
Parents: 6693904
Author: bibryam <[email protected]>
Authored: Fri May 17 12:37:20 2013 +0100
Committer: bibryam <[email protected]>
Committed: Fri May 17 12:57:59 2013 +0100

----------------------------------------------------------------------
 .../apache/camel/component/aws/cw/CwConstants.java |    3 +
 .../apache/camel/component/aws/cw/CwProducer.java  |   30 +++++++++++++-
 .../camel/component/aws/cw/CwComponentTest.java    |   30 ++++++++++++++-
 3 files changed, 58 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/811bfdb5/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwConstants.java
----------------------------------------------------------------------
diff --git 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwConstants.java
 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwConstants.java
index ba4b983..5254953 100644
--- 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwConstants.java
+++ 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwConstants.java
@@ -25,4 +25,7 @@ public interface CwConstants {
     String METRIC_VALUE = "CamelAwsCwMetricValue";
     String METRIC_UNIT = "CamelAwsCwMetricUnit";
     String METRIC_TIMESTAMP = "CamelAwsCwMetricTimestamp";
+    String METRIC_DIMENSIONS = "CamelAwsCwMetricDimensions";
+    String METRIC_DIMENSION_NAME = "CamelAwsCwMetricDimensionName";
+    String METRIC_DIMENSION_VALUE = "CamelAwsCwMetricDimensionValue";
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/811bfdb5/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
index 890da6e..26ad572 100644
--- 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
+++ 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
@@ -17,10 +17,14 @@
 package org.apache.camel.component.aws.cw;
 
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
+import com.amazonaws.services.cloudwatch.model.Dimension;
 import com.amazonaws.services.cloudwatch.model.MetricDatum;
 import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;
 import com.amazonaws.services.cloudwatch.model.StandardUnit;
@@ -53,18 +57,38 @@ public class CwProducer extends DefaultProducer {
     private List<MetricDatum> getMetricData(Exchange exchange) {
         Object body = exchange.getIn().getBody();
         if (body instanceof List) {
-            return CastUtils.cast((List<?>)body);
+            return CastUtils.cast((List<?>) body);
         }
 
         if (body instanceof MetricDatum) {
             return Arrays.asList((MetricDatum) body);
         }
 
-        return Arrays.asList(new MetricDatum()
+        MetricDatum metricDatum = new MetricDatum()
                 .withMetricName(determineName(exchange))
                 .withValue(determineValue(exchange))
                 .withUnit(determineUnit(exchange))
-                .withTimestamp(determineTimestamp(exchange)));
+                .withTimestamp(determineTimestamp(exchange));
+        setDimension(metricDatum, exchange);
+        return Arrays.asList(metricDatum);
+    }
+
+    private void setDimension(MetricDatum metricDatum, Exchange exchange) {
+        String name = 
exchange.getIn().getHeader(CwConstants.METRIC_DIMENSION_NAME, String.class);
+        String value = 
exchange.getIn().getHeader(CwConstants.METRIC_DIMENSION_VALUE, String.class);
+        if (name != null && value != null) {
+            metricDatum.withDimensions(new 
Dimension().withName(name).withValue(value));
+        } else {
+            Map<String, String> dimensions = 
exchange.getIn().getHeader(CwConstants.METRIC_DIMENSIONS, Map.class);
+            if (dimensions != null) {
+                Collection<Dimension> dimensionCollection = new 
ArrayList<Dimension>();
+                for (Map.Entry<String, String> dimensionEntry : 
dimensions.entrySet()) {
+                    Dimension dimension = new 
Dimension().withName(dimensionEntry.getKey()).withValue(dimensionEntry.getValue());
+                    dimensionCollection.add(dimension);
+                }
+                metricDatum.withDimensions(dimensionCollection);
+            }
+        }
     }
 
     private Date determineTimestamp(Exchange exchange) {

http://git-wip-us.apache.org/repos/asf/camel/blob/811bfdb5/components/camel-aws/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-aws/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
 
b/components/camel-aws/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
index 2a9f06a..86dc0b1 100644
--- 
a/components/camel-aws/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
+++ 
b/components/camel-aws/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
@@ -17,8 +17,12 @@
 package org.apache.camel.component.aws.cw;
 
 import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
+import com.amazonaws.services.cloudwatch.model.Dimension;
 import com.amazonaws.services.cloudwatch.model.MetricDatum;
 import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;
 import com.amazonaws.services.cloudwatch.model.StandardUnit;
@@ -29,8 +33,9 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-
 import org.mockito.ArgumentCaptor;
+
+import static org.hamcrest.core.Is.is;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
@@ -81,7 +86,6 @@ public class CwComponentTest extends CamelTestSupport {
         assertEquals(Double.valueOf(0), 
argument.getValue().getMetricData().get(0).getValue());
     }
 
-
     @Test
     public void useDefaultValuesForMetricUnitAndMetricValue() throws Exception 
{
         template.send("direct:start", ExchangePattern.InOnly, new Processor() {
@@ -99,6 +103,28 @@ public class CwComponentTest extends CamelTestSupport {
         assertEquals(StandardUnit.Count.toString(), 
argument.getValue().getMetricData().get(0).getUnit());
     }
 
+    @Test
+    public void setsMeticDimensions() throws Exception {
+        template.send("direct:start", ExchangePattern.InOnly, new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(CwConstants.METRIC_NAME, 
"errorCount");
+                Map<String, String> dimensionsMap = new LinkedHashMap<String, 
String>();
+                dimensionsMap.put("keyOne", "valueOne");
+                dimensionsMap.put("keyTwo", "valueTwo");
+                exchange.getIn().setHeader(CwConstants.METRIC_DIMENSIONS, 
dimensionsMap);
+            }
+        });
+
+        ArgumentCaptor<PutMetricDataRequest> argument = 
ArgumentCaptor.forClass(PutMetricDataRequest.class);
+        verify(cloudWatchClient).putMetricData(argument.capture());
+
+        List<Dimension> dimensions = 
argument.getValue().getMetricData().get(0).getDimensions();
+        Dimension dimension = dimensions.get(0);
+        assertThat(dimensions.size(), is(2));
+        assertEquals("keyOne", dimension.getName());
+        assertEquals("valueOne", dimension.getValue());
+    }
+
     @Override
     protected JndiRegistry createRegistry() throws Exception {
         JndiRegistry registry = super.createRegistry();

Reply via email to