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